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. 15
      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;
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<StockDTO> createStock(
Authentication authentication,
@Valid @RequestBody Stocks stock) {
@ -80,13 +89,25 @@ public class StocksController {
* @param stockDetails 更新内容
* @return 更新された在庫
*/
@PutMapping("/{id}")
public ResponseEntity<StockDTO> updateStock(
@PutMapping("/update")
public ResponseEntity<Map<String, Object>> 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<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
* @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<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.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<String, Object> 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<Map<String, Object>> updateToBuys(
@Valid @RequestBody ToBuysDTO dto,
@ -81,7 +83,6 @@ public class ToBuysController {
ToBuys updatedToBuy = toBuysService.updateToBuys(dto, authentication);
Map<String, Object> response = new HashMap<>();
response.put("tobuyId", updatedToBuy.getTobuyId());
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,20 +54,7 @@ public class Stocks {
)
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 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;
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);
}

Loading…
Cancel
Save