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 8bdf482..4ce265b 100644 --- a/backend/src/main/java/com/example/todoapp/controller/StocksController.java +++ b/backend/src/main/java/com/example/todoapp/controller/StocksController.java @@ -1,15 +1,21 @@ package com.example.todoapp.controller; +import com.example.todoapp.dto.DeleteStockRequest; import com.example.todoapp.dto.StockDTO; import com.example.todoapp.model.Stocks; +import com.example.todoapp.model.User; +import com.example.todoapp.repository.UserRepository; import com.example.todoapp.service.StocksService; import jakarta.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.security.core.Authentication; +import org.springframework.security.core.userdetails.UsernameNotFoundException; import org.springframework.web.bind.annotation.*; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -26,6 +32,9 @@ public class StocksController { @Autowired private StocksService stockService; + @Autowired + private UserRepository userRepository; + /** * ログインユーザーのすべての在庫を取得する * @@ -64,7 +73,7 @@ public class StocksController { * @param stock 作成する在庫の情報 * @return 作成された在庫 */ - @PostMapping + @PostMapping("/add") public ResponseEntity createStock( Authentication authentication, @Valid @RequestBody Stocks stock) { @@ -80,13 +89,25 @@ public class StocksController { * @param stockDetails 更新内容 * @return 更新された在庫 */ - @PutMapping("/{id}") - public ResponseEntity updateStock( + @PutMapping("/update") + public ResponseEntity> updateStock( Authentication authentication, - @PathVariable("id") Long stockId, - @Valid @RequestBody Stocks stockDetails) { - Stocks updatedStock = stockService.updateStocks(authentication.getName(), stockId, stockDetails); - return ResponseEntity.ok(StockDTO.fromEntity(updatedStock)); + @Valid @RequestBody StockDTO stockDTO) { + + Stocks updatedStock = stockService.updateStocks(authentication.getName(), stockDTO); + + Map response = new HashMap<>(); + + if (updatedStock == null) { + response.put("result", false); + response.put("message", "指定されたIDの在庫が見つかりませんでした"); + return ResponseEntity.ok(response); + }else { + response.put("result", true); + response.put("message", "变更成功しました"); + } + + return ResponseEntity.ok(response); } /** @@ -96,11 +117,31 @@ public class StocksController { * @param taskId 削除する在庫のID * @return 空のレスポンス */ - @DeleteMapping("/{id}") + @DeleteMapping("/delete") public ResponseEntity deleteStock( Authentication authentication, - @PathVariable("id") Long stockId) { - stockService.deleteStock(authentication.getName(), stockId); - return ResponseEntity.ok().build(); + @RequestBody DeleteStockRequest request + ) { + + // 認証されたユーザー名を取得 + String username = authentication.getName(); + + // ユーザー情報を取得 + User user = userRepository.findByUsername(username) + .orElseThrow(() -> new UsernameNotFoundException("User not found")); + + int deletedCount = stockService.deleteStockById(user.getId(), request.getStockId()); + + Map response = new HashMap<>(); + + if (deletedCount > 0) { + response.put("result", true); + response.put("message", "削除成功しました"); + } else { + response.put("result", false); + response.put("message", "指定された在庫が見つかりませんでした"); + } + + return ResponseEntity.ok(response); } } \ No newline at end of file diff --git a/backend/src/main/java/com/example/todoapp/controller/ToBuysController.java b/backend/src/main/java/com/example/todoapp/controller/ToBuysController.java index 03c7e30..e37c75d 100644 --- a/backend/src/main/java/com/example/todoapp/controller/ToBuysController.java +++ b/backend/src/main/java/com/example/todoapp/controller/ToBuysController.java @@ -14,7 +14,6 @@ import com.example.todoapp.model.Stuffs; import com.example.todoapp.model.ToBuys; import com.example.todoapp.model.User; import com.example.todoapp.repository.UserRepository; -import com.example.todoapp.repository.StuffsRepository; import com.example.todoapp.service.ToBuysService; import jakarta.validation.Valid; @@ -46,9 +45,6 @@ public class ToBuysController { @Autowired private UserRepository userRepository; - @Autowired - private StuffsRepository stuffsRepository; - /** * 新しい購入アイテムを追加する * @@ -63,7 +59,6 @@ public class ToBuysController { ToBuys createdToBuy = toBuysService.addToBuys(dto, authentication); - // 构建响应体 Map response = new HashMap<>(); response.put("result", true); response.put("tobuyId", createdToBuy.getTobuyId()); @@ -73,6 +68,13 @@ public class ToBuysController { return ResponseEntity.ok(response); } + /** + * 指定されたIDの在庫を更新する + * + * @param authentication 認証情報 + * @param dto 更新内容 + * @return 更新された + */ @PutMapping("/update") public ResponseEntity> updateToBuys( @Valid @RequestBody ToBuysDTO dto, @@ -81,7 +83,6 @@ public class ToBuysController { ToBuys updatedToBuy = toBuysService.updateToBuys(dto, authentication); - Map response = new HashMap<>(); response.put("tobuyId", updatedToBuy.getTobuyId()); response.put("stuffId", updatedToBuy.getStuff().getStuffId()); diff --git a/backend/src/main/java/com/example/todoapp/dto/DeleteStockRequest.java b/backend/src/main/java/com/example/todoapp/dto/DeleteStockRequest.java new file mode 100644 index 0000000..7eee296 --- /dev/null +++ b/backend/src/main/java/com/example/todoapp/dto/DeleteStockRequest.java @@ -0,0 +1,8 @@ +package com.example.todoapp.dto; + +import lombok.Data; + +@Data +public class DeleteStockRequest { + private Long stockId; +} \ No newline at end of file diff --git a/backend/src/main/java/com/example/todoapp/model/Stocks.java b/backend/src/main/java/com/example/todoapp/model/Stocks.java index 1b8ede7..c9c47b2 100644 --- a/backend/src/main/java/com/example/todoapp/model/Stocks.java +++ b/backend/src/main/java/com/example/todoapp/model/Stocks.java @@ -54,20 +54,7 @@ public class Stocks { ) private Stuffs stuff; - - // /** - // * ユーザーテーブル参照用の外部キー - // */ - // @NotNull - // @ManyToOne(fetch = FetchType.LAZY) - // @JoinColumn( - // name = "userId", - // referencedColumnName = "id", - // nullable = false - // ) - // private User user; - - /** + /** * タスクの所有者(ユーザー) * 多対一の関係で、遅延ロードを使用 */ diff --git a/backend/src/main/java/com/example/todoapp/repository/StocksRepository.java b/backend/src/main/java/com/example/todoapp/repository/StocksRepository.java index b121415..9d275e1 100644 --- a/backend/src/main/java/com/example/todoapp/repository/StocksRepository.java +++ b/backend/src/main/java/com/example/todoapp/repository/StocksRepository.java @@ -58,5 +58,10 @@ public interface StocksRepository extends JpaRepository { * @param stockId 削除する在庫 * @param userId 削除するユーザー */ - void deleteStocksByStockIdAndUserId(Long stockId, Long userId); + // void deleteStocksByStockIdAndUserId(Long stockId, Long userId); + + @Modifying + @Transactional + @Query("DELETE FROM Stocks t WHERE t.user.id = :userId AND t.stockId = :stockId") + int deleteByUserIdAndStockId(@Param("userId") Long userId, @Param("stockId") Long stockId); } \ 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 07dad3c..7f33b6c 100644 --- a/backend/src/main/java/com/example/todoapp/service/StocksService.java +++ b/backend/src/main/java/com/example/todoapp/service/StocksService.java @@ -1,5 +1,6 @@ package com.example.todoapp.service; +import com.example.todoapp.dto.StockDTO; import com.example.todoapp.model.Stocks; import com.example.todoapp.util.MessageUtils; import com.example.todoapp.model.User; @@ -75,25 +76,24 @@ public class StocksService { * @param stockDetails 編集内容(新しい情報) * @return 編集された在庫エンティティ */ - public Stocks updateStocks(String username, Long stockId, Stocks stockDetails) { - Stocks stock = getStockById(username, stockId); - stock.setAmount(stockDetails.getAmount()); - stock.setPrice(stockDetails.getPrice()); - stock.setLastUpdate(stockDetails.getLastUpdate()); - stock.setBuyDate(stockDetails.getBuyDate()); - stock.setExpDate(stockDetails.getExpDate()); + public Stocks updateStocks(String username, StockDTO stockDto) { + Stocks stock = getStockById(username, stockDto.getStockId()); + stock.setAmount(stockDto.getAmount()); + stock.setPrice(stockDto.getPrice()); + stock.setLastUpdate(stockDto.getLastUpdate()); + stock.setBuyDate(stockDto.getBuyDate()); + stock.setExpDate(stockDto.getExpDate()); return stocksRepository.save(stock); } /** * 指定された在庫を削除する * - * @param username ユーザー名 - * @param taskId 削除する在庫のID + * @param userId ユーザー名 + * @param stockId 削除する在庫のID */ - public void deleteStock(String username, Long stockId) { - Stocks stock = getStockById(username, stockId); - stocksRepository.delete(stock); + public int deleteStockById(Long userId, Long stockId) { + return stocksRepository.deleteByUserIdAndStockId(userId, stockId); }