From 36574a9a27f2b0a32a1f05ed0874baf0ca1fc209 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Fri, 9 Aug 2024 20:45:42 +0900
Subject: [PATCH 01/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EC=82=AD=EC=A0=9C=20API=20=ED=95=84=EC=9A=94?=
 =?UTF-8?q?=EC=97=86=EB=8A=94=20=EA=B3=BC=EC=A0=95=20=EC=82=AD=EC=A0=9C=20?=
 =?UTF-8?q?=EB=B0=8F=20=EB=B0=98=ED=99=98=EA=B0=92=20=EC=82=AD=EC=A0=9C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   | 16 +++++-------
 .../fridge/entity/Fridge.java                 |  4 ---
 .../repository/FridgeUserRepository.java      |  2 ++
 .../fridge/service/FridgeService.java         |  2 +-
 .../fridge/service/FridgeServiceImpl.java     | 26 +++++++------------
 5 files changed, 19 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 38838ff..6cd4064 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -49,7 +49,7 @@ public ResponseCustom<Long> addFridge(@Valid @RequestBody AddFridgeReq addFridge
         return ResponseCustom.success(fridgeService.addFridge(addFridgeReq, userId));
     }
 
-    @Operation(summary = "냉장고 정보 수정", description = "냉장고 정보를 수정한다.")
+    @Operation(summary = "냉장고 정보 수정", description = "주인이 냉장고 정보를 수정한다.")
     @SwaggerApiSuccess(implementation = ResponseCustom.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "400", description = "(G0000)잘못된 파라미터입니다.",
@@ -70,24 +70,22 @@ public ResponseCustom<Void> modifyFridge(@Parameter(description = "냉장고 ID"
         return ResponseCustom.success();
     }
 
-    @Operation(summary = "냉장고 삭제", description = "냉장고를 삭제한다.")
+    @Operation(summary = "냉장고 삭제", description = "주인이 냉장고를 삭제한다.")
     @SwaggerApiSuccess(implementation = ResponseCustom.class)
     @ApiResponses(value = {
-            @ApiResponse(responseCode = "400", description = "(G0000)잘못된 파라미터입니다.",
-                    content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
             @ApiResponse(responseCode = "403", description = "(G0001)권한이 없습니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
-            @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.\t\n" +
-                    "(R0000)존재하지 않는 냉장고입니다.\t\n",
+            @ApiResponse(responseCode = "404", description = "(R0000)존재하지 않는 냉장고입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
             @ApiResponse(responseCode = "409", description = "(R0001)해당 냉장고에 사용자가 존재합니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
-    @PatchMapping("/{fridgeId}/remove")
-    public ResponseCustom<Long> removeFridge(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
+    @DeleteMapping("/{fridgeId}")
+    public ResponseCustom<Void> removeFridge(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
                                              @Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.removeFridge(fridgeId, userId));
+        fridgeService.removeFridge(fridgeId, userId);
+        return ResponseCustom.success();
     }
 
     @Operation(summary = "냉장고 사용자 삭제", description = "냉장고 사용자를 삭제한다.")
diff --git a/src/main/java/com/example/icebutler_server/fridge/entity/Fridge.java b/src/main/java/com/example/icebutler_server/fridge/entity/Fridge.java
index bf1ad3c..ba54dab 100644
--- a/src/main/java/com/example/icebutler_server/fridge/entity/Fridge.java
+++ b/src/main/java/com/example/icebutler_server/fridge/entity/Fridge.java
@@ -32,10 +32,6 @@ public void edit(String fridgeName, String fridgeComment) {
         this.fridgeComment = fridgeComment;
     }
 
-    public void remove() {
-        this.setIsEnable(false);
-    }
-
     public static Fridge toEntity(AddFridgeReq addFridgeReq) {
         return Fridge.builder()
                 .fridgeName(addFridgeReq.getFridgeName())
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index ec093bb..ce8958c 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -19,6 +19,8 @@ public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     List<FridgeUser> findByFridgeAndIsEnable(Fridge fridge, Boolean isEnable);
 
+    boolean existsByFridgeAndRoleAndIsEnable(Fridge fridge, FridgeRole role, boolean isEnable);
+
     List<FridgeUser> findByFridgeAndIsEnableOrderByRoleDesc(Fridge fridge, Boolean isEnable);
 
     List<FridgeUser> findByUserAndIsEnable(User user, Boolean status);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 6c3ddc8..8b469ed 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -10,7 +10,7 @@ public interface FridgeService {
   FridgeMainRes getFoods(Long fridgeId, Long userId, String category);
   Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
   void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
-  Long removeFridge(Long fridgeId, Long userId);
+  void removeFridge(Long fridgeId, Long userId);
   Long removeFridgeUser(Long fridgeId, Long userId) throws IOException;
   List<FridgeFoodsRes> searchFridgeFood(Long fridgeId, Long ownerId, String foodName);
   FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 415aff4..4568bc1 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -138,13 +138,11 @@ private void updateFridgeUsers(EditFridgeReq editFridgeReq, Fridge fridge) {
             this.fridgeUserRepository.deleteByFridgeAndUserIn(fridge, membersToDelete);
         }
 
-
         for (User user : membersToAdd)
             alarmService.sendJoinFridgeAlarm(user, fridge.getFridgeName());
 
         for (User user : membersToDelete)
             alarmService.sendWithdrawalAlarm(user, fridge.getFridgeName());
-
     }
 
     private void exchangeFridgeOwner(FridgeUser owner, FridgeUser newOwner) {
@@ -152,24 +150,18 @@ private void exchangeFridgeOwner(FridgeUser owner, FridgeUser newOwner) {
         newOwner.changeRoleToOwner();
     }
 
-    // 냉장고 자체 삭제
+    // 주인이 냉장고 삭제
     @Transactional
-    public Long removeFridge(Long fridgeId, Long userId) {
-        User user = userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-        FridgeUser owner = (FridgeUser) fridgeUserRepository.findByUserAndFridgeAndIsEnable(user, fridge, true).orElseThrow(() -> new BaseException(NO_PERMISSION));
-        List<FridgeUser> fridgeUsers = fridgeUserRepository.findByFridgeAndIsEnable(fridge, true);
-        List<FridgeFood> fridgeFoods = fridgeFoodRepository.findByFridgeAndIsEnableOrderByShelfLife(fridge, true);
-
-        if (owner.getRole() != FridgeRole.OWNER) throw new BaseException(NO_PERMISSION);
-        if (fridgeUsers.size() > 1) throw new BaseException(STILL_MEMBER_EXIST);
+    public void removeFridge(Long fridgeId, Long userId) {
+        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true)
+                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
+        fridgeUserRepository.findByFridgeAndUserIdAndRoleAndIsEnable(fridge, userId, FridgeRole.OWNER, true)
+                .orElseThrow(() -> new BaseException(NO_PERMISSION));
 
-        fridgeUsers.forEach(FridgeUser::remove);
-//        fridgeFoods.forEach(FridgeFood::remove);
-        fridge.remove();
-        fridgeFoodRepository.removeFridgeFoodByFridge(false, fridge);
+        if (fridgeUserRepository.existsByFridgeAndRoleAndIsEnable(fridge, FridgeRole.MEMBER, true))
+            throw new BaseException(STILL_MEMBER_EXIST);
 
-        return fridge.getId();
+        fridgeRepository.delete(fridge);
     }
 
     // 냉장고 개별

From e6be724e6ffbe3127595d6567d6f26e8ecf45387 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Fri, 9 Aug 2024 23:11:51 +0900
Subject: [PATCH 02/11] =?UTF-8?q?#334=20feat:=20FridgeFood=20expirationDat?=
 =?UTF-8?q?e=20=EC=B6=94=EA=B0=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/dto/request/FridgeFoodReq.java     |  4 +--
 .../fridge/dto/response/FridgeFoodRes.java    | 13 ++++----
 .../fridge/dto/response/FridgeFoodsRes.java   | 32 +++++++++----------
 .../fridge/dto/response/FridgeMainRes.java    |  2 +-
 .../fridge/entity/FridgeFood.java             | 25 ++++++++-------
 5 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/request/FridgeFoodReq.java b/src/main/java/com/example/icebutler_server/fridge/dto/request/FridgeFoodReq.java
index cd0f38f..a1335ac 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/request/FridgeFoodReq.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/request/FridgeFoodReq.java
@@ -18,8 +18,8 @@ public class FridgeFoodReq {
   private String foodDetailName;
   @Schema(name = "foodCategory", description = "식품 카테고리")
   private String foodCategory;
-  @Schema(name = "shelfLife", description = "식품 소비기한")
-  private String shelfLife;
+  @Schema(name = "expirationDate", description = "식품 소비기한")
+  private String expirationDate;
   @Schema(name = "ownerId", description = "식품 소유자 ID")
   private Long ownerId;
   @Schema(name = "memo", description = "식품 메모")
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
index 9910f64..8f13b49 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
@@ -1,6 +1,5 @@
 package com.example.icebutler_server.fridge.dto.response;
 
-import com.example.icebutler_server.global.util.FridgeUtils;
 import com.example.icebutler_server.fridge.entity.FridgeFood;
 import com.example.icebutler_server.global.util.AwsS3ImageUrlUtil;
 import io.swagger.v3.oas.annotations.media.Schema;
@@ -27,10 +26,10 @@ public class FridgeFoodRes {
   private String foodDetailName;
   @Schema(name = "foodCategory", description = "식품 카테고리")
   private String foodCategory;
-  @Schema(name = "shelfLife", description = "식품 소비기한")
-  private String shelfLife;
-  @Schema(name = "day", description = "식품 소비기한 디데이")
-  private int day;
+  @Schema(name = "expirationDate", description = "식품 소비기한")
+  private String expirationDate;
+  @Schema(name = "shelfLife", description = "남은 소비기간")
+  private int shelfLife;
   @Schema(name = "owner", description = "식품 소유자")
   private String owner;
   @Schema(name = "memo", description = "식품 메모")
@@ -45,8 +44,8 @@ public static FridgeFoodRes toDto(FridgeFood fridgeFood) {
             .foodName(fridgeFood.getFood().getFoodName())
             .foodDetailName(fridgeFood.getFoodDetailName())
             .foodCategory(fridgeFood.getFood().getFoodCategory().getName())
-            .shelfLife(fridgeFood.getShelfLife().format(DateTimeFormatter.ISO_DATE))
-            .day(FridgeUtils.calShelfLife(fridgeFood.getShelfLife()))
+            .expirationDate(fridgeFood.getExpirationDate().format(DateTimeFormatter.ISO_DATE))
+            .shelfLife(fridgeFood.getShelfLife())
             .owner(fridgeFood.getOwner() == null ? null : fridgeFood.getOwner().getNickname())
             .memo(fridgeFood.getMemo())
             .imgUrl(fridgeFood.getFridgeFoodImgKey() == null ? null : AwsS3ImageUrlUtil.toUrl(fridgeFood.getFridgeFoodImgKey()))
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
index 087afed..9fe8d21 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
@@ -15,21 +15,21 @@
 @NoArgsConstructor
 @Schema(name = "FridgeFoodsRes", description = "냉장고 식품 정보")
 public class FridgeFoodsRes {
-  @Schema(name = "fridgeFoodId", description = "냉장고 식품 ID")
-  private Long fridgeFoodId;
-  @Schema(name = "foodName", description = "냉장고 식품 이름")
-  private String foodName;
-  @Schema(name = "foodImgUrl", description = "냉장고 식품 이미지 URL")
-  private String foodImgUrl;
-  @Schema(name = "shelfLife", description = "식품 유효기한")
-  private int shelfLife;
+    @Schema(name = "fridgeFoodId", description = "냉장고 식품 ID")
+    private Long fridgeFoodId;
+    @Schema(name = "foodName", description = "냉장고 식품 이름")
+    private String foodName;
+    @Schema(name = "foodImgUrl", description = "냉장고 식품 이미지 URL")
+    private String foodImgUrl;
+    @Schema(name = "shelfLife", description = "남은 소비기간")
+    private int shelfLife;
 
-  public static FridgeFoodsRes toDto(FridgeFood fridgeFood) {
-    return FridgeFoodsRes.builder()
-            .fridgeFoodId(fridgeFood.getId())
-            .foodName(fridgeFood.getFood().getFoodName())
-            .foodImgUrl(AwsS3ImageUrlUtil.toUrl(fridgeFood.getFood().getFoodImgKey()))
-            .shelfLife(FridgeUtils.calShelfLife(fridgeFood.getShelfLife()))
-            .build();
-  }
+    public static FridgeFoodsRes toDto(FridgeFood fridgeFood) {
+        return FridgeFoodsRes.builder()
+                .fridgeFoodId(fridgeFood.getId())
+                .foodName(fridgeFood.getFood().getFoodName())
+                .foodImgUrl(AwsS3ImageUrlUtil.toUrl(fridgeFood.getFood().getFoodImgKey()))
+                .shelfLife(FridgeUtils.calShelfLife(fridgeFood.getExpirationDate()))
+                .build();
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java
index dbcd8a2..6bef76a 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java
@@ -21,7 +21,7 @@ public class FridgeMainRes {
 
   public static FridgeMainRes toFridgeDto(List<FridgeFood> fridgeFoods) {
     return new FridgeMainRes(fridgeFoods.stream()
-            .map(ff -> new FridgeFoodsRes(ff.getId(), ff.getFood().getFoodName(), AwsS3ImageUrlUtil.toUrl(ff.getFood().getFoodImgKey()), FridgeUtils.calShelfLife(ff.getShelfLife())))
+            .map(ff -> new FridgeFoodsRes(ff.getId(), ff.getFood().getFoodName(), AwsS3ImageUrlUtil.toUrl(ff.getFood().getFoodImgKey()), FridgeUtils.calShelfLife(ff.getExpirationDate())))
             .collect(Collectors.toList()));
   }
 
diff --git a/src/main/java/com/example/icebutler_server/fridge/entity/FridgeFood.java b/src/main/java/com/example/icebutler_server/fridge/entity/FridgeFood.java
index d40acf2..67b2fd1 100644
--- a/src/main/java/com/example/icebutler_server/fridge/entity/FridgeFood.java
+++ b/src/main/java/com/example/icebutler_server/fridge/entity/FridgeFood.java
@@ -4,6 +4,7 @@
 import com.example.icebutler_server.food.entity.FoodDeleteStatus;
 import com.example.icebutler_server.fridge.dto.request.FridgeFoodReq;
 import com.example.icebutler_server.global.entity.BaseEntity;
+import com.example.icebutler_server.global.util.FridgeUtils;
 import com.example.icebutler_server.user.entity.User;
 import lombok.AccessLevel;
 import lombok.Builder;
@@ -25,7 +26,10 @@ public class FridgeFood extends BaseEntity {
     private Long id;
 
     @Column(nullable = false)
-    private LocalDate shelfLife;
+    private LocalDate expirationDate;
+
+    @Column(nullable = false)
+    private int shelfLife;
 
     private String fridgeFoodImgKey;
 
@@ -35,7 +39,7 @@ public class FridgeFood extends BaseEntity {
     private String foodDetailName;
 
     @Enumerated(EnumType.STRING)
-    private FoodDeleteStatus foodDeleteStatus;
+    private FoodDeleteStatus foodDeleteStatus = null;
 
     @ManyToOne(fetch = FetchType.LAZY, optional = false)
     @JoinColumn(name = "food_id")
@@ -50,25 +54,26 @@ public class FridgeFood extends BaseEntity {
     private Fridge fridge;
 
     @Builder
-    public FridgeFood(User owner, Food food, Fridge fridge, String foodDetailName, LocalDate shelfLife, String memo, String fridgeFoodImgKey) {
-        this.shelfLife = shelfLife;
+    public FridgeFood(User owner, Food food, Fridge fridge, String foodDetailName, LocalDate expirationDate, String memo, String fridgeFoodImgKey) {
+        this.expirationDate = expirationDate;
+        this.shelfLife = FridgeUtils.calShelfLife(expirationDate);
         this.fridgeFoodImgKey = fridgeFoodImgKey;
         this.memo = memo;
         this.foodDetailName = foodDetailName;
         this.owner = owner;
         this.food = food;
         this.fridge = fridge;
-        this.foodDeleteStatus = null;
     }
 
     public void updateFridgeFoodInfo(Food food) {
         this.food = food;
     }
 
-    public void updateFridgeFoodInfo(String foodDetailName, String memo, LocalDate shelfLife, String imgUrl) {
+    public void updateFridgeFoodInfo(String foodDetailName, String memo, LocalDate expirationDate, String imgUrl) {
         this.foodDetailName = foodDetailName;
         this.memo = memo;
-        this.shelfLife = shelfLife;
+        this.expirationDate = expirationDate;
+        this.shelfLife = FridgeUtils.calShelfLife(expirationDate);
         this.fridgeFoodImgKey = imgUrl;
     }
 
@@ -76,10 +81,6 @@ public void updateFridgeFoodOwner(User newOwner) {
         this.owner = newOwner;
     }
 
-    public void remove() {
-        this.setIsEnable(false);
-    }
-
     public void removeWithStatus(FoodDeleteStatus deleteStatus) {
         this.setIsEnable(false);
         this.foodDeleteStatus = deleteStatus;
@@ -90,7 +91,7 @@ public static FridgeFood toEntity(User owner, Fridge fridge, Food food, FridgeFo
                 .fridge(fridge)
                 .food(food)
                 .foodDetailName(fridgeFoodReq.getFoodDetailName())
-                .shelfLife(LocalDate.parse(fridgeFoodReq.getShelfLife()))
+                .expirationDate(LocalDate.parse(fridgeFoodReq.getExpirationDate()))
                 .owner(owner)
                 .memo(fridgeFoodReq.getMemo())
                 .fridgeFoodImgKey(fridgeFoodReq.getImgKey())

From 638bcb2aa0425e0c569e4ac46008ef65e522577b Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sat, 10 Aug 2024 00:00:29 +0900
Subject: [PATCH 03/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EC=8B=9D=ED=92=88=20=EA=B2=80=EC=83=89=20=EC=A1=B0?=
 =?UTF-8?q?=ED=9A=8C=20API=20=ED=86=B5=ED=95=A9=20=EB=B0=8F=20=EB=8F=99?=
 =?UTF-8?q?=EC=A0=81=EC=BF=BC=EB=A6=AC=20=EC=A0=81=EC=9A=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   | 32 ++++--------
 .../fridge/dto/response/FridgeFoodsRes.java   | 19 ++++---
 .../fridge/dto/response/FridgeMainRes.java    | 32 ------------
 .../FridgeFood/FridgeFoodCustom.java          |  5 +-
 .../FridgeFood/FridgeFoodRepository.java      | 13 -----
 .../FridgeFood/FridgeFoodRepositoryImpl.java  | 51 ++++++++++++++++---
 .../repository/FridgeUserRepository.java      |  2 +
 .../fridge/service/FridgeService.java         |  6 +--
 .../fridge/service/FridgeServiceImpl.java     | 31 +++--------
 9 files changed, 84 insertions(+), 107 deletions(-)
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 6cd4064..3d19a5c 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -15,11 +15,12 @@
 import io.swagger.v3.oas.annotations.responses.ApiResponses;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
-import java.util.List;
 
 @RequestMapping("/fridges")
 @RestController
@@ -105,8 +106,8 @@ public ResponseCustom<Long> removeFridgeUser(@Parameter(description = "냉장고
         return ResponseCustom.success(fridgeService.removeFridgeUser(fridgeId, userId));
     }
 
-    @Operation(summary = "냉장고 식품 전체 조회(카테고리별)", description = "냉장고 내 식품을 카테고리 별로 전체조회한다.")
-    @SwaggerApiSuccess(implementation = FridgeMainRes.class)
+    @Operation(summary = "냉장고 식품 검색 조회", description = "냉장고 내 식품을 검색한다.")
+    @SwaggerApiSuccess(implementation = FridgeFoodsRes.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "400", description = "(F0000)존재하지 않는 카테고리입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
@@ -116,25 +117,12 @@ public ResponseCustom<Long> removeFridgeUser(@Parameter(description = "냉장고
     })
     @Auth
     @GetMapping("/{fridgeId}/foods")
-    public ResponseCustom<FridgeMainRes> getFoods(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
-                                                  @Parameter(description = "식품 카테고리") @RequestParam(required = false) String category,
-                                                  @Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.getFoods(fridgeId, userId, category));
-    }
-
-
-    @Operation(summary = "냉장고 식품 검색 조회", description = "냉장고 내 식품을 검색한다.")
-    @SwaggerApiSuccess(implementation = FridgeFoodsRes.class)
-    @ApiResponses(value = {
-            @ApiResponse(responseCode = "404", description = "(R0000)존재하지 않는 냉장고입니다.",
-                    content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
-    })
-    @Auth
-    @GetMapping("/{fridgeId}/search")
-    public ResponseCustom<List<FridgeFoodsRes>> searchFridgeFood(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
-                                                                 @Parameter(description = "식품명") @RequestParam String keyword,
-                                                                 @Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.searchFridgeFood(fridgeId, userId, keyword));
+    public ResponseCustom<Page<FridgeFoodsRes>> searchFridgeFood(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
+                                                                      @Parameter(description = "식품 카테고리") @RequestParam(required = false) String category,
+                                                                      @Parameter(description = "식품명") @RequestParam(required = false) String word,
+                                                                      Pageable pageable,
+                                                                      @Parameter(hidden = true) @IsLogin Long userId) {
+        return ResponseCustom.success(fridgeService.searchFridgeFoods(fridgeId, userId, word, category, pageable));
     }
 
     @Operation(summary = "냉장고 식품 상세 조회", description = "냉장고 내 식품을 상세 조회한다.")
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
index 9fe8d21..c5f4202 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodsRes.java
@@ -3,27 +3,34 @@
 import com.example.icebutler_server.global.util.FridgeUtils;
 import com.example.icebutler_server.fridge.entity.FridgeFood;
 import com.example.icebutler_server.global.util.AwsS3ImageUrlUtil;
+import com.querydsl.core.annotations.QueryProjection;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
 @Data
 @Builder
-@AllArgsConstructor
 @NoArgsConstructor
 @Schema(name = "FridgeFoodsRes", description = "냉장고 식품 정보")
 public class FridgeFoodsRes {
-    @Schema(name = "fridgeFoodId", description = "냉장고 식품 ID")
+    @Schema(description = "냉장고 식품 ID", example = "1")
     private Long fridgeFoodId;
-    @Schema(name = "foodName", description = "냉장고 식품 이름")
+    @Schema(description = "냉장고 식품 이름", example = "사과")
     private String foodName;
-    @Schema(name = "foodImgUrl", description = "냉장고 식품 이미지 URL")
+    @Schema(description = "냉장고 식품 이미지 URL", example = "https://~~/apple.jpg")
     private String foodImgUrl;
-    @Schema(name = "shelfLife", description = "남은 소비기간")
+    @Schema(description = "남은 소비기간", example = "4")
     private int shelfLife;
 
+    @QueryProjection
+    public FridgeFoodsRes(Long fridgeFoodId, String foodName, String foodImgUrl, int shelfLife) {
+        this.fridgeFoodId = fridgeFoodId;
+        this.foodName = foodName;
+        this.foodImgUrl = AwsS3ImageUrlUtil.toUrl(foodImgUrl);
+        this.shelfLife = shelfLife;
+    }
+
     public static FridgeFoodsRes toDto(FridgeFood fridgeFood) {
         return FridgeFoodsRes.builder()
                 .fridgeFoodId(fridgeFood.getId())
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java
deleted file mode 100644
index 6bef76a..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeMainRes.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.global.util.FridgeUtils;
-import com.example.icebutler_server.fridge.entity.FridgeFood;
-import com.example.icebutler_server.global.util.AwsS3ImageUrlUtil;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Schema(name = "FridgeMainRes", description = "냉장고 식품 정보")
-public class FridgeMainRes {
-  @Schema(name = "foodList", description = "냉장고 식품 정보")
-  private List<FridgeFoodsRes> foodList = new ArrayList<>();
-
-  public static FridgeMainRes toFridgeDto(List<FridgeFood> fridgeFoods) {
-    return new FridgeMainRes(fridgeFoods.stream()
-            .map(ff -> new FridgeFoodsRes(ff.getId(), ff.getFood().getFoodName(), AwsS3ImageUrlUtil.toUrl(ff.getFood().getFoodImgKey()), FridgeUtils.calShelfLife(ff.getExpirationDate())))
-            .collect(Collectors.toList()));
-  }
-
-  private static FridgeDiscardRes isNullFoodDiscardRes(FridgeDiscardRes fridgeDiscard){
-    return fridgeDiscard != null ? fridgeDiscard : new FridgeDiscardRes();
-  }
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodCustom.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodCustom.java
index 754d9d4..ab8cc3d 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodCustom.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodCustom.java
@@ -4,17 +4,20 @@
 import com.example.icebutler_server.food.entity.FoodCategory;
 import com.example.icebutler_server.food.entity.FoodDeleteStatus;
 import com.example.icebutler_server.fridge.dto.response.FridgeDiscardRes;
+import com.example.icebutler_server.fridge.dto.response.FridgeFoodsRes;
 import com.example.icebutler_server.fridge.entity.Fridge;
 import com.example.icebutler_server.fridge.entity.FridgeFood;
 import com.example.icebutler_server.fridge.entity.FridgeUser;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 import java.util.List;
 
 public interface FridgeFoodCustom {
+    Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, String word, String category, Pageable pageable);
     Long findByDeleteCategoryForStatistics(FoodDeleteStatus deleteCategory, Fridge fridge, FoodCategory category, Integer year, Integer month);
     FridgeDiscardRes findByFridgeForDisCardFood(Fridge fridge);
     List<Food> findByUserForFridgeRecipeFoodList(Fridge fridge);
     void deleteOwnerByFridgeUser(FridgeUser fridgeUser);
-
     List<FridgeFood> findByActiveAndShelfLifeLimit3();
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
index 11bc52e..8c81380 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
@@ -1,29 +1,16 @@
 package com.example.icebutler_server.fridge.repository.FridgeFood;
 
 import com.example.icebutler_server.food.entity.Food;
-import com.example.icebutler_server.food.entity.FoodCategory;
 import com.example.icebutler_server.fridge.entity.Fridge;
 import com.example.icebutler_server.fridge.entity.FridgeFood;
 import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
 
-import java.util.List;
 import java.util.Optional;
 
 @Repository
 public interface FridgeFoodRepository extends JpaRepository<FridgeFood, Long>, FridgeFoodCustom {
     Optional<FridgeFood> findByIdAndFridgeAndIsEnable(Long fridgeFoodId, Fridge fridge, Boolean status);
-    List<FridgeFood> findByFridgeAndFood_FoodCategoryAndIsEnableOrderByShelfLife(Fridge fridge, FoodCategory foodCategory, Boolean status);
-    List<FridgeFood> findByFridgeAndIsEnableOrderByShelfLife(Fridge fridge, Boolean status);
-    List<FridgeFood> findByFoodDetailNameContainingAndFridgeAndIsEnable(String keyword, Fridge fridge, Boolean isEnable);
     void deleteByFridge(Fridge fridge);
     void deleteByFood(Food food);
-
-    //TODO: cascade 처리하면 이거 지우기
-    @Modifying
-    @Query("update FridgeFood f set f.isEnable = :status where f.fridge = :fridge")
-    void removeFridgeFoodByFridge(@Param("status") Boolean status, @Param("fridge") Fridge fridge);
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepositoryImpl.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepositoryImpl.java
index 412a38b..52027ad 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepositoryImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepositoryImpl.java
@@ -4,12 +4,19 @@
 import com.example.icebutler_server.food.entity.FoodCategory;
 import com.example.icebutler_server.food.entity.FoodDeleteStatus;
 import com.example.icebutler_server.fridge.dto.response.FridgeDiscardRes;
+import com.example.icebutler_server.fridge.dto.response.FridgeFoodsRes;
 import com.example.icebutler_server.fridge.dto.response.QFridgeDiscardRes;
+import com.example.icebutler_server.fridge.dto.response.QFridgeFoodsRes;
 import com.example.icebutler_server.fridge.entity.Fridge;
 import com.example.icebutler_server.fridge.entity.FridgeFood;
 import com.example.icebutler_server.fridge.entity.FridgeUser;
+import com.querydsl.core.types.dsl.BooleanExpression;
 import com.querydsl.jpa.impl.JPAQueryFactory;
 import lombok.RequiredArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageImpl;
+import org.springframework.data.domain.Pageable;
 
 import java.time.LocalDate;
 import java.util.List;
@@ -20,8 +27,41 @@
 import static com.example.icebutler_server.fridge.entity.QFridgeUser.fridgeUser;
 
 @RequiredArgsConstructor
-public class FridgeFoodRepositoryImpl implements FridgeFoodCustom{
+public class FridgeFoodRepositoryImpl implements FridgeFoodCustom {
     private final JPAQueryFactory jpaQueryFactory;
+
+    @Override
+    public Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, String word, String category, Pageable p) {
+        List<FridgeFoodsRes> list = jpaQueryFactory.select(new QFridgeFoodsRes(
+                        fridgeFood.id,
+                        fridgeFood.food.foodName,
+                        fridgeFood.food.foodImgKey,
+                        fridgeFood.shelfLife))
+                .from(fridgeFood)
+                .where(eqCategory(category), containsWord(word), fridgeFood.isEnable.eq(true))
+                .orderBy(fridgeFood.shelfLife.asc())
+                .offset(p.getOffset())
+                .limit(p.getPageSize())
+                .fetch();
+
+        Long count = jpaQueryFactory.select(fridgeFood.count())
+                .from(fridgeFood)
+                .where(eqCategory(category), containsWord(word), fridgeFood.isEnable.eq(true))
+                .fetchOne();
+
+        return new PageImpl<>(list, p, count);
+    }
+
+    private BooleanExpression eqCategory(String category) {
+        return StringUtils.isEmpty(category) ? null :
+                fridgeFood.food.foodCategory.eq(FoodCategory.getFoodCategoryByName(category));
+    }
+
+    private BooleanExpression containsWord(String word) {
+        return StringUtils.isEmpty(word) ? null :
+                fridgeFood.foodDetailName.contains(word);
+    }
+
     @Override
     public Long findByDeleteCategoryForStatistics(FoodDeleteStatus deleteCategory, Fridge fridge, FoodCategory category, Integer year, Integer month) {
         return jpaQueryFactory.select(fridgeFood.count())
@@ -76,8 +116,6 @@ public List<Food> findByUserForFridgeRecipeFoodList(Fridge fridgeEntity) {
                 .fetch();
     }
 
-
-
     @Override
     public void deleteOwnerByFridgeUser(FridgeUser fridgeUser) {
         jpaQueryFactory.update(fridgeFood)
@@ -90,10 +128,9 @@ public void deleteOwnerByFridgeUser(FridgeUser fridgeUser) {
     public List<FridgeFood> findByActiveAndShelfLifeLimit3() {
         LocalDate startDate = LocalDate.now();
         LocalDate endDate = startDate.plusDays(3);
-       return jpaQueryFactory.selectFrom(fridgeFood)
+        return jpaQueryFactory.selectFrom(fridgeFood)
                 .where(fridgeFood.isEnable.eq(true)
-                        .and(fridgeFood.shelfLife.between(startDate, endDate)))
-               .fetch();
-
+                        .and(fridgeFood.expirationDate.between(startDate, endDate)))
+                .fetch();
     }
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index ce8958c..fb4b3b8 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -21,6 +21,8 @@ public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     boolean existsByFridgeAndRoleAndIsEnable(Fridge fridge, FridgeRole role, boolean isEnable);
 
+    Optional<FridgeUser> findByFridgeIdAndUserIdAndIsEnable(Long fridgeId, Long userId, boolean isEnable);
+
     List<FridgeUser> findByFridgeAndIsEnableOrderByRoleDesc(Fridge fridge, Boolean isEnable);
 
     List<FridgeUser> findByUserAndIsEnable(User user, Boolean status);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 8b469ed..19e8e9a 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -2,17 +2,17 @@
 
 import com.example.icebutler_server.fridge.dto.request.*;
 import com.example.icebutler_server.fridge.dto.response.*;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 
 import java.io.IOException;
-import java.util.List;
 
 public interface FridgeService {
-  FridgeMainRes getFoods(Long fridgeId, Long userId, String category);
   Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
   void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
   void removeFridge(Long fridgeId, Long userId);
   Long removeFridgeUser(Long fridgeId, Long userId) throws IOException;
-  List<FridgeFoodsRes> searchFridgeFood(Long fridgeId, Long ownerId, String foodName);
+  Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long ownerId, String foodName, String category, Pageable pageable);
   FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId);
   void addFridgeFood(FridgeFoodsReq fridgeFoodsReq, Long fridgeId, Long userId);
   void modifyFridgeFood(Long fridgeId, Long fridgeFoodId, FridgeFoodReq fridgeFoodReq, Long userId);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 4568bc1..6dd8069 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -23,6 +23,8 @@
 import com.example.icebutler_server.user.entity.User;
 import com.example.icebutler_server.user.repository.UserRepository;
 import lombok.RequiredArgsConstructor;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -51,20 +53,6 @@ public class FridgeServiceImpl implements FridgeService {
     private final AmazonSQSSender amazonSQSSender;
     private final NotificationServiceImpl alarmService;
 
-    @Override
-    public FridgeMainRes getFoods(Long fridgeId, Long userId, String category) {
-        User user = this.userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-        Fridge fridge = this.fridgeRepository.findByIdAndIsEnable(fridgeId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-
-        if (category == null) {
-            // 값이 없으면 전체 조회
-            return FridgeMainRes.toFridgeDto(this.fridgeFoodRepository.findByFridgeAndIsEnableOrderByShelfLife(fridge, true));
-        } else {
-            // 값이 있으면 특정 값을 불러온 조회
-            return FridgeMainRes.toFridgeDto(this.fridgeFoodRepository.findByFridgeAndFood_FoodCategoryAndIsEnableOrderByShelfLife(fridge, FoodCategory.getFoodCategoryByName(category), true));
-        }
-    }
-
     @Override
     @Transactional
     public Long addFridge(AddFridgeReq addFridgeReq, Long ownerId) {
@@ -85,11 +73,9 @@ public Long addFridge(AddFridgeReq addFridgeReq, Long ownerId) {
         fridgeUserRepository.saveAll(members);
         cartRepository.save(Cart.toEntity(fridge));
 
-
         for (FridgeUser fridgeUser : members)
             alarmService.sendJoinFridgeAlarm(fridgeUser.getUser(), fridge.getFridgeName());
 
-
         return fridge.getId();
     }
 
@@ -134,9 +120,8 @@ private void updateFridgeUsers(EditFridgeReq editFridgeReq, Fridge fridge) {
             this.fridgeUserRepository.saveAll(newFridgeUser);
         }
 
-        if (!membersToDelete.isEmpty()) {
+        if (!membersToDelete.isEmpty())
             this.fridgeUserRepository.deleteByFridgeAndUserIn(fridge, membersToDelete);
-        }
 
         for (User user : membersToAdd)
             alarmService.sendJoinFridgeAlarm(user, fridge.getFridgeName());
@@ -178,11 +163,11 @@ public Long removeFridgeUser(Long fridgeId, Long userId) {
         return fridge.getId();
     }
 
+    // 냉장고 식품 검색
     @Override
-    public List<FridgeFoodsRes> searchFridgeFood(Long fridgeId, Long ownerId, String keyword) {
-        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-        List<FridgeFood> searchFoods = fridgeFoodRepository.findByFoodDetailNameContainingAndFridgeAndIsEnable(keyword, fridge, true);
-        return searchFoods.stream().map(FridgeFoodsRes::toDto).collect(Collectors.toList());
+    public Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long userId, String word, String category, Pageable p) {
+        fridgeUserRepository.findByFridgeIdAndUserIdAndIsEnable(fridgeId, userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_USER));
+        return fridgeFoodRepository.searchFridgeFoods(fridgeId, word, category, p);
     }
 
     @Override
@@ -246,7 +231,7 @@ public void modifyFridgeFood(Long fridgeId, Long fridgeFoodId, FridgeFoodReq fri
         modifyFridgeFood.updateFridgeFoodInfo(
                 fridgeFoodReq.getFoodDetailName(),
                 fridgeFoodReq.getMemo(),
-                LocalDate.parse(fridgeFoodReq.getShelfLife()),
+                LocalDate.parse(fridgeFoodReq.getExpirationDate()),
                 fridgeFoodReq.getImgKey()
         );
 

From 04fa955a16e2409fbd2448ab586f8d7d74943f02 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sat, 10 Aug 2024 00:02:17 +0900
Subject: [PATCH 04/11] =?UTF-8?q?#334=20docs:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EC=8B=9D=ED=92=88=20=EA=B2=80=EC=83=89=20=EC=A1=B0?=
 =?UTF-8?q?=ED=9A=8C=20API=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EC=88=98?=
 =?UTF-8?q?=EC=A0=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../icebutler_server/fridge/controller/FridgeController.java   | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 3d19a5c..bc7e382 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -111,8 +111,7 @@ public ResponseCustom<Long> removeFridgeUser(@Parameter(description = "냉장고
     @ApiResponses(value = {
             @ApiResponse(responseCode = "400", description = "(F0000)존재하지 않는 카테고리입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
-            @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.\t\n" +
-                    "(R0000)존재하지 않는 냉장고입니다.",
+            @ApiResponse(responseCode = "404", description = "(R0003)해당 냉장고에 존재하지 않는 사용자입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth

From fe784b5df5ab663a9360f1a8b02c88e989be7bc2 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sun, 11 Aug 2024 15:35:21 +0900
Subject: [PATCH 05/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=ED=83=88=ED=87=B4=20API=20=EC=8A=A4=EC=9B=A8?=
 =?UTF-8?q?=EA=B1=B0=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=BD=94=EB=93=9C?=
 =?UTF-8?q?=EC=A0=95=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java         |  7 ++++---
 .../icebutler_server/fridge/entity/FridgeUser.java  |  4 ----
 .../fridge/service/FridgeService.java               |  2 +-
 .../fridge/service/FridgeServiceImpl.java           | 13 +++++--------
 4 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index bc7e382..8ed9ebf 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -89,7 +89,7 @@ public ResponseCustom<Void> removeFridge(@Parameter(description = "냉장고 ID"
         return ResponseCustom.success();
     }
 
-    @Operation(summary = "냉장고 사용자 삭제", description = "냉장고 사용자를 삭제한다.")
+    @Operation(summary = "냉장고 탈퇴", description = "냉장고에서 스스로 탈퇴한다.")
     @SwaggerApiSuccess(implementation = ResponseCustom.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "403", description = "(G0001)권한이 없습니다.",
@@ -100,10 +100,11 @@ public ResponseCustom<Void> removeFridge(@Parameter(description = "냉장고 ID"
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
-    @PatchMapping("/{fridgeId}/remove/each")
+    @PatchMapping("/{fridgeId}/withdraw")
     public ResponseCustom<Long> removeFridgeUser(@Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
                                                  @Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.removeFridgeUser(fridgeId, userId));
+        fridgeService.removeFridgeUser(fridgeId, userId);
+        return ResponseCustom.success();
     }
 
     @Operation(summary = "냉장고 식품 검색 조회", description = "냉장고 내 식품을 검색한다.")
diff --git a/src/main/java/com/example/icebutler_server/fridge/entity/FridgeUser.java b/src/main/java/com/example/icebutler_server/fridge/entity/FridgeUser.java
index 7f8f49d..7a45a2f 100644
--- a/src/main/java/com/example/icebutler_server/fridge/entity/FridgeUser.java
+++ b/src/main/java/com/example/icebutler_server/fridge/entity/FridgeUser.java
@@ -56,8 +56,4 @@ public void changeRoleToOwner(){
     public void changeRoleToMember(){
         this.role = FridgeRole.MEMBER;
     }
-
-    public void remove() {
-        this.setIsEnable(false);
-    }
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 19e8e9a..5654835 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -11,7 +11,7 @@ public interface FridgeService {
   Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
   void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
   void removeFridge(Long fridgeId, Long userId);
-  Long removeFridgeUser(Long fridgeId, Long userId) throws IOException;
+  void removeFridgeUser(Long fridgeId, Long userId);
   Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long ownerId, String foodName, String category, Pageable pageable);
   FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId);
   void addFridgeFood(FridgeFoodsReq fridgeFoodsReq, Long fridgeId, Long userId);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 6dd8069..53be3c8 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -149,18 +149,15 @@ public void removeFridge(Long fridgeId, Long userId) {
         fridgeRepository.delete(fridge);
     }
 
-    // 냉장고 개별
+    // 냉장고 탈퇴
     @Override
     @Transactional
-    public Long removeFridgeUser(Long fridgeId, Long userId) {
-        User user = userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-        FridgeUser fridgeUser = (FridgeUser) fridgeUserRepository.findByUserAndFridgeAndIsEnable(user, fridge, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_USER));
-
+    public void removeFridgeUser(Long fridgeId, Long userId) {
+        FridgeUser fridgeUser = fridgeUserRepository.findByFridgeIdAndUserIdAndIsEnable(userId, fridgeId, true)
+                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_USER));
         if (fridgeUser.getRole() == FridgeRole.OWNER) throw new BaseException(NO_PERMISSION);
-        fridgeUser.remove();
 
-        return fridge.getId();
+        fridgeUserRepository.delete(fridgeUser);
     }
 
     // 냉장고 식품 검색

From 16add3dbc2f6814eceecaff0edfff6aadae11beb Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sun, 11 Aug 2024 15:55:22 +0900
Subject: [PATCH 06/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EC=8B=9D=ED=92=88=20=EC=83=81=EC=84=B8=EC=A1=B0?=
 =?UTF-8?q?=ED=9A=8C=20API=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20=EC=88=98?=
 =?UTF-8?q?=EC=A0=95=20=EB=B0=8F=20=EC=BD=94=EB=93=9C=EC=A0=95=EB=A6=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   |  8 ++----
 .../fridge/dto/response/FridgeFoodRes.java    | 28 +++++++++----------
 .../FridgeFood/FridgeFoodRepository.java      |  1 +
 .../repository/FridgeUserRepository.java      |  1 +
 .../fridge/service/FridgeService.java         |  2 --
 .../fridge/service/FridgeServiceImpl.java     |  9 +++---
 6 files changed, 23 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 8ed9ebf..52d5bc1 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -94,9 +94,7 @@ public ResponseCustom<Void> removeFridge(@Parameter(description = "냉장고 ID"
     @ApiResponses(value = {
             @ApiResponse(responseCode = "403", description = "(G0001)권한이 없습니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
-            @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.\t\n" +
-                    "(R0000)존재하지 않는 냉장고입니다.\t\n" +
-                    "(R0003)해당 냉장고에 존재하지 않는 사용자입니다.",
+            @ApiResponse(responseCode = "404", description = "(R0003)해당 냉장고에 존재하지 않는 사용자입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
@@ -130,9 +128,7 @@ public ResponseCustom<Page<FridgeFoodsRes>> searchFridgeFood(@Parameter(descript
     @ApiResponses(value = {
             @ApiResponse(responseCode = "403", description = "(G0001)권한이 없습니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
-            @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.\t\n" +
-                    "(R0000)존재하지 않는 냉장고입니다.\t\n" +
-                    "(R0002)해당 냉장고에 존재하지 않는 식품입니다.",
+            @ApiResponse(responseCode = "404", description = "(R0002)해당 냉장고에 존재하지 않는 식품입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
index 8f13b49..5052db0 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeFoodRes.java
@@ -8,33 +8,33 @@
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
-import java.time.format.DateTimeFormatter;
+import java.time.LocalDate;
 
 @Data
 @Builder
 @AllArgsConstructor
 @NoArgsConstructor
-@Schema(name = "FridgeFoodRes", description = "냉장고 식품 상세 정보")
+@Schema(name = "냉장고 식품 상세 정보", description = "FridgeFoodRes")
 public class FridgeFoodRes {
-  @Schema(name = "fridgeFoodId", description = "냉장고 ID")
+  @Schema(description = "냉장고 ID", example = "1")
   private Long fridgeFoodId;
-  @Schema(name = "foodId", description = "식품 ID")
+  @Schema(description = "식품 ID", example = "1")
   private Long foodId;
-  @Schema(name = "foodName", description = "식품명")
+  @Schema(description = "식품명", example = "사과")
   private String foodName;
-  @Schema(name = "foodDetailName", description = "식품 상세명")
+  @Schema(description = "식품 상세명", example = "무농약 사과")
   private String foodDetailName;
-  @Schema(name = "foodCategory", description = "식품 카테고리")
+  @Schema(description = "식품 카테고리", example = "채소")
   private String foodCategory;
-  @Schema(name = "expirationDate", description = "식품 소비기한")
-  private String expirationDate;
-  @Schema(name = "shelfLife", description = "남은 소비기간")
+  @Schema(description = "식품 소비기한", example = "2024-01-01")
+  private LocalDate expirationDate;
+  @Schema(description = "남은 소비기간", example = "3")
   private int shelfLife;
-  @Schema(name = "owner", description = "식품 소유자")
+  @Schema(description = "식품 소유자", example = "나야나")
   private String owner;
-  @Schema(name = "memo", description = "식품 메모")
+  @Schema(description = "식품 메모", example = "먹지마세요.")
   private String memo;
-  @Schema(name = "imgUrl", description = "식품 이미지 URL")
+  @Schema(description = "식품 이미지 URL", example = "https://~~/apple.jpg")
   private String imgUrl;
 
   public static FridgeFoodRes toDto(FridgeFood fridgeFood) {
@@ -44,7 +44,7 @@ public static FridgeFoodRes toDto(FridgeFood fridgeFood) {
             .foodName(fridgeFood.getFood().getFoodName())
             .foodDetailName(fridgeFood.getFoodDetailName())
             .foodCategory(fridgeFood.getFood().getFoodCategory().getName())
-            .expirationDate(fridgeFood.getExpirationDate().format(DateTimeFormatter.ISO_DATE))
+            .expirationDate(fridgeFood.getExpirationDate())
             .shelfLife(fridgeFood.getShelfLife())
             .owner(fridgeFood.getOwner() == null ? null : fridgeFood.getOwner().getNickname())
             .memo(fridgeFood.getMemo())
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
index 8c81380..d7028f0 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeFood/FridgeFoodRepository.java
@@ -11,6 +11,7 @@
 @Repository
 public interface FridgeFoodRepository extends JpaRepository<FridgeFood, Long>, FridgeFoodCustom {
     Optional<FridgeFood> findByIdAndFridgeAndIsEnable(Long fridgeFoodId, Fridge fridge, Boolean status);
+    Optional<FridgeFood> findByIdAndFridgeIdAndIsEnable(Long fridgeFoodId, Long fridgeId, Boolean status);
     void deleteByFridge(Fridge fridge);
     void deleteByFood(Food food);
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index fb4b3b8..e27cb10 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -14,6 +14,7 @@
 public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     Optional<FridgeUser> findByUserAndFridgeAndIsEnable(User user, Fridge fridge, Boolean isEnable);
+    Optional<FridgeUser> findByUserIdAndFridgeIdAndIsEnable(Long userId, Long fridgeId, Boolean isEnable);
 
     Optional<FridgeUser> findByFridgeAndUserIdAndRoleAndIsEnable(Fridge fridge, Long userId, FridgeRole fridgeRole, Boolean status);
 
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 5654835..019fff7 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -5,8 +5,6 @@
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
-import java.io.IOException;
-
 public interface FridgeService {
   Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
   void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 53be3c8..ee83d26 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -167,12 +167,13 @@ public Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long userId, String
         return fridgeFoodRepository.searchFridgeFoods(fridgeId, word, category, p);
     }
 
+    // 냉장고 식품 상세 조회
     @Override
     public FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId) {
-        User user = userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-        fridgeUserRepository.findByUserAndFridgeAndIsEnable(user, fridge, true).orElseThrow(() -> new BaseException(NO_PERMISSION));
-        FridgeFood fridgeFood = fridgeFoodRepository.findByIdAndFridgeAndIsEnable(fridgeFoodId, fridge, true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_FOOD));
+        fridgeUserRepository.findByUserIdAndFridgeIdAndIsEnable(userId, fridgeId, true)
+                .orElseThrow(() -> new BaseException(NO_PERMISSION));
+        FridgeFood fridgeFood = fridgeFoodRepository.findByIdAndFridgeIdAndIsEnable(fridgeFoodId, fridgeId, true)
+                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_FOOD));
 
         return FridgeFoodRes.toDto(fridgeFood);
     }

From 1102c715cc822c938f7c955bcfcd33036e2da66a Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sun, 11 Aug 2024 17:24:10 +0900
Subject: [PATCH 07/11] =?UTF-8?q?#334=20refactor:=20=EB=82=B4=20=EB=83=89?=
 =?UTF-8?q?=EC=9E=A5=EA=B3=A0=20=EC=A1=B0=ED=9A=8C=20API=20=EB=B0=98?=
 =?UTF-8?q?=ED=99=98=EA=B0=92=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   | 10 +++----
 .../fridge/dto/response/MyFridgeRes.java      | 23 ++++++++++++++++
 .../fridge/dto/response/SelectFridgeRes.java  | 20 --------------
 .../dto/response/SelectFridgesMainRes.java    | 27 -------------------
 .../repository/FridgeUserRepository.java      |  2 ++
 .../fridge/service/FridgeService.java         |  1 +
 .../fridge/service/FridgeServiceImpl.java     | 15 ++++++-----
 7 files changed, 39 insertions(+), 59 deletions(-)
 create mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/MyFridgeRes.java
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgeRes.java
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgesMainRes.java

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 52d5bc1..149e534 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -219,18 +219,18 @@ public ResponseCustom<FridgeUserMainRes> getMembers(
         return ResponseCustom.success(fridgeService.searchMembers(fridgeId, userId));
     }
 
-    @Operation(summary = "냉장고 선택목록 조회", description = "냉장고 선택목록을 조회한다.")
-    @SwaggerApiSuccess(implementation = SelectFridgesMainRes.class)
+    @Operation(summary = "내 냉장고 조회", description = "사용자의 냉장고를 조회한다.")
+    @SwaggerApiSuccess(implementation = MyFridgeRes.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
-    @GetMapping("/select")
-    public ResponseCustom<SelectFridgesMainRes> selectFridges(
+    @GetMapping()
+    public ResponseCustom<MyFridgeRes> getMyFridge(
             @Parameter(hidden = true) @IsLogin Long userId
     ) {
-        return ResponseCustom.success(fridgeService.selectFridges(userId));
+        return ResponseCustom.success(fridgeService.getMyFridge(userId));
     }
 
     @Operation(summary = "냉장고 목록 조회", description = "냉장고 목록을 조회한다.")
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/MyFridgeRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/MyFridgeRes.java
new file mode 100644
index 0000000..1a087f7
--- /dev/null
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/MyFridgeRes.java
@@ -0,0 +1,23 @@
+package com.example.icebutler_server.fridge.dto.response;
+
+import com.example.icebutler_server.fridge.entity.FridgeUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+@Schema(name = "내 냉장고 정보", description = "SelectFridgeRes")
+public class MyFridgeRes {
+    @Schema(description = "냉장고 ID", example = "1")
+    private Long fridgeId;
+    @Schema(description = "냉장고 이름", example = "우리집 냉장고")
+    private String fridgeName;
+
+    public static MyFridgeRes toDto(FridgeUser fridgeUser) {
+        return MyFridgeRes.builder()
+                .fridgeId(fridgeUser.getFridge().getId())
+                .fridgeName(fridgeUser.getFridge().getFridgeName())
+                .build();
+    }
+}
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgeRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgeRes.java
deleted file mode 100644
index 857c3c9..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgeRes.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-@Data
-@Schema(name = "SelectFridgeRes", description = "냉장고 정보")
-public class SelectFridgeRes {
-  @Schema(name = "fridgeName", description = "냉장고 이름")
-  private String fridgeName;
-  @Schema(name = "fridgeId", description = "냉장고 ID")
-  private Long fridgeId;
-
-  public static SelectFridgeRes toDto(String fridgeName, Long fridgeId) {
-    SelectFridgeRes selectFridgeRes = new SelectFridgeRes();
-    selectFridgeRes.fridgeId = fridgeId;
-    selectFridgeRes.fridgeName = fridgeName;
-    return selectFridgeRes;
-  }
-}
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgesMainRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgesMainRes.java
deleted file mode 100644
index 901352e..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/SelectFridgesMainRes.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.fridge.entity.FridgeUser;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class SelectFridgesMainRes {
-
-  List<SelectFridgeRes> fridgeList;
-
-  public static SelectFridgesMainRes toDto(List<FridgeUser> fridgeUsers) {
-    SelectFridgesMainRes selectFridgesMainRes = new SelectFridgesMainRes();
-
-    selectFridgesMainRes.fridgeList = fridgeUsers.stream().map(m -> SelectFridgeRes.toDto(m.getFridge().getFridgeName(), m.getFridge().getId())).collect(Collectors.toList());
-
-    return selectFridgesMainRes;
-  }
-}
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index e27cb10..c4a1a4c 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -28,6 +28,8 @@ public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     List<FridgeUser> findByUserAndIsEnable(User user, Boolean status);
 
+    Optional<FridgeUser> findByUserIdAndIsEnable(Long userId, Boolean status);
+
     Optional<FridgeUser> findByFridgeAndUserAndIsEnable(Fridge fridge, User user, Boolean isEnable);
 
     void deleteByFridge(Fridge fridge);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 019fff7..b016a0a 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -18,5 +18,6 @@ public interface FridgeService {
   FridgeUserMainRes searchMembers(Long fridgeId, Long userId);
   FridgeFoodsStatistics getFridgeFoodStatistics(Long fridgeId, String deleteCategory, Long userId, Integer year, Integer month);
   RecipeFridgeFoodListsRes getFridgeUserFoodList(Long fridgeId, Long userId);
+  MyFridgeRes getMyFridge(Long userId);
   void notifyFridgeFood();
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index ee83d26..339e42b 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -30,10 +30,7 @@
 
 import java.io.IOException;
 import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.example.icebutler_server.global.exception.ReturnCode.*;
@@ -303,9 +300,13 @@ private FridgeFoodsStatistics toFoodStatisticsByDeleteStatus(Map<FoodCategory, L
         return FridgeFoodsStatistics.toDto(foodStatisticsList);
     }
 
-    public SelectFridgesMainRes selectFridges(Long userId) {
-        User user = userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-        return SelectFridgesMainRes.toDto(fridgeUserRepository.findByUserAndIsEnable(user, true));
+    // 내 냉장고 조회
+    public MyFridgeRes getMyFridge(Long userId) {
+        userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
+
+        FridgeUser fridgeUser = fridgeUserRepository.findByUserIdAndIsEnable(userId, true).orElse(null);
+        if (fridgeUser == null) return null;
+        return MyFridgeRes.toDto(fridgeUser);
     }
 
     public GetFridgesMainRes myFridge(Long userId) {

From 2a43fe95a07d71a2a3d70c8276fa79fb420b0374 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sun, 11 Aug 2024 17:59:35 +0900
Subject: [PATCH 08/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20API=20?=
 =?UTF-8?q?=EB=B0=98=ED=99=98=EA=B0=92=20=EB=B3=80=EA=B2=BD=20=EB=B0=8F=20?=
 =?UTF-8?q?=EB=B9=8C=EB=8D=94=20=EC=A0=81=EC=9A=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   | 21 +++++----
 .../fridge/dto/response/FridgeInfoRes.java    | 36 +++++++++++++++
 .../fridge/dto/response/FridgeRes.java        | 46 -------------------
 .../fridge/dto/response/FridgeUserRes.java    | 31 ++++++-------
 .../dto/response/GetFridgesMainRes.java       | 33 -------------
 .../repository/FridgeUserRepository.java      |  4 --
 .../fridge/service/FridgeService.java         | 43 +++++++++++------
 .../fridge/service/FridgeServiceImpl.java     | 17 ++++---
 8 files changed, 98 insertions(+), 133 deletions(-)
 create mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeInfoRes.java
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeRes.java
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/GetFridgesMainRes.java

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index 149e534..d3eadc3 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -226,31 +226,34 @@ public ResponseCustom<FridgeUserMainRes> getMembers(
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
-    @GetMapping()
+    @GetMapping
     public ResponseCustom<MyFridgeRes> getMyFridge(
             @Parameter(hidden = true) @IsLogin Long userId
     ) {
         return ResponseCustom.success(fridgeService.getMyFridge(userId));
     }
 
-    @Operation(summary = "냉장고 목록 조회", description = "냉장고 목록을 조회한다.")
-    @SwaggerApiSuccess(implementation = GetFridgesMainRes.class)
+    @Operation(summary = "냉장고 정보 조회", description = "냉장고 정보를 조회한다.")
+    @SwaggerApiSuccess(implementation = FridgeInfoRes.class)
     @ApiResponses(value = {
-            @ApiResponse(responseCode = "404", description = "(U0000)존재하지 않는 사용자입니다.\t\n" +
-                    "(R0000)존재하지 않는 냉장고입니다.",
+            @ApiResponse(responseCode = "404", description = "(R0000)존재하지 않는 냉장고입니다.\t\n" +
+                    "(R0002)해당 냉장고에 존재하지 않는 식품입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
-    @GetMapping("")
-    public ResponseCustom<GetFridgesMainRes> myFridge(@Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.myFridge(userId));
+    @GetMapping("/{fridgeId}")
+    public ResponseCustom<FridgeInfoRes> getFridgeInfo(
+            @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
+            @Parameter(hidden = true) @IsLogin Long userId
+    ) {
+        return ResponseCustom.success(fridgeService.getFridgeInfo(userId, fridgeId));
     }
 
     /**
      * [Get] 냉장고 통계 (낭비/소비)
      */
     @Operation(summary = "냉장고 식품 삭제 통계 조회", description = "냉장고 식품의 삭제 타입별 통계를 조회한다.")
-    @SwaggerApiSuccess(implementation = GetFridgesMainRes.class)
+    @SwaggerApiSuccess(implementation = FridgeFoodsStatistics.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "400", description = "(F0003)존재하지 않는 식품삭제 타입입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeInfoRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeInfoRes.java
new file mode 100644
index 0000000..11fa504
--- /dev/null
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeInfoRes.java
@@ -0,0 +1,36 @@
+package com.example.icebutler_server.fridge.dto.response;
+
+import com.example.icebutler_server.fridge.entity.Fridge;
+import com.example.icebutler_server.fridge.entity.FridgeUser;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Builder;
+import lombok.Data;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Data
+@Builder
+@Schema(name = "가정용 냉장고 정보", description = "FridgeInfoRes")
+public class FridgeInfoRes {
+    @Schema(description = "냉장고 ID", example = "1")
+    private Long fridgeId;
+    @Schema(description = "냉장고 이름", example = "우리집 냉장고")
+    private String fridgeName;
+    @Schema(description = "냉장고 설명", example = "환영합니다~")
+    private String comment;
+    @Schema(description = "냉장고 유저 정보")
+    private List<FridgeUserRes> users;
+    @Schema(description = "냉장고 유저수", example = "4")
+    private int userCnt;
+
+    public static FridgeInfoRes toDto(Fridge fridge, List<FridgeUser> fridgeUsers) {
+        return FridgeInfoRes.builder()
+                .fridgeId(fridge.getId())
+                .fridgeName(fridge.getFridgeName())
+                .comment(fridge.getFridgeComment())
+                .users(fridgeUsers.stream().map(FridgeUserRes::toDto).collect(Collectors.toList()))
+                .userCnt(fridgeUsers.size())
+                .build();
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeRes.java
deleted file mode 100644
index 8fc12e6..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeRes.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.fridge.entity.Fridge;
-import com.example.icebutler_server.fridge.entity.FridgeUser;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Data
-@AllArgsConstructor
-@NoArgsConstructor
-@Schema(name = "FridgeRes", description = "가정용 냉장고 정보")
-public class FridgeRes {
-  @Schema(name = "fridgeId", description = "냉장고 ID")
-  private Long fridgeId;
-  @Schema(name = "fridgeName", description = "냉장고 이름")
-  private String fridgeName;
-  @Schema(name = "comment", description = "냉장고 설명")
-  private String comment;
-  @Schema(name = "users", description = "냉장고 유저 정보")
-  private List<FridgeUserRes> users;
-  @Schema(name = "userCnt", description = "냉장고 유저수")
-  private Integer userCnt;
-
-  public static FridgeRes toDto(Fridge fridge, List<List<FridgeUser>> fridgeUserList) {
-    List<FridgeUser> fridgeUsers = new ArrayList<>();
-    for (List<FridgeUser> fridgeArr : fridgeUserList) {
-      for (FridgeUser fridgeUser : fridgeArr) {
-        if (fridgeUser.getFridge().getId().equals(fridge.getId())) fridgeUsers.add(fridgeUser);
-      }
-    }
-
-    FridgeRes fridgeRes = new FridgeRes();
-    fridgeRes.fridgeId = fridge.getId();
-    fridgeRes.fridgeName = fridge.getFridgeName();
-    fridgeRes.comment = fridge.getFridgeComment();
-    fridgeRes.users = fridgeUsers.stream().map(m -> FridgeUserRes.toDto(m.getUser(), m.getRole())).collect(Collectors.toList());
-    fridgeRes.userCnt = fridgeUsers.size();
-    return fridgeRes;
-  }
-}
\ No newline at end of file
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
index fc60eac..a7e7f22 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
@@ -1,36 +1,31 @@
 package com.example.icebutler_server.fridge.dto.response;
 
+import com.example.icebutler_server.fridge.entity.FridgeUser;
 import com.example.icebutler_server.global.entity.FridgeRole;
 import com.example.icebutler_server.global.util.AwsS3ImageUrlUtil;
-import com.example.icebutler_server.user.entity.User;
 import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;
-import lombok.NoArgsConstructor;
 
 @Data
-@AllArgsConstructor
-@NoArgsConstructor
 @Builder
-@Schema(name = "FridgeUserRes", description = "냉장고 유저 정보")
+@Schema(name = "냉장고 유저 정보", description = "FridgeUserRe")
 public class FridgeUserRes {
-    @Schema(name = "userId", description = "유저 ID")
+    @Schema(description = "유저 ID", example = "1")
     private Long userId;
-    @Schema(name = "nickname", description = "유저 닉네임")
+    @Schema(description = "유저 닉네임", example = "나야나")
     private String nickname;
-    @Schema(name = "role", description = "냉장고 내 유저 역할")
+    @Schema(description = "냉장고 내 유저 역할", example = "OWNER/MEMBER")
     private FridgeRole role;
-    @Schema(name = "profileImgUrl", description = "유저 프로필 이미지 URL")
+    @Schema(description = "유저 프로필 이미지 URL", example = "https://~/asdfeg.jpg")
     private String profileImgUrl;
 
-    public static FridgeUserRes toDto(User user, FridgeRole role) {
-        FridgeUserRes fridgeUserRes = new FridgeUserRes();
-        fridgeUserRes.userId = user.getId();
-        fridgeUserRes.nickname = user.getNickname();
-        fridgeUserRes.role = role;
-        fridgeUserRes.profileImgUrl = AwsS3ImageUrlUtil.toUrl(user.getProfileImgKey());
-        return fridgeUserRes;
+    public static FridgeUserRes toDto(FridgeUser fridgeUser) {
+        return FridgeUserRes.builder()
+                .userId(fridgeUser.getUser().getId())
+                .nickname(fridgeUser.getUser().getNickname())
+                .role(fridgeUser.getRole())
+                .profileImgUrl(AwsS3ImageUrlUtil.toUrl(fridgeUser.getUser().getProfileImgKey()))
+                .build();
     }
-
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/GetFridgesMainRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/GetFridgesMainRes.java
deleted file mode 100644
index c5f20d3..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/GetFridgesMainRes.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.fridge.entity.FridgeUser;
-import com.example.icebutler_server.global.exception.BaseException;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static com.example.icebutler_server.global.exception.ReturnCode.NOT_FOUND_FRIDGE_USER;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Schema(name = "GetFridgesMainRes", description = "마이냉장고 정보")
-public class GetFridgesMainRes {
-  @Schema(name = "fridgeList", description = "가정용 냉장고 정보")
-  List<FridgeRes> fridgeList;
-
-  public static GetFridgesMainRes toDto(List<List<FridgeUser>> fridgeUserListList, Long userId) {
-    GetFridgesMainRes getFridgesMainRes = new GetFridgesMainRes();
-
-    List<FridgeUser> fridgeUsers = fridgeUserListList.stream().map(m -> m.stream().filter(f -> f.getUser().getId().equals(userId)).findAny().orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_USER))).collect(Collectors.toList());
-    getFridgesMainRes.fridgeList = fridgeUsers.stream().map(m -> FridgeRes.toDto(m.getFridge(), fridgeUserListList)).collect(Collectors.toList());
-
-    return getFridgesMainRes;
-  }
-}
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index c4a1a4c..c14ff1f 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -24,10 +24,6 @@ public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     Optional<FridgeUser> findByFridgeIdAndUserIdAndIsEnable(Long fridgeId, Long userId, boolean isEnable);
 
-    List<FridgeUser> findByFridgeAndIsEnableOrderByRoleDesc(Fridge fridge, Boolean isEnable);
-
-    List<FridgeUser> findByUserAndIsEnable(User user, Boolean status);
-
     Optional<FridgeUser> findByUserIdAndIsEnable(Long userId, Boolean status);
 
     Optional<FridgeUser> findByFridgeAndUserAndIsEnable(Fridge fridge, User user, Boolean isEnable);
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index b016a0a..4c8ba1f 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -6,18 +6,33 @@
 import org.springframework.data.domain.Pageable;
 
 public interface FridgeService {
-  Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
-  void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
-  void removeFridge(Long fridgeId, Long userId);
-  void removeFridgeUser(Long fridgeId, Long userId);
-  Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long ownerId, String foodName, String category, Pageable pageable);
-  FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId);
-  void addFridgeFood(FridgeFoodsReq fridgeFoodsReq, Long fridgeId, Long userId);
-  void modifyFridgeFood(Long fridgeId, Long fridgeFoodId, FridgeFoodReq fridgeFoodReq, Long userId);
-  void deleteFridgeFood(DeleteFridgeFoodsReq deleteFridgeFoodsReq, String deleteType, Long fridgeId, Long userId);
-  FridgeUserMainRes searchMembers(Long fridgeId, Long userId);
-  FridgeFoodsStatistics getFridgeFoodStatistics(Long fridgeId, String deleteCategory, Long userId, Integer year, Integer month);
-  RecipeFridgeFoodListsRes getFridgeUserFoodList(Long fridgeId, Long userId);
-  MyFridgeRes getMyFridge(Long userId);
-  void notifyFridgeFood();
+    Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
+
+    void modifyFridge(Long fridgeId, EditFridgeReq updateFridgeReq, Long userId);
+
+    void removeFridge(Long fridgeId, Long userId);
+
+    void removeFridgeUser(Long fridgeId, Long userId);
+
+    Page<FridgeFoodsRes> searchFridgeFoods(Long fridgeId, Long ownerId, String foodName, String category, Pageable pageable);
+
+    FridgeFoodRes getFridgeFood(Long fridgeId, Long fridgeFoodId, Long userId);
+
+    void addFridgeFood(FridgeFoodsReq fridgeFoodsReq, Long fridgeId, Long userId);
+
+    void modifyFridgeFood(Long fridgeId, Long fridgeFoodId, FridgeFoodReq fridgeFoodReq, Long userId);
+
+    void deleteFridgeFood(DeleteFridgeFoodsReq deleteFridgeFoodsReq, String deleteType, Long fridgeId, Long userId);
+
+    FridgeUserMainRes searchMembers(Long fridgeId, Long userId);
+
+    FridgeFoodsStatistics getFridgeFoodStatistics(Long fridgeId, String deleteCategory, Long userId, Integer year, Integer month);
+
+    RecipeFridgeFoodListsRes getFridgeUserFoodList(Long fridgeId, Long userId);
+
+    MyFridgeRes getMyFridge(Long userId);
+
+    FridgeInfoRes getFridgeInfo(Long userId, Long fridgeId);
+
+    void notifyFridgeFood();
 }
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 339e42b..3f09397 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -309,16 +309,15 @@ public MyFridgeRes getMyFridge(Long userId) {
         return MyFridgeRes.toDto(fridgeUser);
     }
 
-    public GetFridgesMainRes myFridge(Long userId) {
-        User user = userRepository.findByIdAndIsEnable(userId, true).orElseThrow(() -> new BaseException(NOT_FOUND_USER));
-
-        // 가정용 냉장고 조회
-        List<FridgeUser> fridgeUsers = fridgeUserRepository.findByUserAndIsEnable(user, true);
-        List<Fridge> fridges = fridgeUsers.stream().map(m -> fridgeRepository.findByIdAndIsEnable(m.getFridge().getId(), true).orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE))).collect(Collectors.toList());
-        List<List<FridgeUser>> fridgeUserListList = fridges.stream().map(m -> fridgeUserRepository.findByFridgeAndIsEnableOrderByRoleDesc(m, true)).collect(Collectors.toList());
-
-        return GetFridgesMainRes.toDto(fridgeUserListList, userId);
+    // 냉장고 정보 조회
+    public FridgeInfoRes getFridgeInfo(Long userId, Long fridgeId) {
+        fridgeUserRepository.findByFridgeIdAndUserIdAndIsEnable(fridgeId, userId, true)
+                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE_USER));
+        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true)
+                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
+        List<FridgeUser> fridgeUser = fridgeUserRepository.findByFridgeAndIsEnable(fridge, true);
 
+        return FridgeInfoRes.toDto(fridge, fridgeUser);
     }
 
     //  사용자가 속한 가정용/공용 냉장고 food list

From 61d780fd706841f60b4f0b5e5fcc84d50fa88910 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Sun, 11 Aug 2024 18:23:24 +0900
Subject: [PATCH 09/11] =?UTF-8?q?#334=20refactor:=20=EB=83=89=EC=9E=A5?=
 =?UTF-8?q?=EA=B3=A0=20=EB=A9=A4=EB=B2=84=20=EC=A1=B0=ED=9A=8C=20API=20?=
 =?UTF-8?q?=EB=B0=98=ED=99=98=ED=98=95=ED=83=9C=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../fridge/controller/FridgeController.java   | 15 +++++-----
 .../dto/response/FridgeUserMainRes.java       | 28 -------------------
 .../fridge/dto/response/FridgeUserRes.java    |  2 +-
 .../fridge/dto/response/FridgeUsersRes.java   | 27 ------------------
 .../repository/FridgeUserRepository.java      |  2 ++
 .../fridge/service/FridgeService.java         |  4 ++-
 .../fridge/service/FridgeServiceImpl.java     | 10 ++++---
 7 files changed, 20 insertions(+), 68 deletions(-)
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserMainRes.java
 delete mode 100644 src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUsersRes.java

diff --git a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
index d3eadc3..befaf01 100644
--- a/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
+++ b/src/main/java/com/example/icebutler_server/fridge/controller/FridgeController.java
@@ -21,6 +21,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.util.List;
 
 @RequestMapping("/fridges")
 @RestController
@@ -206,17 +207,17 @@ public ResponseCustom<?> deleteFridgeFood(@RequestBody DeleteFridgeFoodsReq dele
     }
 
     @Operation(summary = "냉장고 멤버 조회", description = "냉장고의 멤버를 조회한다.")
-    @SwaggerApiSuccess(implementation = FridgeUserMainRes.class)
+    @SwaggerApiSuccess(implementation = FridgeUserRes.class)
     @ApiResponses(value = {
-            @ApiResponse(responseCode = "404", description = "(R0000)존재하지 않는 냉장고입니다.",
-                    content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
+            @ApiResponse(responseCode = "403", description = "(G0001)권한이 없습니다.",
+                    content = @Content(schema = @Schema(implementation = ResponseCustom.class)))
     })
     @Auth
-    @GetMapping("{fridgeId}/members")
-    public ResponseCustom<FridgeUserMainRes> getMembers(
+    @GetMapping("/{fridgeId}/members")
+    public ResponseCustom<List<FridgeUserRes>> getFridgeMembers(
             @Parameter(description = "냉장고 ID") @PathVariable Long fridgeId,
             @Parameter(hidden = true) @IsLogin Long userId) {
-        return ResponseCustom.success(fridgeService.searchMembers(fridgeId, userId));
+        return ResponseCustom.success(fridgeService.getFridgeMembers(fridgeId, userId));
     }
 
     @Operation(summary = "내 냉장고 조회", description = "사용자의 냉장고를 조회한다.")
@@ -237,7 +238,7 @@ public ResponseCustom<MyFridgeRes> getMyFridge(
     @SwaggerApiSuccess(implementation = FridgeInfoRes.class)
     @ApiResponses(value = {
             @ApiResponse(responseCode = "404", description = "(R0000)존재하지 않는 냉장고입니다.\t\n" +
-                    "(R0002)해당 냉장고에 존재하지 않는 식품입니다.",
+                    "(R0003)해당 냉장고에 존재하지 않는 사용자입니다.",
                     content = @Content(schema = @Schema(implementation = ResponseCustom.class))),
     })
     @Auth
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserMainRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserMainRes.java
deleted file mode 100644
index dd7aa70..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserMainRes.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.fridge.entity.FridgeUser;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@Schema(name = "FridgeUserMainRes", description = "냉장고 멤버 정보")
-public class FridgeUserMainRes {
-    @Schema(name = "fridgeUsers", description = "냉장고 멤버 정보")
-    List<FridgeUsersRes> fridgeUsers;
-
-    public static FridgeUserMainRes doDto(List<FridgeUser> fridgeUsers){
-        FridgeUserMainRes fridgeUserMainRes=new FridgeUserMainRes();
-        fridgeUserMainRes.fridgeUsers=fridgeUsers.stream().map(cf->FridgeUsersRes.toDto(cf.getUser())).collect(Collectors.toList());
-        return fridgeUserMainRes;
-    }
-
-}
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
index a7e7f22..5d4c928 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
@@ -9,7 +9,7 @@
 
 @Data
 @Builder
-@Schema(name = "냉장고 유저 정보", description = "FridgeUserRe")
+@Schema(name = "냉장고 유저 정보", description = "FridgeUserRes")
 public class FridgeUserRes {
     @Schema(description = "유저 ID", example = "1")
     private Long userId;
diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUsersRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUsersRes.java
deleted file mode 100644
index 3765b38..0000000
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUsersRes.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.example.icebutler_server.fridge.dto.response;
-
-import com.example.icebutler_server.global.util.AwsS3ImageUrlUtil;
-import com.example.icebutler_server.user.entity.User;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-@Data
-@NoArgsConstructor
-@Schema(name = "FridgeUsersRes", description = "냉장고 멤버 정보")
-public class FridgeUsersRes {
-    @Schema(name = "userId", description = "유저 ID")
-    private Long userId;
-    @Schema(name = "nickName", description = "유저 닉네임")
-    private String nickName;
-    @Schema(name = "profileImageUrl", description = "유저 프로필 이미지 URL")
-    private String profileImageUrl;
-
-    public static FridgeUsersRes toDto(User user){
-        FridgeUsersRes fridgeUsersRes=new FridgeUsersRes();
-        fridgeUsersRes.nickName=user.getNickname();
-        fridgeUsersRes.userId =user.getId();
-        fridgeUsersRes.profileImageUrl=AwsS3ImageUrlUtil.toUrl(user.getProfileImgKey());
-        return fridgeUsersRes;
-    }
-}
diff --git a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
index c14ff1f..4984502 100644
--- a/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
+++ b/src/main/java/com/example/icebutler_server/fridge/repository/FridgeUserRepository.java
@@ -14,11 +14,13 @@
 public interface FridgeUserRepository extends JpaRepository<FridgeUser, Long> {
 
     Optional<FridgeUser> findByUserAndFridgeAndIsEnable(User user, Fridge fridge, Boolean isEnable);
+
     Optional<FridgeUser> findByUserIdAndFridgeIdAndIsEnable(Long userId, Long fridgeId, Boolean isEnable);
 
     Optional<FridgeUser> findByFridgeAndUserIdAndRoleAndIsEnable(Fridge fridge, Long userId, FridgeRole fridgeRole, Boolean status);
 
     List<FridgeUser> findByFridgeAndIsEnable(Fridge fridge, Boolean isEnable);
+    List<FridgeUser> findByFridgeIdAndIsEnable(Long fridgeId, Boolean isEnable);
 
     boolean existsByFridgeAndRoleAndIsEnable(Fridge fridge, FridgeRole role, boolean isEnable);
 
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
index 4c8ba1f..12db3e4 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeService.java
@@ -5,6 +5,8 @@
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 
+import java.util.List;
+
 public interface FridgeService {
     Long addFridge(AddFridgeReq registerFridgeReq, Long ownerId);
 
@@ -24,7 +26,7 @@ public interface FridgeService {
 
     void deleteFridgeFood(DeleteFridgeFoodsReq deleteFridgeFoodsReq, String deleteType, Long fridgeId, Long userId);
 
-    FridgeUserMainRes searchMembers(Long fridgeId, Long userId);
+    List<FridgeUserRes> getFridgeMembers(Long fridgeId, Long userId);
 
     FridgeFoodsStatistics getFridgeFoodStatistics(Long fridgeId, String deleteCategory, Long userId, Integer year, Integer month);
 
diff --git a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
index 3f09397..e375730 100644
--- a/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
+++ b/src/main/java/com/example/icebutler_server/fridge/service/FridgeServiceImpl.java
@@ -263,10 +263,12 @@ public void deleteFridgeFood(DeleteFridgeFoodsReq deleteFridgeFoodsReq, String t
 
     @Override
     //냉장고 내 유저 조회
-    public FridgeUserMainRes searchMembers(Long fridgeId, Long userId) {
-        Fridge fridge = fridgeRepository.findByIdAndIsEnable(fridgeId, true)
-                .orElseThrow(() -> new BaseException(NOT_FOUND_FRIDGE));
-        return FridgeUserMainRes.doDto(fridgeUserRepository.findByFridgeAndIsEnable(fridge, true));
+    public List<FridgeUserRes> getFridgeMembers(Long fridgeId, Long userId) {
+        fridgeUserRepository.findByFridgeIdAndUserIdAndIsEnable(fridgeId, userId, true)
+                .orElseThrow(() -> new BaseException(NO_PERMISSION));
+
+        List<FridgeUser> fridgeUsers = fridgeUserRepository.findByFridgeIdAndIsEnable(fridgeId, true);
+        return fridgeUsers.stream().map(FridgeUserRes::toDto).collect(Collectors.toList());
     }
 
     @Override

From ecc44b05857ae99fa9ca15e1c9caa0e952d8ae72 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Mon, 12 Aug 2024 19:36:05 +0900
Subject: [PATCH 10/11] =?UTF-8?q?#334=20docs:=20FridgeUserRes=20=EC=8A=A4?=
 =?UTF-8?q?=EC=9B=A8=EA=B1=B0=EC=97=90=20allowableValues=20=EC=A0=81?=
 =?UTF-8?q?=EC=9A=A9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../icebutler_server/fridge/dto/response/FridgeUserRes.java     | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
index 5d4c928..8d87b30 100644
--- a/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
+++ b/src/main/java/com/example/icebutler_server/fridge/dto/response/FridgeUserRes.java
@@ -15,7 +15,7 @@ public class FridgeUserRes {
     private Long userId;
     @Schema(description = "유저 닉네임", example = "나야나")
     private String nickname;
-    @Schema(description = "냉장고 내 유저 역할", example = "OWNER/MEMBER")
+    @Schema(description = "냉장고 내 유저 역할", allowableValues = {"OWNER", "MEMBER"})
     private FridgeRole role;
     @Schema(description = "유저 프로필 이미지 URL", example = "https://~/asdfeg.jpg")
     private String profileImgUrl;

From 19449c96833e818068b059504cba8489fa5ef181 Mon Sep 17 00:00:00 2001
From: psyeon1120 <psycsh@naver.com>
Date: Mon, 12 Aug 2024 19:38:13 +0900
Subject: [PATCH 11/11] =?UTF-8?q?#334=20rename:=20shelfLife=20->=20expirat?=
 =?UTF-8?q?ionDate=EB=A1=9C=20=ED=8C=8C=EB=9D=BC=EB=AF=B8=ED=84=B0?=
 =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../com/example/icebutler_server/global/util/FridgeUtils.java | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/example/icebutler_server/global/util/FridgeUtils.java b/src/main/java/com/example/icebutler_server/global/util/FridgeUtils.java
index 6e51869..9aa7731 100644
--- a/src/main/java/com/example/icebutler_server/global/util/FridgeUtils.java
+++ b/src/main/java/com/example/icebutler_server/global/util/FridgeUtils.java
@@ -4,8 +4,8 @@
 import java.time.temporal.ChronoUnit;
 
 public abstract class FridgeUtils {
-    public static int calShelfLife(LocalDate shelfLife) {
-        return (int) (-1 * ChronoUnit.DAYS.between(LocalDate.now(), shelfLife));
+    public static int calShelfLife(LocalDate expirationDate) {
+        return (int) (-1 * ChronoUnit.DAYS.between(LocalDate.now(), expirationDate));
     }
 
     public static double calPercentage(int val, int sum) {