FavoriteDrinkService
負責處理「最愛飲品」相關的邏輯。它通常會呼叫 Repository 來存取資料庫,並提供方法給 Controller 使用。在此服務中較爲重要的三個功能,分別是:
第一,新增喜好飲品, 此方法會根據使用者名稱與飲品資訊,先檢查使用者是否存在,再判斷該飲品是否已在收藏清單中。若未重複,則建立 FavoriteDrink 實體並存入資料庫。
public FavoriteDrink addFavoriteDrink(String username, FavoriteDrinkRequest request) {
Optional<User> userOpt = userRepository.findByUsername(username);
if (userOpt.isEmpty()) {
throw new RuntimeException("使用者不存在");
}
User user = userOpt.get();
// 檢查是否已經收藏
if (favoriteDrinkRepository.existsByUserAndDrinkName(user, request.getDrinkName())) {
throw new RuntimeException("此飲品已在收藏清單中");
}
FavoriteDrink favoriteDrink = new FavoriteDrink(user, request.getDrinkName(), request.getDrinkCategory());
favoriteDrink.setDrinkDescription(request.getDrinkDescription());
favoriteDrink.setPrice(request.getPrice());
favoriteDrink.setTags(request.getTags());
favoriteDrink.setNotes(request.getNotes());
return favoriteDrinkRepository.save(favoriteDrink);
}
第二,判斷飲品是否已被收藏, 此方法用於查詢某使用者是否已收藏指定飲品。先查詢使用者,若存在則呼叫 Repository 判斷是否有該飲品紀錄,回傳布林值。這對前端顯示「已收藏」狀態很重要。
public boolean isDrinkFavoritedByUser(String username, String drinkName) {
User user = userRepository.findByUsername(username).orElse(null);
if (user == null) return false;
return favoriteDrinkRepository.existsByUserAndDrinkName(user, drinkName);
}
第三,移除最愛飲品,此方法會先確認使用者存在,再查詢該飲品是否在收藏清單中。若找到則刪除,否則拋出例外。
public void removeFavoriteDrink(String username, String drinkName) {
Optional<User> userOpt = userRepository.findByUsername(username);
if (userOpt.isEmpty()) {
throw new RuntimeException("使用者不存在");
}
User user = userOpt.get();
Optional<FavoriteDrink> favDrinkOpt = favoriteDrinkRepository.findByUserAndDrinkName(user, drinkName);
if (favDrinkOpt.isEmpty()) {
throw new RuntimeException("收藏清單中找不到此飲品");
}
favoriteDrinkRepository.delete(favDrinkOpt.get());
}
這三個方法分別負責新增、查詢、移除最愛飲品,能夠確保資料正確性、避免重複、並提供錯誤處理,並讓 Controller 可以簡單呼叫 Service 方法,將資料存取細節封裝在 Repository 層。