Merge remote-tracking branch 'origin/feature-backend-stock-fix' into feature-frontend-stock

feature-backend-add-springdocs
Yuna.Suzuki 5 months ago
commit e54b75f2c3
  1. 36
      backend/src/main/java/com/example/todoapp/controller/StocksController.java
  2. 15
      backend/src/main/java/com/example/todoapp/dto/DeleteStockRequest.java
  3. 2
      backend/src/main/java/com/example/todoapp/repository/StuffsRepository.java
  4. 4
      backend/src/main/java/com/example/todoapp/service/StocksService.java
  5. 2
      backend/src/main/java/com/example/todoapp/service/StuffsService.java
  6. 6
      frontend/src/services/api.ts

@ -1,16 +1,22 @@
package com.example.todoapp.controller; package com.example.todoapp.controller;
import com.example.todoapp.dto.DeleteStockRequest;
import com.example.todoapp.dto.ResponseStockDTO; import com.example.todoapp.dto.ResponseStockDTO;
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.service.StocksService; import com.example.todoapp.service.StocksService;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.Data;
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.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import lombok.Data;
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;
/** /**
@ -81,27 +87,33 @@ 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 Stocks stockDetails) { @Valid @RequestBody Stocks stockDetails) {
Stocks updatedStock = stockService.updateStocks(authentication.getName(), stockId, stockDetails);
return ResponseEntity.ok(StockDTO.fromEntity(updatedStock)); stockService.updateStocks(authentication.getName(), stockDetails);
Map<String, Object> response = new HashMap<>();
response.put("result", true);
return ResponseEntity.ok(response);
} }
/** /**
* 指定されたIDの在庫を削除する * 指定されたIDの在庫を削除する
* *
* @param authentication 認証情報 * @param authentication 認証情報
* @param taskId 削除する在庫のID * @param stockInfo 削除する在庫情報stockIdをキーに持つ
* @return 空のレスポンス * @return レスポンス
*/ */
@DeleteMapping("/{id}") @DeleteMapping("/delete")
public ResponseEntity<?> deleteStock( public ResponseEntity<Map<String, Object>> deleteStock(
Authentication authentication, Authentication authentication,
@PathVariable("id") Long stockId) { @Valid @RequestBody DeleteStockRequest request) {
stockService.deleteStock(authentication.getName(), stockId); stockService.deleteStock(authentication.getName(), request.getStockId());
return ResponseEntity.ok().build();
Map<String, Object> response = new HashMap<>();
response.put("result", true);
return ResponseEntity.ok(response);
} }
} }

@ -0,0 +1,15 @@
package com.example.todoapp.dto;
import lombok.Data;
/**
* 在庫削除のリクエストオブジェクトDTO
* <p>
* このクラスはクライアントとサーバー間で在庫情報をやり取りするために使用されます
* エンティティとは異なり必要な情報のみを含み関連エンティティへの参照ではなくIDのみを保持します
* </p>
*/
@Data
public class DeleteStockRequest {
private Long stockId;
}

@ -39,6 +39,6 @@ public interface StuffsRepository extends JpaRepository<Stuffs, Long> {
* @param category カテゴリ名 * @param category カテゴリ名
* @return 指定されたカテゴリに属する材料のリスト * @return 指定されたカテゴリに属する材料のリスト
*/ */
List<Stuffs> findByCategory(String category); List<Stuffs> findByCategoryOrderByStuffNameAsc(String category);
} }

@ -75,8 +75,8 @@ public class StocksService {
* @param stockDetails 編集内容(新しい情報) * @param stockDetails 編集内容(新しい情報)
* @return 編集された在庫エンティティ * @return 編集された在庫エンティティ
*/ */
public Stocks updateStocks(String username, Long stockId, Stocks stockDetails) { public Stocks updateStocks(String username, Stocks stockDetails) {
Stocks stock = getStockById(username, stockId); Stocks stock = getStockById(username, stockDetails.getStockId());
stock.setAmount(stockDetails.getAmount()); stock.setAmount(stockDetails.getAmount());
stock.setPrice(stockDetails.getPrice()); stock.setPrice(stockDetails.getPrice());
stock.setLastUpdate(stockDetails.getLastUpdate()); stock.setLastUpdate(stockDetails.getLastUpdate());

@ -34,6 +34,6 @@ public class StuffsService {
* @return 指定されたカテゴリに属する材料のリスト * @return 指定されたカテゴリに属する材料のリスト
*/ */
public List<Stuffs> getAllStuffsByCategory(String category) { public List<Stuffs> getAllStuffsByCategory(String category) {
return stuffsRepository.findByCategory(category); return stuffsRepository.findByCategoryOrderByStuffNameAsc(category);
} }
} }

@ -280,13 +280,15 @@ export const stockApi = {
}); });
console.log("API レスポンスステータス:", response.status); console.log("API レスポンスステータス:", response.status);
console.log("API レスポンス本文:", await response.text()); // console.log("API レスポンス本文:", await response.text());
if (!response.ok) { if (!response.ok) {
throw new Error(STOCK_ERRORS.DELETE_FAILED); throw new Error(STOCK_ERRORS.DELETE_FAILED);
} }
return response.json() const response_json = response.json()
console.log('Delete response:', response_json)
return response_json
// return { // return {
// "result": true // "result": true

Loading…
Cancel
Save