1. stock: update, deleteを修正

2. tobuyコメントを修正
feature-backend-tobuy-stock-zhang
zhang.pengcheng 5 months ago
parent d7c2eadb09
commit 5f078bb6c5
  1. 63
      backend/src/main/java/com/example/todoapp/controller/StocksController.java
  2. 13
      backend/src/main/java/com/example/todoapp/controller/ToBuysController.java
  3. 8
      backend/src/main/java/com/example/todoapp/dto/DeleteStockRequest.java
  4. 13
      backend/src/main/java/com/example/todoapp/model/Stocks.java
  5. 7
      backend/src/main/java/com/example/todoapp/repository/StocksRepository.java
  6. 24
      backend/src/main/java/com/example/todoapp/service/StocksService.java

@ -1,15 +1,21 @@
package com.example.todoapp.controller; package com.example.todoapp.controller;
import com.example.todoapp.dto.DeleteStockRequest;
import com.example.todoapp.dto.StockDTO; import com.example.todoapp.dto.StockDTO;
import com.example.todoapp.model.Stocks; 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 com.example.todoapp.service.StocksService;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.core.Authentication; import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -26,6 +32,9 @@ public class StocksController {
@Autowired @Autowired
private StocksService stockService; private StocksService stockService;
@Autowired
private UserRepository userRepository;
/** /**
* ログインユーザーのすべての在庫を取得する * ログインユーザーのすべての在庫を取得する
* *
@ -64,7 +73,7 @@ public class StocksController {
* @param stock 作成する在庫の情報 * @param stock 作成する在庫の情報
* @return 作成された在庫 * @return 作成された在庫
*/ */
@PostMapping @PostMapping("/add")
public ResponseEntity<StockDTO> createStock( public ResponseEntity<StockDTO> createStock(
Authentication authentication, Authentication authentication,
@Valid @RequestBody Stocks stock) { @Valid @RequestBody Stocks stock) {
@ -80,13 +89,25 @@ public class StocksController {
* @param stockDetails 更新内容 * @param stockDetails 更新内容
* @return 更新された在庫 * @return 更新された在庫
*/ */
@PutMapping("/{id}") @PutMapping("/update")
public ResponseEntity<StockDTO> updateStock( public ResponseEntity<Map<String, Object>> updateStock(
Authentication authentication, Authentication authentication,
@PathVariable("id") Long stockId, @Valid @RequestBody StockDTO stockDTO) {
@Valid @RequestBody Stocks stockDetails) {
Stocks updatedStock = stockService.updateStocks(authentication.getName(), stockId, stockDetails); Stocks updatedStock = stockService.updateStocks(authentication.getName(), stockDTO);
return ResponseEntity.ok(StockDTO.fromEntity(updatedStock));
Map<String, Object> 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 * @param taskId 削除する在庫のID
* @return 空のレスポンス * @return 空のレスポンス
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/delete")
public ResponseEntity<?> deleteStock( public ResponseEntity<?> deleteStock(
Authentication authentication, Authentication authentication,
@PathVariable("id") Long stockId) { @RequestBody DeleteStockRequest request
stockService.deleteStock(authentication.getName(), stockId); ) {
return ResponseEntity.ok().build();
// 認証されたユーザー名を取得
String username = authentication.getName();
// ユーザー情報を取得
User user = userRepository.findByUsername(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
int deletedCount = stockService.deleteStockById(user.getId(), request.getStockId());
Map<String, Object> 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);
} }
} }

@ -14,7 +14,6 @@ import com.example.todoapp.model.Stuffs;
import com.example.todoapp.model.ToBuys; import com.example.todoapp.model.ToBuys;
import com.example.todoapp.model.User; import com.example.todoapp.model.User;
import com.example.todoapp.repository.UserRepository; import com.example.todoapp.repository.UserRepository;
import com.example.todoapp.repository.StuffsRepository;
import com.example.todoapp.service.ToBuysService; import com.example.todoapp.service.ToBuysService;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@ -46,9 +45,6 @@ public class ToBuysController {
@Autowired @Autowired
private UserRepository userRepository; private UserRepository userRepository;
@Autowired
private StuffsRepository stuffsRepository;
/** /**
* 新しい購入アイテムを追加する * 新しい購入アイテムを追加する
* *
@ -63,7 +59,6 @@ public class ToBuysController {
ToBuys createdToBuy = toBuysService.addToBuys(dto, authentication); ToBuys createdToBuy = toBuysService.addToBuys(dto, authentication);
// 构建响应体
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
response.put("result", true); response.put("result", true);
response.put("tobuyId", createdToBuy.getTobuyId()); response.put("tobuyId", createdToBuy.getTobuyId());
@ -73,6 +68,13 @@ public class ToBuysController {
return ResponseEntity.ok(response); return ResponseEntity.ok(response);
} }
/**
* 指定されたIDの在庫を更新する
*
* @param authentication 認証情報
* @param dto 更新内容
* @return 更新された
*/
@PutMapping("/update") @PutMapping("/update")
public ResponseEntity<Map<String, Object>> updateToBuys( public ResponseEntity<Map<String, Object>> updateToBuys(
@Valid @RequestBody ToBuysDTO dto, @Valid @RequestBody ToBuysDTO dto,
@ -81,7 +83,6 @@ public class ToBuysController {
ToBuys updatedToBuy = toBuysService.updateToBuys(dto, authentication); ToBuys updatedToBuy = toBuysService.updateToBuys(dto, authentication);
Map<String, Object> response = new HashMap<>(); Map<String, Object> response = new HashMap<>();
response.put("tobuyId", updatedToBuy.getTobuyId()); response.put("tobuyId", updatedToBuy.getTobuyId());
response.put("stuffId", updatedToBuy.getStuff().getStuffId()); response.put("stuffId", updatedToBuy.getStuff().getStuffId());

@ -0,0 +1,8 @@
package com.example.todoapp.dto;
import lombok.Data;
@Data
public class DeleteStockRequest {
private Long stockId;
}

@ -54,19 +54,6 @@ public class Stocks {
) )
private Stuffs stuff; private Stuffs stuff;
// /**
// * ユーザーテーブル参照用の外部キー
// */
// @NotNull
// @ManyToOne(fetch = FetchType.LAZY)
// @JoinColumn(
// name = "userId",
// referencedColumnName = "id",
// nullable = false
// )
// private User user;
/** /**
* タスクの所有者ユーザー * タスクの所有者ユーザー
* 多対一の関係で遅延ロードを使用 * 多対一の関係で遅延ロードを使用

@ -58,5 +58,10 @@ public interface StocksRepository extends JpaRepository<Stocks, Long> {
* @param stockId 削除する在庫 * @param stockId 削除する在庫
* @param userId 削除するユーザー * @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);
} }

@ -1,5 +1,6 @@
package com.example.todoapp.service; package com.example.todoapp.service;
import com.example.todoapp.dto.StockDTO;
import com.example.todoapp.model.Stocks; import com.example.todoapp.model.Stocks;
import com.example.todoapp.util.MessageUtils; import com.example.todoapp.util.MessageUtils;
import com.example.todoapp.model.User; import com.example.todoapp.model.User;
@ -75,25 +76,24 @@ public class StocksService {
* @param stockDetails 編集内容(新しい情報) * @param stockDetails 編集内容(新しい情報)
* @return 編集された在庫エンティティ * @return 編集された在庫エンティティ
*/ */
public Stocks updateStocks(String username, Long stockId, Stocks stockDetails) { public Stocks updateStocks(String username, StockDTO stockDto) {
Stocks stock = getStockById(username, stockId); Stocks stock = getStockById(username, stockDto.getStockId());
stock.setAmount(stockDetails.getAmount()); stock.setAmount(stockDto.getAmount());
stock.setPrice(stockDetails.getPrice()); stock.setPrice(stockDto.getPrice());
stock.setLastUpdate(stockDetails.getLastUpdate()); stock.setLastUpdate(stockDto.getLastUpdate());
stock.setBuyDate(stockDetails.getBuyDate()); stock.setBuyDate(stockDto.getBuyDate());
stock.setExpDate(stockDetails.getExpDate()); stock.setExpDate(stockDto.getExpDate());
return stocksRepository.save(stock); return stocksRepository.save(stock);
} }
/** /**
* 指定された在庫を削除する * 指定された在庫を削除する
* *
* @param username ユーザー名 * @param userId ユーザー名
* @param taskId 削除する在庫のID * @param stockId 削除する在庫のID
*/ */
public void deleteStock(String username, Long stockId) { public int deleteStockById(Long userId, Long stockId) {
Stocks stock = getStockById(username, stockId); return stocksRepository.deleteByUserIdAndStockId(userId, stockId);
stocksRepository.delete(stock);
} }

Loading…
Cancel
Save