diff --git a/backend/src/main/java/com/example/todoapp/controller/StocksController.java b/backend/src/main/java/com/example/todoapp/controller/StocksController.java index cdced2e..78219de 100644 --- a/backend/src/main/java/com/example/todoapp/controller/StocksController.java +++ b/backend/src/main/java/com/example/todoapp/controller/StocksController.java @@ -1,5 +1,6 @@ package com.example.todoapp.controller; +import com.example.todoapp.dto.AddStocksDTO; import com.example.todoapp.dto.DeleteStockRequest; import com.example.todoapp.dto.ResponseStockDTO; import com.example.todoapp.dto.StockDTO; @@ -75,7 +76,7 @@ public class StocksController { @PostMapping("/add") public ResponseEntity createStock( Authentication authentication, - @Valid @RequestBody Stocks stock) { + @Valid @RequestBody AddStocksDTO stock) { Stocks createdStock = stockService.createStock(authentication.getName(), stock); return ResponseEntity.ok(StockDTO.fromEntity(createdStock)); } diff --git a/backend/src/main/java/com/example/todoapp/dto/AddStocksDTO.java b/backend/src/main/java/com/example/todoapp/dto/AddStocksDTO.java new file mode 100644 index 0000000..84dc6dc --- /dev/null +++ b/backend/src/main/java/com/example/todoapp/dto/AddStocksDTO.java @@ -0,0 +1,57 @@ +//-------------------------------- +// AddStocksDTO.java +// +// +// 更新履歴:2025/06/12 新規作成 +// Copyright(c) 2025 IVIS All rights reserved. +//-------------------------------------------- +package com.example.todoapp.dto; + +import com.example.todoapp.model.Stocks; +import lombok.Data; +import java.time.LocalDate; + +/** + * 在庫のデータ転送オブジェクト(DTO) + *

+ * このクラスはクライアントとサーバー間で在庫情報をやり取りするために使用されます。 + * エンティティとは異なり、必要な情報のみを含み、関連エンティティへの参照ではなくIDのみを保持します。 + *

+ */ + +@Data +public class AddStocksDTO { + private Long stockId; + private Long stuffId; + private Long userId; + private String stuffName; + private String category; + private String summary; + private int amount; + private int price; + private LocalDate buyDate; + private LocalDate lastUpdate; + private LocalDate expDate; + + /** + * 在庫エンティティからDTOを作成する + * + * @param stock 変換元の在庫エンティティ + * @return 変換されたAddStocksDTOオブジェクト + */ + public static AddStocksDTO fromEntity(Stocks stock) { + AddStocksDTO dto = new AddStocksDTO(); + dto.setStockId(stock.getStockId()); + dto.setStuffId(stock.getStuff().getStuffId()); + dto.setUserId(stock.getUser().getId()); + dto.setStuffName(stock.getStuff().getStuffName()); + dto.setCategory(stock.getStuff().getCategory()); + dto.setSummary(stock.getStuff().getSummary()); + dto.setAmount(stock.getAmount()); + dto.setPrice(stock.getPrice()); + dto.setBuyDate(stock.getBuyDate()); + dto.setLastUpdate(stock.getLastUpdate()); + dto.setExpDate(stock.getExpDate()); + return dto; + } +} \ No newline at end of file diff --git a/backend/src/main/java/com/example/todoapp/service/StocksService.java b/backend/src/main/java/com/example/todoapp/service/StocksService.java index 20a3386..adc00b0 100644 --- a/backend/src/main/java/com/example/todoapp/service/StocksService.java +++ b/backend/src/main/java/com/example/todoapp/service/StocksService.java @@ -1,16 +1,21 @@ package com.example.todoapp.service; +import com.example.todoapp.dto.StockDTO; +import com.example.todoapp.dto.AddStocksDTO; import com.example.todoapp.dto.UpdateStockRequest; import com.example.todoapp.model.Stocks; +import com.example.todoapp.model.Stuffs; import com.example.todoapp.util.MessageUtils; import com.example.todoapp.model.User; import com.example.todoapp.repository.StocksRepository; +import com.example.todoapp.repository.StuffsRepository; import com.example.todoapp.repository.UserRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.stereotype.Service; import java.util.List; +import java.util.Optional; /** * Stocksテーブルのサービスクラス @@ -23,6 +28,9 @@ public class StocksService { @Autowired private StocksRepository stocksRepository; + @Autowired + private StuffsRepository stuffsRepository; + @Autowired private UserRepository userRepository; @@ -36,10 +44,35 @@ public class StocksService { * @param stock 追加する在庫情報 * @return 保存された在庫エンティティ */ - public Stocks createStock(String username, Stocks stock) { + public Stocks createStock(String username, AddStocksDTO stock) { User user = getUserByUsername(username); - stock.setUser(user); - return stocksRepository.save(stock); + Stocks stockEntity = new Stocks(); + Stuffs stuffs; + if (stock.getStuffId() == null) { + // 新しい材料を作成 + Stuffs newStuff = new Stuffs(); + newStuff.setStuffName(stock.getStuffName()); + newStuff.setSummary(stock.getSummary()); + newStuff.setCategory(stock.getCategory()); + stuffs = stuffsRepository.save(newStuff); + } else { + // 材料情報を取得 + Optional existstuffs = stuffsRepository.findById(stock.getStuffId()); + if (existstuffs == null) { + throw new RuntimeException("材料がありません"); + } + stuffs = existstuffs.get(); + } + + stockEntity.setStockId(stock.getStockId()); + stockEntity.setStuff(stuffs); + stockEntity.setUser(user); + stockEntity.setAmount(stock.getAmount()); + stockEntity.setPrice(stock.getPrice()); + stockEntity.setBuyDate(stock.getBuyDate()); + // stockEntity.setLastUpdate(stock.getLastUpdate()); + stockEntity.setExpDate(stock.getExpDate()); + return stocksRepository.save(stockEntity); }