diff --git a/src/main/java/com/example/demo/controller/SiteController.java b/src/main/java/com/example/demo/controller/SiteController.java index 2ed12eb..b6e4804 100644 --- a/src/main/java/com/example/demo/controller/SiteController.java +++ b/src/main/java/com/example/demo/controller/SiteController.java @@ -71,10 +71,18 @@ public class SiteController { @GetMapping("/recipes/{id}") public String viewRecipe(@PathVariable Integer id, Model model, Principal principal) { RecipeDto recipe = recipeService.getRecipeById(id); + + boolean saved = false; + if (principal != null) { + saved = userService.isFavorite(principal.getName(), id); + } + model.addAttribute("recipe", recipe); model.addAttribute("guest", principal == null); + model.addAttribute("saved", saved); + return "view-recipe"; - } + } @GetMapping("/recipes/{id}/edit") public String viewEditRecipePage(@PathVariable Integer id, Model model) { diff --git a/src/main/java/com/example/demo/service/Impl/UserServiceImpl.java b/src/main/java/com/example/demo/service/Impl/UserServiceImpl.java index eb10191..6f00bee 100644 --- a/src/main/java/com/example/demo/service/Impl/UserServiceImpl.java +++ b/src/main/java/com/example/demo/service/Impl/UserServiceImpl.java @@ -17,6 +17,9 @@ import com.example.demo.repository.RecipeRepo; import com.example.demo.repository.UserRepo; import com.example.demo.service.RecipeService; import com.example.demo.service.UserService; +import com.example.demo.entity.Favorite; +import com.example.demo.entity.FavoriteId; +import com.example.demo.repository.FavoriteRepo; import jakarta.transaction.Transactional; @@ -27,14 +30,16 @@ public class UserServiceImpl implements UserService { private RecipeRepo recipeRepository; private PasswordEncoder passwordEncoder; private RecipeService recipeService; + private FavoriteRepo favoriteRepository; public UserServiceImpl(UserRepo userRepository, RecipeRepo recipeRepository, - PasswordEncoder passwordEncoder, RecipeService recipeService) { + PasswordEncoder passwordEncoder, RecipeService recipeService, FavoriteRepo favoriteRepository) { super(); this.userRepository = userRepository; this.recipeRepository = recipeRepository; this.passwordEncoder = passwordEncoder; this.recipeService = recipeService; + this.favoriteRepository = favoriteRepository; } @Override @@ -78,13 +83,16 @@ public class UserServiceImpl implements UserService { @Transactional public UserDto saveFavorite(Integer userId, Integer recipeId) { User existingUser = userRepository.findById(userId) - .orElseThrow(() -> new NotFoundException("User", "id", userId)); + .orElseThrow(() -> new NotFoundException("User", "id", userId)); - Recipe existingRecipe = recipeRepository.findById(recipeId) - .orElseThrow(() -> new NotFoundException("Recipe", "id", recipeId)); + recipeRepository.findById(recipeId) + .orElseThrow(() -> new NotFoundException("Recipe", "id", recipeId)); - existingUser.getFavRecipes().add(existingRecipe); - userRepository.save(existingUser); + FavoriteId favoriteId = new FavoriteId(userId, recipeId); + + if (!favoriteRepository.existsById(favoriteId)) { + favoriteRepository.save(new Favorite(userId, recipeId)); + } return convertToDto(existingUser); } @@ -112,14 +120,17 @@ public class UserServiceImpl implements UserService { @Override @Transactional public void deleteFavorite(Integer userId, Integer recipeId) { - User existingUser = userRepository.findById(userId) - .orElseThrow(() -> new NotFoundException("User", "id", userId)); + userRepository.findById(userId) + .orElseThrow(() -> new NotFoundException("User", "id", userId)); - Recipe existingRecipe = recipeRepository.findById(recipeId) - .orElseThrow(() -> new NotFoundException("Recipe", "id", recipeId)); + recipeRepository.findById(recipeId) + .orElseThrow(() -> new NotFoundException("Recipe", "id", recipeId)); - existingUser.getFavRecipes().remove(existingRecipe); - userRepository.save(existingUser); + FavoriteId favoriteId = new FavoriteId(userId, recipeId); + + if (favoriteRepository.existsById(favoriteId)) { + favoriteRepository.deleteById(favoriteId); + } } @Override @@ -235,4 +246,13 @@ public class UserServiceImpl implements UserService { return favoriteDtos; } + + @Override + @Transactional + public boolean isFavorite(String username, Integer recipeId) { + User user = userRepository.findByUsername(username) + .orElseThrow(() -> new NotFoundException("User", "username", username)); + + return favoriteRepository.existsById(new FavoriteId(user.getId(), recipeId)); + } } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/UserService.java b/src/main/java/com/example/demo/service/UserService.java index 68d1de3..a2b5cea 100644 --- a/src/main/java/com/example/demo/service/UserService.java +++ b/src/main/java/com/example/demo/service/UserService.java @@ -42,4 +42,6 @@ public interface UserService { ProfileDto updateProfile(String username, UpdateProfileDto dto); List getFavoriteRecipesByUsername(String username); + + boolean isFavorite(String username, Integer recipeId); } \ No newline at end of file diff --git a/src/main/resources/templates/verify.html b/src/main/resources/templates/verify.html index 4d91027..6fd4182 100644 --- a/src/main/resources/templates/verify.html +++ b/src/main/resources/templates/verify.html @@ -40,7 +40,7 @@

- Didn’t get the code? + Didn’t get the code? Check your spam folder or wait a minute and try again. diff --git a/src/main/resources/templates/view-recipe.html b/src/main/resources/templates/view-recipe.html index 43bef1d..a265fd6 100644 --- a/src/main/resources/templates/view-recipe.html +++ b/src/main/resources/templates/view-recipe.html @@ -119,7 +119,13 @@ - +

@@ -131,55 +137,57 @@
+ \ No newline at end of file