From b7116a0882ab81e750f1c0b939cb70a1d40821f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Rasie=C5=84ski?= Date: Wed, 7 Jan 2026 23:49:42 +0100 Subject: [PATCH] Created IngredientService --- .../server/database/IngredientRepository.java | 2 + .../main/java/service/IngredientService.java | 65 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 server/src/main/java/service/IngredientService.java diff --git a/server/src/main/java/server/database/IngredientRepository.java b/server/src/main/java/server/database/IngredientRepository.java index df54bd3..ba90987 100644 --- a/server/src/main/java/server/database/IngredientRepository.java +++ b/server/src/main/java/server/database/IngredientRepository.java @@ -12,5 +12,7 @@ public interface IngredientRepository extends JpaRepository { List findAllByOrderByNameAsc(); Page findAllByOrderByNameAsc(Pageable pageable); Optional findByName(String name); + + boolean existsByName(String name); } diff --git a/server/src/main/java/service/IngredientService.java b/server/src/main/java/service/IngredientService.java new file mode 100644 index 0000000..a519107 --- /dev/null +++ b/server/src/main/java/service/IngredientService.java @@ -0,0 +1,65 @@ +package service; + +import commons.Ingredient; +import org.springframework.data.domain.PageRequest; +import org.springframework.stereotype.Service; +import server.database.IngredientRepository; + +import java.util.List; +import java.util.Optional; + +@Service +public class IngredientService { + IngredientRepository ingredientRepository; + + public IngredientService(IngredientRepository ingredientRepository) { + this.ingredientRepository = ingredientRepository; + } + + public Optional findById(Long id) { + return ingredientRepository.findById(id); + } + + public List findAll() { + return ingredientRepository.findAll(); + } + + public List findAll(int limit) { + return ingredientRepository.findAll(PageRequest.of(0, limit)).toList(); + } + + /** + * Creates a new ingredient. Returns empty if the recipe with the same name or id already exists. + * @param ingredient Ingredient to be saved in the db. + * @return The created ingredient (the ingredient arg with a new assigned id) or empty if it already exists in db. + */ + public Optional create(Ingredient ingredient) { + if (ingredientRepository.existsByName(ingredient.getName()) || + ingredientRepository.existsById(ingredient.getId())) { + return Optional.empty(); + } + + return Optional.of(ingredientRepository.save(ingredient)); + } + + /** + * Updates an ingredient. The ingredient with the provided id will be replaced (in db) with the provided ingredient. + * @param id id of the ingredient to update. + * @param ingredient Ingredient to be saved in the db. + * @return The created ingredient (the ingredient arg with a new assigned id.) + */ + public Optional update(Long id, Ingredient ingredient) { + assert id.equals(ingredient.getId()) : + "The id of the updated ingredient doesn't match the provided ingredient's id."; + if (!ingredientRepository.existsById(id)) { + return Optional.empty(); + } + + return Optional.of(ingredientRepository.save(ingredient)); + } + + public void delete(Long id) { + ingredientRepository.deleteById(id); + } + +}