|
|
|
@ -10,11 +10,14 @@ package com.example.todoapp.service; |
|
|
|
|
|
|
|
|
|
import com.example.todoapp.util.MessageUtils; |
|
|
|
|
import com.example.todoapp.dto.BuyRequestDTO; |
|
|
|
|
import com.example.todoapp.dto.ToBuyResponseDTO; |
|
|
|
|
import com.example.todoapp.dto.ToBuysDTO; |
|
|
|
|
import com.example.todoapp.model.RecipeStuffs; |
|
|
|
|
import com.example.todoapp.model.Stocks; |
|
|
|
|
import com.example.todoapp.model.Stuffs; |
|
|
|
|
import com.example.todoapp.model.ToBuys; |
|
|
|
|
import com.example.todoapp.model.User; |
|
|
|
|
import com.example.todoapp.repository.RecipeStuffsRepository; |
|
|
|
|
import com.example.todoapp.repository.StocksRepository; |
|
|
|
|
import com.example.todoapp.repository.StuffsRepository; |
|
|
|
|
import com.example.todoapp.repository.ToBuysRepository; |
|
|
|
@ -27,6 +30,7 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Optional; |
|
|
|
|
|
|
|
|
@ -56,11 +60,15 @@ public class ToBuysService { |
|
|
|
|
@Autowired |
|
|
|
|
private MessageUtils messageUtils; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private RecipeStuffsRepository RecipeStuffsRepository; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 購入リストに新しいアイテムを追加する |
|
|
|
|
* |
|
|
|
|
* @param toBuyDTO 追加する購入アイテムのデータ(DTO) |
|
|
|
|
* @param authentication 認証情報 |
|
|
|
|
* @return 追加された購入アイテム |
|
|
|
|
*/ |
|
|
|
|
public ToBuys addToBuys(ToBuysDTO toBuyDTO, Authentication authentication) { |
|
|
|
|
|
|
|
|
@ -78,7 +86,7 @@ public class ToBuysService { |
|
|
|
|
stuff = stuffsRepository.save(stuff); |
|
|
|
|
} else { |
|
|
|
|
// 材料情報を取得
|
|
|
|
|
Optional<Stuffs> optionalStuffs = stuffsRepository.findById(toBuyDTO.getStuffId()); |
|
|
|
|
Optional<Stuffs> optionalStuffs = stuffsRepository.findByStuffId(toBuyDTO.getStuffId()); |
|
|
|
|
if (!optionalStuffs.isPresent()) { |
|
|
|
|
throw new RuntimeException("材料がありません"); |
|
|
|
|
} |
|
|
|
@ -114,11 +122,11 @@ public class ToBuysService { |
|
|
|
|
Optional<Stuffs> existingStuffs = stuffsRepository.findByStuffName(toBuyDTO.getStuffName()); |
|
|
|
|
// 新しい材料を作成
|
|
|
|
|
if (existingStuffs.isPresent()) { |
|
|
|
|
// 如果存在,更新已有材料的属性
|
|
|
|
|
// 材料が存在する場合、更新
|
|
|
|
|
stuffs = existingStuffs.get(); |
|
|
|
|
stuffs.setCategory(toBuyDTO.getCategory()); // 可选:更新分类
|
|
|
|
|
} else { |
|
|
|
|
// 否则新建材料
|
|
|
|
|
// 材料が存在しない場合、新規作成
|
|
|
|
|
stuffs = new Stuffs(); |
|
|
|
|
stuffs.setStuffName(toBuyDTO.getStuffName()); |
|
|
|
|
stuffs.setCategory(toBuyDTO.getCategory()); |
|
|
|
@ -154,7 +162,7 @@ public class ToBuysService { |
|
|
|
|
* @return ユーザーに紐づく「買うもの」リスト |
|
|
|
|
*/ |
|
|
|
|
public List<ToBuys> getToBuysByUser(User user) { |
|
|
|
|
return toBuysRepository.findByUser(user.getId()); |
|
|
|
|
return toBuysRepository.findByUserIdOrderByTobuyIdAsc(user.getId()); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
@ -163,7 +171,7 @@ public class ToBuysService { |
|
|
|
|
* @param tobuyId 購入リストID |
|
|
|
|
*/ |
|
|
|
|
@Transactional |
|
|
|
|
public int deleteToBuyById(Long tobuyId) { |
|
|
|
|
public int deleteToBuysByTobuyId(Long tobuyId) { |
|
|
|
|
return toBuysRepository.deleteByTobuyId(tobuyId); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -179,7 +187,7 @@ public class ToBuysService { |
|
|
|
|
User user = getUserByUsername(username); |
|
|
|
|
|
|
|
|
|
// Tobuy情報の取得
|
|
|
|
|
ToBuys tobuy = toBuysRepository.findById(dto.getTobuyId()); |
|
|
|
|
ToBuys tobuy = toBuysRepository.findByTobuyId(dto.getTobuyId()); |
|
|
|
|
|
|
|
|
|
// 新しい在庫を作成
|
|
|
|
|
Stocks stock = new Stocks(); |
|
|
|
@ -193,12 +201,64 @@ public class ToBuysService { |
|
|
|
|
|
|
|
|
|
// 買うものリストから削除
|
|
|
|
|
System.out.println("tobuy.getTobuyId()=" + tobuy.getTobuyId()); |
|
|
|
|
deleteToBuyById(tobuy.getTobuyId()); |
|
|
|
|
deleteToBuysByTobuyId(tobuy.getTobuyId()); |
|
|
|
|
|
|
|
|
|
// データベースに保存
|
|
|
|
|
return stocksRepository.save(stock); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 指定されたレシピIDに基づいて「買うもの」を追加する |
|
|
|
|
* |
|
|
|
|
* @param recipeId レシピID |
|
|
|
|
* @param authentication 認証情報 |
|
|
|
|
* @return 追加された「買うもの」のリスト |
|
|
|
|
*/ |
|
|
|
|
public List<ToBuyResponseDTO> addByRecipeId(Long recipeId, Authentication authentication) { |
|
|
|
|
// ユーザー情報を取得
|
|
|
|
|
String username = authentication.getName(); |
|
|
|
|
User user = userRepository.findByUsername(username) |
|
|
|
|
.orElseThrow(() -> new RuntimeException("ユーザーが見つかりません: " + username)); |
|
|
|
|
|
|
|
|
|
// 料理情報を取得
|
|
|
|
|
List<RecipeStuffs> recipeStuffsList = RecipeStuffsRepository.findByRecipesRecipeId(recipeId); |
|
|
|
|
|
|
|
|
|
List<ToBuyResponseDTO> result = new ArrayList<>(); |
|
|
|
|
|
|
|
|
|
for (RecipeStuffs rs : recipeStuffsList) { |
|
|
|
|
Stuffs stuff = rs.getStuff(); |
|
|
|
|
int requiredAmount = rs.getAmount(); |
|
|
|
|
|
|
|
|
|
Optional<ToBuys> existingToBuyOpt = toBuysRepository.findByUserAndStuff(user, stuff); |
|
|
|
|
|
|
|
|
|
ToBuys toBuy; |
|
|
|
|
if (existingToBuyOpt.isPresent()) { |
|
|
|
|
toBuy = existingToBuyOpt.get(); |
|
|
|
|
toBuy.setAmount(toBuy.getAmount() + requiredAmount); // 既存の数量を更新
|
|
|
|
|
} else { |
|
|
|
|
toBuy = new ToBuys(); |
|
|
|
|
toBuy.setUser(user); |
|
|
|
|
toBuy.setStuff(stuff); |
|
|
|
|
toBuy.setAmount(requiredAmount); |
|
|
|
|
toBuy.setStore(""); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
toBuy = toBuysRepository.save(toBuy); |
|
|
|
|
|
|
|
|
|
// ToBuyResponseDTOに変換
|
|
|
|
|
ToBuyResponseDTO dto = new ToBuyResponseDTO(); |
|
|
|
|
dto.setTobuyId(toBuy.getTobuyId()); |
|
|
|
|
dto.setStuffId(toBuy.getStuff().getStuffId()); |
|
|
|
|
dto.setStuffName(toBuy.getStuff().getStuffName()); |
|
|
|
|
dto.setAmount(toBuy.getAmount()); |
|
|
|
|
|
|
|
|
|
result.add(dto); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return result; |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* ユーザー名からユーザーエンティティを取得する |
|
|
|
|
* |
|
|
|
@ -211,4 +271,7 @@ public class ToBuysService { |
|
|
|
|
.orElseThrow(() -> new UsernameNotFoundException(messageUtils.getMessage("error.auth.user.not.found.with.name", new Object[]{username}))); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |