Merge remote-tracking branch 'origin/feature-frontend-dishedit' into feature-frontend-dishedit-kato

feature-frontend-dishedit-kato
Masaharu.Kato 4 months ago
commit b8e7a4ed1d
  1. 129
      backend/src/main/java/com/example/todoapp/config/InitTables.java
  2. 3
      backend/src/main/java/com/example/todoapp/model/Recipes.java
  3. 3
      backend/src/main/java/com/example/todoapp/repository/RecipeStuffsRepository.java
  4. 10
      backend/src/main/java/com/example/todoapp/repository/RecipesRepository.java
  5. 18
      backend/src/main/java/com/example/todoapp/service/RecipeService.java

@ -36,98 +36,101 @@ public class InitTables {
@Autowired @Autowired
private RecipesRepository recipesRepository; private RecipesRepository recipesRepository;
@Autowired @Autowired
private RecipeStuffsRepository RecipeStuffsRepository; private RecipeStuffsRepository recipeStuffsRepository;
@Autowired @Autowired
private StuffsRepository stuffsRepository; private StuffsRepository stuffsRepository;
@PostConstruct @PostConstruct
public void initTables() { public void initTables() {
// tobuysRepository.deleteAll(); //データを残す場合はコメントアウト tobuysRepository.deleteAll(); //データを残す場合はコメントアウト
// stocksRepository.deleteAll(); //データを残す場合はコメントアウト stocksRepository.deleteAll(); //データを残す場合はコメントアウト
// recipeStuffsRepository.deleteAll(); //データを残す場合はコメントアウト recipeStuffsRepository.deleteAll(); //データを残す場合はコメントアウト
// recipesRepository.deleteAll(); //データを残す場合はコメントアウト recipesRepository.deleteAll(); //データを残す場合はコメントアウト
// stuffsRepository.deleteAll(); //データを残す場合はコメントアウト stuffsRepository.deleteAll(); //データを残す場合はコメントアウト
if (stuffsRepository.count() > 0) { if (stuffsRepository.count() > 0) {
return; // すでにデータが存在する場合は何もしない // すでにデータが存在する場合は何もしない
} else { } else {
setNewStuff(1L, "牛乳", null, "乳製品"); setNewStuff("牛乳", null, "乳製品");
setNewStuff(2L, "ヨーグルト", null, "乳製品"); setNewStuff("ヨーグルト", null, "乳製品");
setNewStuff(3L, "チーズ", null, "乳製品"); setNewStuff("チーズ", null, "乳製品");
setNewStuff(4L, "バター", null, "乳製品"); setNewStuff("バター", null, "乳製品");
setNewStuff(5L, "生クリーム", null, "乳製品"); setNewStuff("生クリーム", null, "乳製品");
setNewStuff(6L, "鮭", null, "魚・肉"); setNewStuff("鮭", null, "魚・肉");
setNewStuff(7L, "鶏むね肉", null, "魚・肉"); setNewStuff("鶏むね肉", null, "魚・肉");
setNewStuff(8L, "豚バラ肉", null, "魚・肉"); setNewStuff("豚バラ肉", null, "魚・肉");
setNewStuff(9L, "牛ひき肉", null, "魚・肉"); setNewStuff("牛ひき肉", null, "魚・肉");
setNewStuff(10L, "まぐろ", null, "魚・肉"); setNewStuff("まぐろ", null, "魚・肉");
setNewStuff(11L, "にんじん", null, "野菜"); setNewStuff("にんじん", null, "野菜");
setNewStuff(12L, "キャベツ", null, "野菜"); setNewStuff("キャベツ", null, "野菜");
setNewStuff(13L, "ほうれん草", null, "野菜"); setNewStuff("ほうれん草", null, "野菜");
setNewStuff(14L, "玉ねぎ", null, "野菜"); setNewStuff("玉ねぎ", null, "野菜");
setNewStuff(15L, "ピーマン", null, "野菜"); setNewStuff("ピーマン", null, "野菜");
setNewStuff(16L, "じゃがいも", null, "野菜"); setNewStuff("じゃがいも", null, "野菜");
setNewStuff(17L, "醤油", null, "調味料"); setNewStuff("醤油", null, "調味料");
setNewStuff(18L, "味噌", null, "調味料"); setNewStuff("味噌", null, "調味料");
setNewStuff(19L, "塩", null, "調味料"); setNewStuff("塩", null, "調味料");
setNewStuff(20L, "砂糖", null, "調味料"); setNewStuff("砂糖", null, "調味料");
setNewStuff(21L, "酢", null, "調味料"); setNewStuff("酢", null, "調味料");
setNewStuff(22L, "米", null, "その他"); setNewStuff("米", null, "その他");
setNewStuff(23L, "パスタ", null, "その他"); setNewStuff("パスタ", null, "その他");
setNewStuff(24L, "小麦粉", null, "その他"); setNewStuff("小麦粉", null, "その他");
setNewStuff(25L, "卵", null, "その他"); setNewStuff("卵", null, "その他");
setNewStuff(26L, "豆腐", null, "その他"); setNewStuff("豆腐", null, "その他");
} }
if (stuffsRepository.count() > 0) { if (recipeStuffsRepository.count() > 0) {
return; // すでにデータが存在する場合は何もしない // すでにデータが存在する場合は何もしない
} else { } else {
setNewRecipe(1L, "鮭のムニエル", "鮭を小麦粉で焼いた料理"); Recipes recipe1 = new Recipes();
setNewRecipe(2L, "カレー", "野菜と肉を煮込んだカレー"); // recipe1.setRecipeId(1L);
} recipe1.setRecipeName("鮭のムニエル");
recipe1.setSummary("鮭を小麦粉で焼いた料理");
if (recipesRepository.count() > 0) { recipesRepository.save(recipe1);
return; // すでにデータが存在する場合は何もしない
} else { Recipes recipe2 = new Recipes();
setNewRecipeStuffs(1L, recipesRepository.findById(1L).orElse(null), 6L, 1); // 鮭 recipe2.setRecipeName("カレー");
setNewRecipeStuffs(3L, recipesRepository.findById(1L).orElse(null), 17L, 10); // 醤油 recipe2.setSummary("野菜と肉を煮込んだカレー");
setNewRecipeStuffs(2L, recipesRepository.findById(1L).orElse(null), 24L, 50); // 小麦粉 recipesRepository.save(recipe2);
setNewRecipeStuffs(4L, recipesRepository.findById(2L).orElse(null), 11L, 1); // にんじん
setNewRecipeStuffs(5L, recipesRepository.findById(2L).orElse(null), 16L, 1); // じゃがいも setNewRecipeStuffs(recipe1, stuffsRepository.findByStuffName("鮭").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: 鮭")), 1); // 鮭
setNewRecipeStuffs(6L, recipesRepository.findById(2L).orElse(null), 9L, 100); // 牛ひき肉 setNewRecipeStuffs(recipe1, stuffsRepository.findByStuffName("小麦粉").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: 小麦粉")), 50); // 小麦粉
setNewRecipeStuffs(recipe1, stuffsRepository.findByStuffName("バター").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: バター")), 10); // バター
setNewRecipeStuffs(recipe2, stuffsRepository.findByStuffName("にんじん").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: にんじん")), 1); // にんじん
setNewRecipeStuffs(recipe2, stuffsRepository.findByStuffName("じゃがいも").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: じゃがいも")), 1); // じゃがいも
setNewRecipeStuffs(recipe2, stuffsRepository.findByStuffName("牛ひき肉").orElseThrow(() -> new IllegalArgumentException("Stuff not found for name: 牛ひき肉")), 100); // 牛ひき肉
} }
} }
private void setNewStuff(Long stuffId, String stuffName, String summary, String category) { private void setNewStuff(String stuffName, String summary, String category) {
Stuffs stuff = new Stuffs(); Stuffs stuff = new Stuffs();
stuff.setStuffId(stuffId);
stuff.setStuffName(stuffName); stuff.setStuffName(stuffName);
stuff.setSummary(summary); stuff.setSummary(summary);
stuff.setCategory(category); stuff.setCategory(category);
stuffsRepository.save(stuff); stuffsRepository.save(stuff);
} }
private void setNewRecipe(Long recipeId, String recipeName, String summary) { // private void setNewRecipe(Long recipeId, String recipeName, String summary) {
Recipes recipe = new Recipes(); // Recipes recipe = new Recipes();
recipe.setRecipeId(recipeId); // recipe.setRecipeId(recipeId);
recipe.setRecipeName(recipeName); // recipe.setRecipeName(recipeName);
recipe.setSummary(summary); // recipe.setSummary(summary);
} // recipesRepository.save(recipe);
// }
private void setNewRecipeStuffs(Long recipeStuffsId, Recipes recipe, Long stuffId, int amount) { private void setNewRecipeStuffs(Recipes recipe, Stuffs stuff, int amount) {
RecipeStuffs recipeStuff = new RecipeStuffs(); RecipeStuffs recipeStuff = new RecipeStuffs();
recipeStuff.setRecipeStuffsId(recipeStuffsId);
recipeStuff.setRecipes(recipe); recipeStuff.setRecipes(recipe);
recipeStuff.setRecipeStuffsId(stuffId); recipeStuff.setStuff(stuff);
recipeStuff.setAmount(amount); recipeStuff.setAmount(amount);
RecipeStuffsRepository.save(recipeStuff); recipeStuffsRepository.save(recipeStuff);
} }
} }

@ -36,7 +36,7 @@ public class Recipes {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="recipeId") @Column(name="recipeId")
private Long recipeId ; private Long recipeId;
/** /**
* カテゴリ名 * カテゴリ名
@ -51,4 +51,5 @@ public class Recipes {
@Column (columnDefinition = "TEXT") @Column (columnDefinition = "TEXT")
private String summary; private String summary;
} }

@ -32,6 +32,3 @@ public interface RecipeStuffsRepository extends JpaRepository<RecipeStuffs, Long
*/ */
Optional<RecipeStuffs> findByRecipesRecipeIdAndStuffStuffId(Long recipeId, Long stuffId); Optional<RecipeStuffs> findByRecipesRecipeIdAndStuffStuffId(Long recipeId, Long stuffId);
} }

@ -3,6 +3,7 @@ package com.example.todoapp.repository;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import com.example.todoapp.model.Recipes; import com.example.todoapp.model.Recipes;
import java.util.Optional;
/** /**
* レシピエンティティのリポジトリインターフェース * レシピエンティティのリポジトリインターフェース
@ -11,4 +12,11 @@ import com.example.todoapp.model.Recipes;
* Spring Data JPAによって自動的に実装されます * Spring Data JPAによって自動的に実装されます
* </p> * </p>
*/ */
public interface RecipesRepository extends JpaRepository<Recipes, Long> {} public interface RecipesRepository extends JpaRepository<Recipes, Long> {
/**
* レシピIDでレシピを検索する
* @param recipeId
* @return Recipes オブジェクトのOptional
*/
Optional<Recipes> findByRecipeId(Long recipeId);
}

@ -47,7 +47,7 @@ public class RecipeService {
private StuffsRepository stuffsRepository; private StuffsRepository stuffsRepository;
@Autowired @Autowired
private RecipeStuffsRepository RecipeStuffsRepository; private RecipeStuffsRepository recipeStuffsRepository;
/** /**
* レシピを新規登録する * レシピを新規登録する
@ -89,7 +89,7 @@ public class RecipeService {
recipeStuffsList.add(recipeStuffs); recipeStuffsList.add(recipeStuffs);
} }
RecipeStuffsRepository.saveAll(recipeStuffsList); recipeStuffsRepository.saveAll(recipeStuffsList);
return recipe; return recipe;
} }
@ -113,7 +113,7 @@ public class RecipeService {
Recipes recipe = recipesRepository.findById(recipeId) Recipes recipe = recipesRepository.findById(recipeId)
.orElseThrow(() -> new RuntimeException("レシピが見つかりません")); .orElseThrow(() -> new RuntimeException("レシピが見つかりません"));
List<RecipeStuffs> recipeStuffsList = RecipeStuffsRepository.findByRecipesRecipeId(recipeId); List<RecipeStuffs> recipeStuffsList = recipeStuffsRepository.findByRecipesRecipeId(recipeId);
List<StuffDetailDTO> stuffList = recipeStuffsList.stream() List<StuffDetailDTO> stuffList = recipeStuffsList.stream()
.map(rs -> { .map(rs -> {
@ -170,19 +170,19 @@ public class RecipeService {
rs.setRecipes(recipe); rs.setRecipes(recipe);
rs.setStuff(newStuff); rs.setStuff(newStuff);
rs.setAmount(stuffDTO.getAmount()); rs.setAmount(stuffDTO.getAmount());
RecipeStuffsRepository.save(rs); recipeStuffsRepository.save(rs);
incomingStuffIds.add(newStuff.getStuffId()); incomingStuffIds.add(newStuff.getStuffId());
} else { } else {
// 材料IDが提供されている場合、既存のRecipeStuffsエントリを検索 // 材料IDが提供されている場合、既存のRecipeStuffsエントリを検索
Optional<RecipeStuffs> optionalRs = RecipeStuffsRepository Optional<RecipeStuffs> optionalRs = recipeStuffsRepository
.findByRecipesRecipeIdAndStuffStuffId(dto.getRecipeId(), stuffDTO.getStuffId()); .findByRecipesRecipeIdAndStuffStuffId(dto.getRecipeId(), stuffDTO.getStuffId());
if (optionalRs.isPresent()) { if (optionalRs.isPresent()) {
// RecipeStuffsエントリが存在する場合、数量を更新 // RecipeStuffsエントリが存在する場合、数量を更新
RecipeStuffs rs = optionalRs.get(); RecipeStuffs rs = optionalRs.get();
rs.setAmount(stuffDTO.getAmount()); rs.setAmount(stuffDTO.getAmount());
RecipeStuffsRepository.save(rs); recipeStuffsRepository.save(rs);
incomingStuffIds.add(rs.getStuff().getStuffId()); incomingStuffIds.add(rs.getStuff().getStuffId());
} else { } else {
// オプション:見つからない場合、新しいRecipeStuffsエントリを作成 // オプション:見つからない場合、新しいRecipeStuffsエントリを作成
@ -193,17 +193,17 @@ public class RecipeService {
rs.setRecipes(recipe); rs.setRecipes(recipe);
rs.setStuff(existingStuff); rs.setStuff(existingStuff);
rs.setAmount(stuffDTO.getAmount()); rs.setAmount(stuffDTO.getAmount());
RecipeStuffsRepository.save(rs); recipeStuffsRepository.save(rs);
incomingStuffIds.add(existingStuff.getStuffId()); incomingStuffIds.add(existingStuff.getStuffId());
} }
} }
} }
// 入ってきたリストにないRecipeStuffsエントリを削除 // 入ってきたリストにないRecipeStuffsエントリを削除
List<RecipeStuffs> existingStuffs = RecipeStuffsRepository.findByRecipesRecipeId(dto.getRecipeId()); List<RecipeStuffs> existingStuffs = recipeStuffsRepository.findByRecipesRecipeId(dto.getRecipeId());
for (RecipeStuffs rs : existingStuffs) { for (RecipeStuffs rs : existingStuffs) {
if (!incomingStuffIds.contains(rs.getStuff().getStuffId())) { if (!incomingStuffIds.contains(rs.getStuff().getStuffId())) {
RecipeStuffsRepository.delete(rs); recipeStuffsRepository.delete(rs);
} }
} }

Loading…
Cancel
Save