同じ名前の食材がある場合でもエラーにならないように修正

feature-frontend-dishedit-kato
Masaharu.Kato 4 months ago
parent 4279750e3b
commit 7dc49cacdb
  1. 21
      backend/src/main/java/com/example/todoapp/service/RecipeService.java
  2. 30
      backend/src/main/java/com/example/todoapp/service/ToBuysService.java

@ -64,17 +64,17 @@ public class RecipeService {
List<RecipeStuffs> recipeStuffsList = new ArrayList<>(); List<RecipeStuffs> recipeStuffsList = new ArrayList<>();
for (StuffRequestDTO stuffDTO : dto.getStuffAndAmountArray()) { for (StuffRequestDTO stuffDTO : dto.getStuffAndAmountArray()) {
Optional<Stuffs> optStuff = stuffsRepository.findByStuffName(stuffDTO.getStuffName());
Stuffs stuff; Stuffs stuff;
if (stuffDTO.getStuffId() != null && !stuffDTO.getStuffId().isEmpty()) {
// stuffIdが存在する if (optStuff.isEmpty()) {
stuff = stuffsRepository.findById(Long.valueOf(stuffDTO.getStuffId()))
.orElseThrow(() -> new RuntimeException("材料がありません"));
} else {
// stuffIdが存在しない // stuffIdが存在しない
stuff = new Stuffs(); stuff = new Stuffs();
stuff.setStuffName(stuffDTO.getStuffName()); stuff.setStuffName(stuffDTO.getStuffName());
stuff.setCategory(stuffDTO.getCategory()); stuff.setCategory(stuffDTO.getCategory());
stuff = stuffsRepository.save(stuff); stuff = stuffsRepository.save(stuff);
} else {
stuff = optStuff.get();
} }
RecipeStuffs recipeStuffs = new RecipeStuffs(); RecipeStuffs recipeStuffs = new RecipeStuffs();
@ -158,11 +158,14 @@ public class RecipeService {
// 提供された材料の詳細を繰り返し処理 // 提供された材料の詳細を繰り返し処理
for (StuffDetailDTO stuffDTO : dto.getStuffAndAmountArray()) { for (StuffDetailDTO stuffDTO : dto.getStuffAndAmountArray()) {
if (stuffDTO.getStuffId() == null) {
Optional<Stuffs> optStuff = stuffsRepository.findByStuffName(stuffDTO.getStuffName());
if (optStuff.isEmpty()) {
// 材料IDがnullの場合、新しい材料を作成 // 材料IDがnullの場合、新しい材料を作成
Stuffs newStuff = new Stuffs(); Stuffs newStuff = new Stuffs();
newStuff.setStuffName(stuffDTO.getStuffName()); newStuff.setStuffName(stuffDTO.getStuffName());
newStuff.setCategory("その他"); newStuff.setCategory(stuffDTO.getCategory());
newStuff = stuffsRepository.save(newStuff); newStuff = stuffsRepository.save(newStuff);
// 新しいRecipeStuffsエントリを作成 // 新しいRecipeStuffsエントリを作成
@ -174,9 +177,11 @@ public class RecipeService {
incomingStuffIds.add(newStuff.getStuffId()); incomingStuffIds.add(newStuff.getStuffId());
} else { } else {
Long stuffId = optStuff.get().getStuffId();
// 材料IDが提供されている場合、既存のRecipeStuffsエントリを検索 // 材料IDが提供されている場合、既存のRecipeStuffsエントリを検索
Optional<RecipeStuffs> optionalRs = recipeStuffsRepository Optional<RecipeStuffs> optionalRs = recipeStuffsRepository
.findByRecipesRecipeIdAndStuffStuffId(dto.getRecipeId(), stuffDTO.getStuffId()); .findByRecipesRecipeIdAndStuffStuffId(dto.getRecipeId(), stuffId);
if (optionalRs.isPresent()) { if (optionalRs.isPresent()) {
// RecipeStuffsエントリが存在する場合、数量を更新 // RecipeStuffsエントリが存在する場合、数量を更新

@ -66,7 +66,7 @@ public class ToBuysService {
/** /**
* 購入リストに新しいアイテムを追加する * 購入リストに新しいアイテムを追加する
* *
* @param toBuyDTO 追加する購入アイテムのデータDTO * @param toBuyDTO 追加する購入アイテムのデータDTO
* @param authentication 認証情報 * @param authentication 認証情報
* @return 追加された購入アイテム * @return 追加された購入アイテム
*/ */
@ -77,8 +77,10 @@ public class ToBuysService {
User user = userRepository.findByUsername(username) User user = userRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException("ユーザーが見つかりません: " + username)); .orElseThrow(() -> new RuntimeException("ユーザーが見つかりません: " + username));
Optional<Stuffs> optStuff = stuffsRepository.findByStuffName(toBuyDTO.getStuffName());
Stuffs stuff; Stuffs stuff;
if (toBuyDTO.getStuffId() == null) {
if (optStuff.isEmpty()) {
// 新しい材料を作成 // 新しい材料を作成
stuff = new Stuffs(); stuff = new Stuffs();
stuff.setStuffName(toBuyDTO.getStuffName()); stuff.setStuffName(toBuyDTO.getStuffName());
@ -86,11 +88,7 @@ public class ToBuysService {
stuff = stuffsRepository.save(stuff); stuff = stuffsRepository.save(stuff);
} else { } else {
// 材料情報を取得 // 材料情報を取得
Optional<Stuffs> optionalStuffs = stuffsRepository.findByStuffId(toBuyDTO.getStuffId()); stuff = optStuff.get();
if (!optionalStuffs.isPresent()) {
throw new RuntimeException("材料がありません");
}
stuff = optionalStuffs.get();
} }
ToBuys toBuys = new ToBuys(); ToBuys toBuys = new ToBuys();
@ -109,7 +107,7 @@ public class ToBuysService {
* *
* @param toBuyDTO 変更する購入アイテムのデータDTO * @param toBuyDTO 変更する購入アイテムのデータDTO
*/ */
public ToBuys updateToBuys(ToBuysDTO toBuyDTO, Authentication authentication) { public ToBuys updateToBuys(ToBuysDTO toBuyDTO, Authentication authentication) {
// ユーザー情報を取得 // ユーザー情報を取得
String username = authentication.getName(); String username = authentication.getName();
@ -140,7 +138,7 @@ public class ToBuysService {
} }
stuffs = optionalStuffs.get(); stuffs = optionalStuffs.get();
//update // update
stuffs = stuffsRepository.save(stuffs); stuffs = stuffsRepository.save(stuffs);
} }
@ -179,7 +177,7 @@ public class ToBuysService {
* 指定されたユーザーIDと購入データに基づいて買うものを購入する * 指定されたユーザーIDと購入データに基づいて買うものを購入する
* *
* @param username ユーザーID * @param username ユーザーID
* @param dto 購入データ * @param dto 購入データ
*/ */
@Transactional @Transactional
public Stocks buyToBuys(String username, BuyRequestDTO dto) { public Stocks buyToBuys(String username, BuyRequestDTO dto) {
@ -199,7 +197,7 @@ public class ToBuysService {
stock.setBuyDate(dto.getBuyDate()); stock.setBuyDate(dto.getBuyDate());
stock.setExpDate(dto.getExpDate()); stock.setExpDate(dto.getExpDate());
// 買うものリストから削除 // 買うものリストから削除
System.out.println("tobuy.getTobuyId()=" + tobuy.getTobuyId()); System.out.println("tobuy.getTobuyId()=" + tobuy.getTobuyId());
deleteToBuysByTobuyId(tobuy.getTobuyId()); deleteToBuysByTobuyId(tobuy.getTobuyId());
@ -210,7 +208,7 @@ public class ToBuysService {
/** /**
* 指定されたレシピIDに基づいて買うものを追加する * 指定されたレシピIDに基づいて買うものを追加する
* *
* @param recipeId レシピID * @param recipeId レシピID
* @param authentication 認証情報 * @param authentication 認証情報
* @return 追加された買うもののリスト * @return 追加された買うもののリスト
*/ */
@ -220,7 +218,7 @@ public class ToBuysService {
User user = userRepository.findByUsername(username) User user = userRepository.findByUsername(username)
.orElseThrow(() -> new RuntimeException("ユーザーが見つかりません: " + username)); .orElseThrow(() -> new RuntimeException("ユーザーが見つかりません: " + username));
// 料理情報を取得 // 料理情報を取得
List<RecipeStuffs> recipeStuffsList = RecipeStuffsRepository.findByRecipesRecipeId(recipeId); List<RecipeStuffs> recipeStuffsList = RecipeStuffsRepository.findByRecipesRecipeId(recipeId);
List<ToBuyResponseDTO> result = new ArrayList<>(); List<ToBuyResponseDTO> result = new ArrayList<>();
@ -268,10 +266,8 @@ public class ToBuysService {
*/ */
private User getUserByUsername(String username) { private User getUserByUsername(String username) {
return userRepository.findByUsername(username) return userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException(messageUtils.getMessage("error.auth.user.not.found.with.name", new Object[]{username}))); .orElseThrow(() -> new UsernameNotFoundException(
messageUtils.getMessage("error.auth.user.not.found.with.name", new Object[] { username })));
} }
} }
Loading…
Cancel
Save