diff --git a/hackathon/src/main/java/nerdinary/hackathon/domain/food/controller/FoodController.java b/hackathon/src/main/java/nerdinary/hackathon/domain/food/controller/FoodController.java index 2120425..212c410 100644 --- a/hackathon/src/main/java/nerdinary/hackathon/domain/food/controller/FoodController.java +++ b/hackathon/src/main/java/nerdinary/hackathon/domain/food/controller/FoodController.java @@ -104,11 +104,13 @@ public ResponseEntity searchFood( @Operation(summary = "음식 소비(사용)") @PutMapping("/consume") public ResponseEntity consumeFood( - @Parameter(name = "foodRegisterId", required = true, in = ParameterIn.QUERY) - @RequestParam Long foodRegisterId + @Parameter(hidden = true) @JwtValidation Long userId, + @Parameter(name = "foodRegisterId", required = true, in = ParameterIn.QUERY) + @RequestParam Long foodRegisterId ) { - foodService.consumeFood(foodRegisterId); + foodService.consumeFood(userId, foodRegisterId); return ResponseEntity.ok().build(); } + } \ No newline at end of file diff --git a/hackathon/src/main/java/nerdinary/hackathon/domain/food/dto/AllFoodListResponse.java b/hackathon/src/main/java/nerdinary/hackathon/domain/food/dto/AllFoodListResponse.java index 0547154..510d81b 100644 --- a/hackathon/src/main/java/nerdinary/hackathon/domain/food/dto/AllFoodListResponse.java +++ b/hackathon/src/main/java/nerdinary/hackathon/domain/food/dto/AllFoodListResponse.java @@ -8,6 +8,7 @@ @Getter @AllArgsConstructor public class AllFoodListResponse { + private long foodRegisterId; private String foodName; private String foodCategory; private LocalDate expirationDate; diff --git a/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodService.java b/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodService.java index 10d98b2..39bef87 100644 --- a/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodService.java +++ b/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodService.java @@ -13,7 +13,7 @@ public interface FoodService { //List getAllFoodsWithDday(Long userId); 필터링 기능 추가해서 getFilteredFoods로 대체 FoodSearchResponse searchFood(Long userId, String query); - void consumeFood(Long foodRegisterId); + void consumeFood(Long userId, Long foodRegisterId); List getFilteredFoods(Long userId, String storageMethod, boolean isExpiringSoon); } diff --git a/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodServiceImpl.java b/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodServiceImpl.java index db2a47f..de4f60d 100644 --- a/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodServiceImpl.java +++ b/hackathon/src/main/java/nerdinary/hackathon/domain/food/service/FoodServiceImpl.java @@ -96,16 +96,21 @@ public FoodSearchResponse searchFood(Long userId, String query){ @Transactional @Override - public void consumeFood(Long foodRegisterId) { + public void consumeFood(Long userId, Long foodRegisterId) { FoodRegister foodRegister = foodRegisterRepository.findById(foodRegisterId) .orElseThrow(() -> new CustomException(ErrorCode.FOOD_REGISTER_NOT_FOUND)); - foodRegister.consume(); //상태 변경 - //유저 사용 개수 증가 + if (!foodRegister.getUser().getId().equals(userId)) { + throw new CustomException(ErrorCode.FORBIDDEN); // 403 권한 없음 + } + + foodRegister.consume(); + User user = foodRegister.getUser(); user.plusUsedCount(); } + @Transactional public List getAllFoodsWithDday(Long userId) { // User 객체 조회 @@ -118,13 +123,14 @@ public List getAllFoodsWithDday(Long userId) { // 응답 DTO 변환 return foodList.stream() .map(foodRegister -> { + long id = foodRegister.getFoodRegisterId(); String name = foodRegister.getFood().getFoodName(); String category = foodRegister.getFood().getFoodCategory(); LocalDate expiration = foodRegister.getExpirationDate(); long daysLeft = expiration != null ? ChronoUnit.DAYS.between(LocalDate.now(), expiration) : -1; - return new AllFoodListResponse(name, category, expiration, daysLeft); + return new AllFoodListResponse(id, name, category, expiration, daysLeft); }) .toList(); } @@ -151,13 +157,14 @@ public List getFilteredFoods(Long userId, String storageMet // 응답 변환 .map(fr -> { + long id = fr.getFoodRegisterId(); String name = fr.getFood().getFoodName(); String category = fr.getFood().getFoodCategory(); LocalDate expiration = fr.getExpirationDate(); long daysLeft = expiration != null ? ChronoUnit.DAYS.between(LocalDate.now(), expiration) : -1; - return new AllFoodListResponse(name, category, expiration, daysLeft); + return new AllFoodListResponse(id, name, category, expiration, daysLeft); }) .toList(); }