meals-made-easy-api/src/main/java/app/mealsmadeeasy/api/recipe/star/RecipeStarServiceImpl.java
2024-08-13 11:43:21 -05:00

66 lines
2.6 KiB
Java

package app.mealsmadeeasy.api.recipe.star;
import app.mealsmadeeasy.api.recipe.Recipe;
import app.mealsmadeeasy.api.recipe.RecipeException;
import app.mealsmadeeasy.api.recipe.RecipeService;
import app.mealsmadeeasy.api.user.User;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.Optional;
@Service
public class RecipeStarServiceImpl implements RecipeStarService {
private final RecipeStarRepository recipeStarRepository;
private final RecipeService recipeService;
public RecipeStarServiceImpl(RecipeStarRepository recipeStarRepository, RecipeService recipeService) {
this.recipeStarRepository = recipeStarRepository;
this.recipeService = recipeService;
}
@Override
public RecipeStar create(long recipeId, String ownerUsername) {
final RecipeStarEntity draft = new RecipeStarEntity();
final RecipeStarId id = new RecipeStarId();
id.setRecipeId(recipeId);
id.setOwnerUsername(ownerUsername);
draft.setId(id);
draft.setDate(LocalDateTime.now());
return this.recipeStarRepository.save(draft);
}
@Override
public RecipeStar create(String recipeOwnerUsername, String recipeSlug, User starer) throws RecipeException {
final Recipe recipe = this.recipeService.getByUsernameAndSlug(recipeOwnerUsername, recipeSlug, starer);
final Optional<RecipeStarEntity> existing = this.recipeStarRepository.findByRecipeIdAndOwnerUsername(
recipe.getId(),
starer.getUsername()
);
if (existing.isPresent()) {
return existing.get();
}
return this.create(recipe.getId(), starer.getUsername());
}
@Override
public Optional<RecipeStar> find(String recipeOwnerUsername, String recipeSlug, User starer) throws RecipeException {
final Recipe recipe = this.recipeService.getByUsernameAndSlug(recipeOwnerUsername, recipeSlug, starer);
return this.recipeStarRepository.findByRecipeIdAndOwnerUsername(recipe.getId(), starer.getUsername())
.map(RecipeStar.class::cast);
}
@Override
public void delete(long recipeId, String ownerUsername) {
this.recipeStarRepository.deleteByRecipeIdAndOwnerUsername(recipeId, ownerUsername);
}
@Override
public void delete(String recipeOwnerUsername, String recipeSlug, User starer) throws RecipeException {
final Recipe recipe = this.recipeService.getByUsernameAndSlug(recipeOwnerUsername, recipeSlug, starer);
this.delete(recipe.getId(), starer.getUsername());
}
}