From 42ef25b00e52b941f3db33a9702ffd67df243278 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:17:34 +0900 Subject: [PATCH 01/28] =?UTF-8?q?feat(Menu):=20isSoldOut,=20deleted=20?= =?UTF-8?q?=EC=B9=BC=EB=9F=BC=20=EB=B0=8F=20Update,=20Delete=20=EC=9C=84?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/menu/entity/Menu.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/domain-menu/src/main/java/com/example/menu/entity/Menu.java b/domain-menu/src/main/java/com/example/menu/entity/Menu.java index 5ac6ceef..711bc779 100644 --- a/domain-menu/src/main/java/com/example/menu/entity/Menu.java +++ b/domain-menu/src/main/java/com/example/menu/entity/Menu.java @@ -29,13 +29,28 @@ public class Menu extends BaseTimeEntity { private String name; private String description; private Integer price; + private Boolean isSoldOut; + private Boolean deleted; - public Menu(LocalDateTime createdAt, Long id, Long storeId, String name, String description, Integer price) { + + public Menu(LocalDateTime createdAt, Long id, Long storeId, String name, String description, Integer price, Boolean isSoldOut, Boolean deleted) { super(createdAt); this.Id = id; this.storeId = storeId; this.name = name; this.description = description; this.price = price; + this.isSoldOut = isSoldOut != null ? isSoldOut : false; + this.deleted = deleted != null ? deleted : false; + } + + public void updateInfo(String name, String description, Integer price) { + if (name != null) this.name = name; + if (description != null) this.description = description; + if (price != null) this.price = price; } + + public void markAsDeleted() { this.deleted = true; } + + public void toggleSoldOut() { this.isSoldOut = !this.isSoldOut; } } From e45d52435aa18f14e6d9d2fc05bd5d13bad10fe3 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:18:05 +0900 Subject: [PATCH 02/28] =?UTF-8?q?feat(Menu):=20Update,=20Delete=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/controller/MenuController.java | 56 ++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java index eb7523b7..cba03e7a 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java @@ -2,7 +2,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -11,6 +13,7 @@ import com.example.apiadmin.menu.dto.MenuCreateRequest; import com.example.apiadmin.menu.dto.MenuCreateResponse; +import com.example.apiadmin.menu.dto.MenuUpdateRequest; import com.example.apiadmin.menu.service.MenuService; import com.nowaiting.common.api.ApiUtils; @@ -43,7 +46,58 @@ public ResponseEntity getMenusByStoreId(@PathVariable Long storeId) { .status(HttpStatus.OK) .body( ApiUtils.success( - menuService.getMenusByStoreId(storeId) + menuService.getAllMenusByStoreId(storeId) + ) + ); + } + + @GetMapping("/{storeId}/{menuId}") + public ResponseEntity getMenuById( + @PathVariable Long storeId, + @PathVariable Long menuId + ) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + menuService.getMenuById(storeId, menuId) + ) + ); + } + + + @PatchMapping("/update/{menuId}") + public ResponseEntity updateMenu( + @PathVariable Long menuId, + @Valid @RequestBody MenuUpdateRequest request + ) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + menuService.updateMenu(menuId, request) + ) + ); + } + + @DeleteMapping("/delete/{menuId}") + public ResponseEntity deleteMenu(@PathVariable Long menuId) { + return ResponseEntity + .status(HttpStatus.NO_CONTENT) + .body( + ApiUtils.success( + menuService.deleteMenu(menuId) + ) + ); + } + + @PatchMapping("/toggle-soldout/{menuId}") + public ResponseEntity toggleSoldOut(@PathVariable Long menuId) { + return ResponseEntity + .status(HttpStatus.NO_CONTENT) + .body( + ApiUtils.success( + menuService.toggleSoldOut(menuId) ) ); } From 512974f72311417e5329f775ad7b6f573b96cc1a Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:18:28 +0900 Subject: [PATCH 03/28] =?UTF-8?q?feat(Menu):=20isSoldOut,=20deleted=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/apiadmin/menu/dto/MenuCreateRequest.java | 4 ++++ .../com/example/apiadmin/menu/dto/MenuCreateResponse.java | 4 ++++ .../main/java/com/example/apiadmin/menu/dto/MenuReadDto.java | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java index 518dd06b..5b0dae97 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java @@ -21,6 +21,8 @@ public class MenuCreateRequest { private String description; @NotNull private Integer price; + private Boolean isSoldOut; + private Boolean deleted; public Menu toEntity() { return Menu.builder() @@ -28,6 +30,8 @@ public Menu toEntity() { .name(name) .description(description) .price(price) + .isSoldOut(false) + .deleted(false) .build(); } } diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateResponse.java b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateResponse.java index fccba560..c2d59e7f 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateResponse.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateResponse.java @@ -17,6 +17,8 @@ public class MenuCreateResponse { private String name; private String description; private Integer price; + private Boolean isSoldOut; + private Boolean deleted; private LocalDateTime createdAt; public static MenuCreateResponse fromEntity(Menu menu) { @@ -27,6 +29,8 @@ public static MenuCreateResponse fromEntity(Menu menu) { .name(menu.getName()) .description(menu.getDescription()) .price(menu.getPrice()) + .isSoldOut(menu.getIsSoldOut()) + .deleted(menu.getDeleted()) .build(); } } diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuReadDto.java b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuReadDto.java index 17fd26ee..c369f0fc 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuReadDto.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuReadDto.java @@ -17,6 +17,8 @@ public class MenuReadDto { private String name; private String description; private Integer price; + private Boolean isSoldOut; + private Boolean deleted; private List images; public static MenuReadDto fromEntity(Menu menu, List images) { @@ -26,6 +28,8 @@ public static MenuReadDto fromEntity(Menu menu, List im .name(menu.getName()) .description(menu.getDescription()) .price(menu.getPrice()) + .isSoldOut(menu.getIsSoldOut()) + .deleted(menu.getDeleted()) .images(images) .build(); } From db2d97975b51fe21f4fc034ee817b6651cf8e4c7 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:19:02 +0900 Subject: [PATCH 04/28] =?UTF-8?q?refactor(Menu):=20findAllByStoreId=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20findAllByStoreIdAndDeletedFalse?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/menu/repository/MenuRepository.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java b/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java index 4bdde11d..dc1a485c 100644 --- a/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java +++ b/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java @@ -1,6 +1,7 @@ package com.example.menu.repository; import java.util.List; +import java.util.Optional; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -9,5 +10,6 @@ @Repository public interface MenuRepository extends JpaRepository { - List findAllByStoreId(Long storeId); + List findAllByStoreIdAndDeletedFalse(Long storeId); + Optional findByStoreIdAndIdAndDeletedFalse(Long storeId, Long menuId); } From bd87e5f728e8a0bc9f2523bfd9a212e0fccbbdf6 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:19:18 +0900 Subject: [PATCH 05/28] =?UTF-8?q?feat(Menu):=20Update,=20Delete=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiadmin/menu/service/MenuService.java | 65 +++++++++++++++++-- 1 file changed, 61 insertions(+), 4 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java index eedb55a8..2f3c7375 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java @@ -10,6 +10,7 @@ import com.example.apiadmin.menu.dto.MenuImageUploadResponse; import com.example.apiadmin.menu.dto.MenuReadDto; import com.example.apiadmin.menu.dto.MenuReadResponse; +import com.example.apiadmin.menu.dto.MenuUpdateRequest; import com.example.menu.entity.Menu; import com.example.menu.entity.MenuImage; import com.example.menu.repository.MenuImageRepository; @@ -34,10 +35,10 @@ public MenuCreateResponse createMenu(MenuCreateRequest request) { } @Transactional(readOnly = true) - public MenuReadResponse getMenusByStoreId(Long storeId) { - List menus = menuRepository.findAllByStoreId(storeId); + public MenuReadResponse getAllMenusByStoreId(Long storeId) { + List menus = menuRepository.findAllByStoreIdAndDeletedFalse(storeId); - List menuReadRespons = menus.stream() + List menuReadResponse = menus.stream() .map(menu -> { List images = menuImageRepository.findByMenu(menu); List imageDto = images.stream() @@ -47,6 +48,62 @@ public MenuReadResponse getMenusByStoreId(Long storeId) { }) .toList(); - return MenuReadResponse.of(menuReadRespons); + return MenuReadResponse.of(menuReadResponse); } + + @Transactional(readOnly = true) + public MenuReadDto getMenuById(Long storeId, Long menuId) { + Menu menu = menuRepository.findByStoreIdAndIdAndDeletedFalse(storeId, menuId) + .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); + + List images = menuImageRepository.findByMenu(menu); + List imageDto = images.stream() + .map(MenuImageUploadResponse::fromEntity) + .toList(); + + return MenuReadDto.fromEntity(menu, imageDto); + } + + + @Transactional + public MenuReadDto updateMenu(Long menuId, MenuUpdateRequest request) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); + + menu.updateInfo( + request.getName(), + request.getDescription(), + request.getPrice() + ); + + Menu saved = menuRepository.save(menu); + + List images = menuImageRepository.findByMenu(saved); + List imageDto = images.stream() + .map(MenuImageUploadResponse::fromEntity) + .toList(); + + return MenuReadDto.fromEntity(saved, imageDto); + } + + @Transactional + public String deleteMenu(Long menuId) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); + + menu.markAsDeleted(); + menuRepository.save(menu); + + return "Menu ID " + menuId + " 삭제되었습니다."; + } + + @Transactional + public Boolean toggleSoldOut(Long menuId) { + Menu menu = menuRepository.findById(menuId) + .orElseThrow(() -> new IllegalArgumentException("해당 메뉴가 존재하지 않습니다.")); + + menu.toggleSoldOut(); + return menu.getIsSoldOut(); + } + } From 3629694f8c06cd8a976f6bf0fbda1aa377a9dbd5 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:19:59 +0900 Subject: [PATCH 06/28] =?UTF-8?q?refactor(Menu):=20findAllByStoreIdAndDele?= =?UTF-8?q?tedFalse=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/apiuser/menu/service/MenuService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java b/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java index 64b9e0b9..d1dcec11 100644 --- a/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java +++ b/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java @@ -25,7 +25,7 @@ public class MenuService { @Transactional(readOnly = true) public MenuReadResponse getMenusByStoreId(Long storeId) { - List menus = menuRepository.findAllByStoreId(storeId); + List menus = menuRepository.findAllByStoreIdAndDeletedFalse(storeId); List menuReadResponse = menus.stream() .map(menu -> { From d1042f3159627371957d057bb0248c7cb1b390f7 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:20:23 +0900 Subject: [PATCH 07/28] =?UTF-8?q?feat(Menu):=20Update=20=EA=B8=B0=EB=8A=A5?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=9C=20MenuUpdateRequest=20Dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiadmin/menu/dto/MenuUpdateRequest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuUpdateRequest.java diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuUpdateRequest.java b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuUpdateRequest.java new file mode 100644 index 00000000..bdee0e15 --- /dev/null +++ b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuUpdateRequest.java @@ -0,0 +1,16 @@ +package com.example.apiadmin.menu.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class MenuUpdateRequest { + private String name; + private String description; + private Integer price; +} From d644873a1de4e8780ad950b07229119b80eb475f Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:21:58 +0900 Subject: [PATCH 08/28] =?UTF-8?q?refactor(Store):=20updateInfo=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20toggleAct?= =?UTF-8?q?ive=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/domainstore/entity/Store.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/domain-store/src/main/java/com/example/domainstore/entity/Store.java b/domain-store/src/main/java/com/example/domainstore/entity/Store.java index 47166005..17464734 100644 --- a/domain-store/src/main/java/com/example/domainstore/entity/Store.java +++ b/domain-store/src/main/java/com/example/domainstore/entity/Store.java @@ -58,20 +58,16 @@ public Store(LocalDateTime createdAt, Long storeId, Long departmentId, String na } public void updateInfo(String name, String location, String description) { - this.name = name; - this.location = location; - this.description = description; + if (name != null) this.name = name; + if (location != null) this.location = location; + if (description != null) this.description = description; } public void markAsDeleted() { this.deleted = true; } - public void activate() { - this.isActive = true; - } - - public void deactivate() { - this.isActive = false; + public void toggleActive() { + this.isActive = !this.isActive; } } From 3ad9a764e6ff1aa3d979a34f4a511b3c09ec578c Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:22:22 +0900 Subject: [PATCH 09/28] =?UTF-8?q?feat(Store):=20toggleActive=20=EC=97=94?= =?UTF-8?q?=EB=93=9C=ED=8F=AC=EC=9D=B8=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiadmin/store/controller/StoreController.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java index 29824348..c4fa5422 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java @@ -86,4 +86,15 @@ public ResponseEntity deleteStore(@PathVariable Long storeId) { ) ); } + + @PatchMapping("/toggle-active/{storeId}") + public ResponseEntity toggleActive(@PathVariable Long storeId) { + return ResponseEntity + .status(HttpStatus.NO_CONTENT) + .body( + ApiUtils.success( + storeService.toggleActive(storeId) + ) + ); + } } From 9c431a13ea676c089f28934b9f3c2638b5c05599 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:23:35 +0900 Subject: [PATCH 10/28] =?UTF-8?q?refactor(Store):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20type=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiadmin/store/controller/StoreImageController.java | 5 ++--- .../apiadmin/store/dto/StoreImageUploadResponse.java | 2 -- .../example/apiadmin/store/service/StoreImageService.java | 6 +----- .../java/com/example/domainstore/entity/StoreImage.java | 3 --- 4 files changed, 3 insertions(+), 13 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreImageController.java b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreImageController.java index 531a1bea..61bfbb34 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreImageController.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreImageController.java @@ -28,8 +28,7 @@ public class StoreImageController { @PostMapping("/store-images/{storeId}") public ResponseEntity uploadStoreImage( @PathVariable Long storeId, - @RequestParam("files") List files, - @RequestParam(value = "types") List types + @RequestParam("files") List files ) { // TODO 관련 정책 확정되면 메서드로 분리 예정 // 파일 개수 제한 검증 @@ -46,7 +45,7 @@ public ResponseEntity uploadStoreImage( } } - List response = storeImageService.saveAll(storeId, files, types); + List response = storeImageService.saveAll(storeId, files); return ResponseEntity .status(HttpStatus.CREATED) .body( diff --git a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreImageUploadResponse.java b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreImageUploadResponse.java index 998dd0b5..bbc1d9da 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreImageUploadResponse.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreImageUploadResponse.java @@ -10,13 +10,11 @@ public class StoreImageUploadResponse { private final Long id; private final String imageUrl; - private final String type; public static StoreImageUploadResponse fromEntity(StoreImage storeImage) { return StoreImageUploadResponse.builder() .id(storeImage.getId()) .imageUrl(storeImage.getImageUrl()) - .type(storeImage.getType()) .build(); } } diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreImageService.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreImageService.java index 330f0f9c..1c7bafb4 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreImageService.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreImageService.java @@ -28,10 +28,7 @@ public class StoreImageService { private final S3Service s3Service; @Transactional - public List saveAll(Long storeId, List files, List types) { - if (files.size() != types.size()) { - throw new IllegalArgumentException("파일과 타입의 개수가 일치해야 합니다."); - } + public List saveAll(Long storeId, List files) { String type = "store"; Store store = storeRepository.findById(storeId) @@ -61,7 +58,6 @@ public List saveAll(Long storeId, List .store(store) .imageUrl(uploadResult.url()) .fileKey(uploadResult.key()) - .type(types.get(i)) .build(); storeImageRepository.save(storeImage); diff --git a/domain-store/src/main/java/com/example/domainstore/entity/StoreImage.java b/domain-store/src/main/java/com/example/domainstore/entity/StoreImage.java index 0ced904e..41f0896f 100644 --- a/domain-store/src/main/java/com/example/domainstore/entity/StoreImage.java +++ b/domain-store/src/main/java/com/example/domainstore/entity/StoreImage.java @@ -36,7 +36,4 @@ public class StoreImage extends BaseTimeEntity { @Column(nullable = false, length = 500) private String fileKey; - - @Column(length = 20) - private String type; } From 6105e099351ae62c2bf26db5cf3f66a45016fd0e Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:24:32 +0900 Subject: [PATCH 11/28] =?UTF-8?q?fix(Store):=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/store/dto/StoreReadResponse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java index 5e5d0ebb..ac58fae7 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java @@ -11,12 +11,12 @@ @Builder public class StoreReadResponse { - private List storeReadDtos; + private List storeReadDto; private boolean hasNext; - public static StoreReadResponse of(List storeReadDtos, boolean hasNext) { + public static StoreReadResponse of(List storeReadDto, boolean hasNext) { return StoreReadResponse.builder() - .storeReadDtos(storeReadDtos) + .storeReadDto(storeReadDto) .hasNext(hasNext) .build(); } From 8cf238b6d3f58fac8e53641dcc21e25f444c0a65 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:24:56 +0900 Subject: [PATCH 12/28] =?UTF-8?q?feat(Store):=20toggleActive=20=EB=A9=94?= =?UTF-8?q?=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/store/service/StoreService.java | 1 + .../example/apiadmin/store/service/StoreServiceImpl.java | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java index 00ee1e4a..75fe8b09 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java @@ -18,4 +18,5 @@ public interface StoreService { String deleteStore(Long storeId); + Boolean toggleActive(Long storeId); } diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java index fa04162e..2c04e6e0 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java @@ -103,4 +103,13 @@ public String deleteStore(Long storeId) { return "Store ID " + storeId + " 삭제되었습니다."; } + + @Transactional + public Boolean toggleActive(Long storeId) { + Store store = storeRepository.findById(storeId) + .orElseThrow(() -> new IllegalArgumentException("해당 메뉴가 존재하지 않습니다.")); + + store.toggleActive(); + return store.getIsActive(); + } } From 7f78d6e9581ed3808d7448ff125ad4d08301848b Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Sun, 29 Jun 2025 23:25:24 +0900 Subject: [PATCH 13/28] =?UTF-8?q?refactor(Store):=20toggleActive=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80=EB=A1=9C=20?= =?UTF-8?q?=EC=9D=B8=ED=95=9C=20isActive=20=ED=95=84=EB=93=9C=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/apiadmin/store/dto/StoreUpdateRequest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreUpdateRequest.java b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreUpdateRequest.java index cd104115..bbe0dfdc 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreUpdateRequest.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreUpdateRequest.java @@ -13,5 +13,4 @@ public class StoreUpdateRequest { private String name; private String location; private String description; - private Boolean isActive; } From 36eb65a8085fb982cd60503ab9c97d283f67b5ce Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:14:55 +0900 Subject: [PATCH 14/28] =?UTF-8?q?chore(Store):=20=EC=96=B4=EB=93=9C?= =?UTF-8?q?=EB=AF=BC=EC=97=90=EC=84=9C=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20StoreReadResponse=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiadmin/store/dto/StoreReadResponse.java | 23 ------------------- 1 file changed, 23 deletions(-) delete mode 100644 api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java diff --git a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java b/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java deleted file mode 100644 index ac58fae7..00000000 --- a/api-admin/src/main/java/com/example/apiadmin/store/dto/StoreReadResponse.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.example.apiadmin.store.dto; - -import java.util.List; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; - -@Getter -@AllArgsConstructor -@Builder -public class StoreReadResponse { - - private List storeReadDto; - private boolean hasNext; - - public static StoreReadResponse of(List storeReadDto, boolean hasNext) { - return StoreReadResponse.builder() - .storeReadDto(storeReadDto) - .hasNext(hasNext) - .build(); - } -} From d0cd91fd373780cf58071a08e4af7454b59fc8c2 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:15:09 +0900 Subject: [PATCH 15/28] =?UTF-8?q?fix(Store):=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiuser/store/dto/StoreReadResponse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java b/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java index a580e562..de5eeb41 100644 --- a/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java +++ b/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java @@ -11,12 +11,12 @@ @Builder public class StoreReadResponse { - private List storeReadDtos; + private List storeReadDto; private boolean hasNext; - public static StoreReadResponse of(List storeReadDtos, boolean hasNext) { + public static StoreReadResponse of(List storeReadDto, boolean hasNext) { return StoreReadResponse.builder() - .storeReadDtos(storeReadDtos) + .storeReadDto(storeReadDto) .hasNext(hasNext) .build(); } From 0c020bcef5cad2a99bb81da177a4c9696b9ef191 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:15:59 +0900 Subject: [PATCH 16/28] =?UTF-8?q?refactor(Store):=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EC=97=86=EB=8A=94=20getAllStores=20=EB=A9=94=EC=84=9C=EB=93=9C?= =?UTF-8?q?=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../store/controller/StoreController.java | 11 ---------- .../apiadmin/store/service/StoreService.java | 3 --- .../store/service/StoreServiceImpl.java | 21 ------------------- .../apiuser/store/service/StoreService.java | 4 ++++ 4 files changed, 4 insertions(+), 35 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java index c4fa5422..0189c9a8 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java @@ -40,17 +40,6 @@ public ResponseEntity createStore(@Valid @RequestBody StoreCreateRequest requ ); } - @GetMapping("/all-stores") - public ResponseEntity getAllStores() { - return ResponseEntity - .status(HttpStatus.OK) - .body( - ApiUtils.success( - storeService.getAllStores() - ) - ); - } - @GetMapping("/{storeId}") public ResponseEntity getStoreById(@PathVariable Long storeId) { return ResponseEntity diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java index 75fe8b09..6b230d4b 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreService.java @@ -3,15 +3,12 @@ import com.example.apiadmin.store.dto.StoreCreateRequest; import com.example.apiadmin.store.dto.StoreCreateResponse; import com.example.apiadmin.store.dto.StoreReadDto; -import com.example.apiadmin.store.dto.StoreReadResponse; import com.example.apiadmin.store.dto.StoreUpdateRequest; public interface StoreService { StoreCreateResponse createStore(StoreCreateRequest request); - StoreReadResponse getAllStores(); - StoreReadDto getStoreByStoreId(Long storeId); StoreReadDto updateStore(Long storeId, StoreUpdateRequest request); diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java index 2c04e6e0..4c99105a 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java @@ -9,7 +9,6 @@ import com.example.apiadmin.store.dto.StoreCreateResponse; import com.example.apiadmin.store.dto.StoreImageUploadResponse; import com.example.apiadmin.store.dto.StoreReadDto; -import com.example.apiadmin.store.dto.StoreReadResponse; import com.example.apiadmin.store.dto.StoreUpdateRequest; import com.example.domainstore.entity.Store; import com.example.domainstore.entity.StoreImage; @@ -36,26 +35,6 @@ public StoreCreateResponse createStore(StoreCreateRequest request) { return StoreCreateResponse.fromEntity(saved); } - @Override - @Transactional(readOnly = true) - public StoreReadResponse getAllStores() { - List stores = storeRepository.findAllByDeletedFalse(); - - List storeRead = stores.stream() - .map(store -> { - List images = storeImageRepository.findByStore(store); - List imageDto = images.stream() - .map(StoreImageUploadResponse::fromEntity) - .toList(); - return StoreReadDto.fromEntity(store, imageDto); - }) - .toList(); - - boolean hasNext = false; - - return StoreReadResponse.of(storeRead, hasNext); - } - @Override @Transactional(readOnly = true) public StoreReadDto getStoreByStoreId(Long storeId) { diff --git a/api-user/src/main/java/com/example/apiuser/store/service/StoreService.java b/api-user/src/main/java/com/example/apiuser/store/service/StoreService.java index fd90de2a..83ea3467 100644 --- a/api-user/src/main/java/com/example/apiuser/store/service/StoreService.java +++ b/api-user/src/main/java/com/example/apiuser/store/service/StoreService.java @@ -2,6 +2,8 @@ import java.util.List; +import org.springframework.data.domain.Pageable; + import com.example.apiuser.store.dto.StoreReadDto; import com.example.apiuser.store.dto.StoreReadResponse; @@ -9,6 +11,8 @@ public interface StoreService { StoreReadResponse getAllStores(); + public StoreReadResponse getAllStoresByPage(Pageable pageable); + StoreReadDto getStoreByStoreId(Long storeId); List searchStoresByName(String name); From 2f1ea46d1da23bdc0aea0c37d857c3e439e1bac4 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:16:45 +0900 Subject: [PATCH 17/28] =?UTF-8?q?feat(Store):=20getAllStoresByPage=20?= =?UTF-8?q?=EB=A9=94=EC=84=9C=EB=93=9C=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EC=85=98=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../menu/controller/MenuController.java | 16 +++++++++++++- .../apiuser/menu/service/MenuService.java | 15 ++++++++++++- .../store/controller/StoreController.java | 8 +++++++ .../store/service/StoreServiceImpl.java | 21 +++++++++++++++++++ .../repository/StoreRepository.java | 4 ++++ 5 files changed, 62 insertions(+), 2 deletions(-) diff --git a/api-user/src/main/java/com/example/apiuser/menu/controller/MenuController.java b/api-user/src/main/java/com/example/apiuser/menu/controller/MenuController.java index d3fb6d02..d1270ccb 100644 --- a/api-user/src/main/java/com/example/apiuser/menu/controller/MenuController.java +++ b/api-user/src/main/java/com/example/apiuser/menu/controller/MenuController.java @@ -25,7 +25,21 @@ public ResponseEntity getMenusByStoreId(@PathVariable Long storeId) { .status(HttpStatus.OK) .body( ApiUtils.success( - menuService.getMenusByStoreId(storeId) + menuService.getAllMenusByStoreId(storeId) + ) + ); + } + + @GetMapping("/{storeId}/{menuId}") + public ResponseEntity getMenuById( + @PathVariable Long storeId, + @PathVariable Long menuId + ) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + menuService.getMenuById(storeId, menuId) ) ); } diff --git a/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java b/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java index d1dcec11..8763f270 100644 --- a/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java +++ b/api-user/src/main/java/com/example/apiuser/menu/service/MenuService.java @@ -24,7 +24,7 @@ public class MenuService { @Transactional(readOnly = true) - public MenuReadResponse getMenusByStoreId(Long storeId) { + public MenuReadResponse getAllMenusByStoreId(Long storeId) { List menus = menuRepository.findAllByStoreIdAndDeletedFalse(storeId); List menuReadResponse = menus.stream() @@ -39,4 +39,17 @@ public MenuReadResponse getMenusByStoreId(Long storeId) { return MenuReadResponse.of(menuReadResponse); } + + @Transactional(readOnly = true) + public MenuReadDto getMenuById(Long storeId, Long menuId) { + Menu menu = menuRepository.findByStoreIdAndIdAndDeletedFalse(storeId, menuId) + .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); + + List images = menuImageRepository.findByMenu(menu); + List imageDto = images.stream() + .map(MenuImageUploadResponse::fromEntity) + .toList(); + + return MenuReadDto.fromEntity(menu, imageDto); + } } diff --git a/api-user/src/main/java/com/example/apiuser/store/controller/StoreController.java b/api-user/src/main/java/com/example/apiuser/store/controller/StoreController.java index 510b19d7..6a3cba2e 100644 --- a/api-user/src/main/java/com/example/apiuser/store/controller/StoreController.java +++ b/api-user/src/main/java/com/example/apiuser/store/controller/StoreController.java @@ -1,5 +1,6 @@ package com.example.apiuser.store.controller; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; @@ -32,6 +33,13 @@ public ResponseEntity getAllStores() { ); } + @GetMapping("/all-stores/infinite-scroll") + public ResponseEntity getAllStores(Pageable pageable) { + return ResponseEntity + .ok() + .body(ApiUtils.success(storeService.getAllStoresByPage(pageable))); + } + @GetMapping("/{storeId}") public ResponseEntity getStoreById(@PathVariable Long storeId) { return ResponseEntity diff --git a/api-user/src/main/java/com/example/apiuser/store/service/StoreServiceImpl.java b/api-user/src/main/java/com/example/apiuser/store/service/StoreServiceImpl.java index d641f03e..c68657f9 100644 --- a/api-user/src/main/java/com/example/apiuser/store/service/StoreServiceImpl.java +++ b/api-user/src/main/java/com/example/apiuser/store/service/StoreServiceImpl.java @@ -2,6 +2,8 @@ import java.util.List; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.example.apiuser.store.dto.StoreImageUploadResponse; @@ -43,6 +45,25 @@ public StoreReadResponse getAllStores() { return StoreReadResponse.of(storeRead, hasNext); } + @Transactional(readOnly = true) + public StoreReadResponse getAllStoresByPage(Pageable pageable) { + Slice stores = storeRepository.findAllByDeletedFalseOrderByStoreIdDesc(pageable); + + List storeRead = stores.getContent().stream() + .map(store -> { + List images = storeImageRepository.findByStore(store); + List imageDto = images.stream() + .map(StoreImageUploadResponse::fromEntity) + .toList(); + return StoreReadDto.fromEntity(store, imageDto); + }) + .toList(); + + boolean hasNext = stores.hasNext(); + + return StoreReadResponse.of(storeRead, hasNext); + } + @Override @Transactional(readOnly = true) public StoreReadDto getStoreByStoreId(Long storeId) { diff --git a/domain-store/src/main/java/com/example/domainstore/repository/StoreRepository.java b/domain-store/src/main/java/com/example/domainstore/repository/StoreRepository.java index 81a08ac2..1d817652 100644 --- a/domain-store/src/main/java/com/example/domainstore/repository/StoreRepository.java +++ b/domain-store/src/main/java/com/example/domainstore/repository/StoreRepository.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.Optional; +import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.Slice; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -16,4 +18,6 @@ public interface StoreRepository extends JpaRepository { Optional findByStoreIdAndDeletedFalse(Long storeId); List findByNameContainingIgnoreCaseAndDeletedFalse(String name); + + Slice findAllByDeletedFalseOrderByStoreIdDesc(Pageable pageable); } From 3b5a0269e73851cfc334831d8077f9044bc6c426 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:17:05 +0900 Subject: [PATCH 18/28] =?UTF-8?q?feat(Menu):=20isSoldOut,=20deleted=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/apiuser/menu/dto/MenuReadDto.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/api-user/src/main/java/com/example/apiuser/menu/dto/MenuReadDto.java b/api-user/src/main/java/com/example/apiuser/menu/dto/MenuReadDto.java index 98dda1f2..1206b870 100644 --- a/api-user/src/main/java/com/example/apiuser/menu/dto/MenuReadDto.java +++ b/api-user/src/main/java/com/example/apiuser/menu/dto/MenuReadDto.java @@ -17,6 +17,8 @@ public class MenuReadDto { private String name; private String description; private Integer price; + private Boolean isSoldOut; + private Boolean deleted; private List images; public static MenuReadDto fromEntity(Menu menu, List images) { @@ -26,6 +28,8 @@ public static MenuReadDto fromEntity(Menu menu, List im .name(menu.getName()) .description(menu.getDescription()) .price(menu.getPrice()) + .isSoldOut(menu.getIsSoldOut()) + .deleted(menu.getDeleted()) .images(images) .build(); } From 75b11d8d94dddb590786551011ef8dab454facb2 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:17:33 +0900 Subject: [PATCH 19/28] =?UTF-8?q?refactor(Store):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EB=8A=94=20type=20=ED=95=84?= =?UTF-8?q?=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiuser/store/dto/StoreImageUploadResponse.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api-user/src/main/java/com/example/apiuser/store/dto/StoreImageUploadResponse.java b/api-user/src/main/java/com/example/apiuser/store/dto/StoreImageUploadResponse.java index 40cb984d..23a1b224 100644 --- a/api-user/src/main/java/com/example/apiuser/store/dto/StoreImageUploadResponse.java +++ b/api-user/src/main/java/com/example/apiuser/store/dto/StoreImageUploadResponse.java @@ -10,13 +10,11 @@ public class StoreImageUploadResponse { private final Long id; private final String imageUrl; - private final String type; public static StoreImageUploadResponse fromEntity(StoreImage storeImage) { return StoreImageUploadResponse.builder() .id(storeImage.getId()) .imageUrl(storeImage.getImageUrl()) - .type(storeImage.getType()) .build(); } } From 2b2a865cc9b6753a38a3a80d91de6038d236adc7 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:31:01 +0900 Subject: [PATCH 20/28] =?UTF-8?q?refactor(Store):=20200=20OK=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/store/controller/StoreController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java index 0189c9a8..fac4a429 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/controller/StoreController.java @@ -79,7 +79,7 @@ public ResponseEntity deleteStore(@PathVariable Long storeId) { @PatchMapping("/toggle-active/{storeId}") public ResponseEntity toggleActive(@PathVariable Long storeId) { return ResponseEntity - .status(HttpStatus.NO_CONTENT) + .status(HttpStatus.OK) .body( ApiUtils.success( storeService.toggleActive(storeId) From 6aa3d1afce21985280478035cb7f26a94ee9f7ec Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:32:55 +0900 Subject: [PATCH 21/28] =?UTF-8?q?fix(Store):=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EB=84=A4=EC=9D=B4=EB=B0=8D=20=EB=B3=B5=EC=88=98=ED=98=95?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiuser/store/dto/StoreReadResponse.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java b/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java index de5eeb41..a580e562 100644 --- a/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java +++ b/api-user/src/main/java/com/example/apiuser/store/dto/StoreReadResponse.java @@ -11,12 +11,12 @@ @Builder public class StoreReadResponse { - private List storeReadDto; + private List storeReadDtos; private boolean hasNext; - public static StoreReadResponse of(List storeReadDto, boolean hasNext) { + public static StoreReadResponse of(List storeReadDtos, boolean hasNext) { return StoreReadResponse.builder() - .storeReadDto(storeReadDto) + .storeReadDtos(storeReadDtos) .hasNext(hasNext) .build(); } From 0facb5e3e9856be2cc93aa8958bcba1ddc25256a Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:38:26 +0900 Subject: [PATCH 22/28] =?UTF-8?q?fix(Store):=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/store/service/StoreServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java index 4c99105a..ee7be676 100644 --- a/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java +++ b/api-admin/src/main/java/com/example/apiadmin/store/service/StoreServiceImpl.java @@ -86,7 +86,7 @@ public String deleteStore(Long storeId) { @Transactional public Boolean toggleActive(Long storeId) { Store store = storeRepository.findById(storeId) - .orElseThrow(() -> new IllegalArgumentException("해당 메뉴가 존재하지 않습니다.")); + .orElseThrow(() -> new IllegalArgumentException("해당 스토어가 존재하지 않습니다.")); store.toggleActive(); return store.getIsActive(); From f2fe0473072aab6206111f52c7a67a1b92593251 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:41:11 +0900 Subject: [PATCH 23/28] =?UTF-8?q?fix(Menu):=20=ED=95=84=EC=9A=94=EC=97=86?= =?UTF-8?q?=EB=8A=94=20=ED=95=84=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/apiadmin/menu/dto/MenuCreateRequest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java index 5b0dae97..3dc462d2 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/dto/MenuCreateRequest.java @@ -21,8 +21,6 @@ public class MenuCreateRequest { private String description; @NotNull private Integer price; - private Boolean isSoldOut; - private Boolean deleted; public Menu toEntity() { return Menu.builder() From 29a9c8f4b068f2fc31fb06c2aa04055f2e94c772 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:42:08 +0900 Subject: [PATCH 24/28] =?UTF-8?q?fix(Menu):=20toggleSoldOut=20HttpStatus?= =?UTF-8?q?=20200=20OK=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/menu/controller/MenuController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java index cba03e7a..095c2eb4 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java @@ -94,7 +94,7 @@ public ResponseEntity deleteMenu(@PathVariable Long menuId) { @PatchMapping("/toggle-soldout/{menuId}") public ResponseEntity toggleSoldOut(@PathVariable Long menuId) { return ResponseEntity - .status(HttpStatus.NO_CONTENT) + .status(HttpStatus.OK) .body( ApiUtils.success( menuService.toggleSoldOut(menuId) From 5ab51217ce1425873c2f11cda10f99b6e3ff2f33 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:42:52 +0900 Subject: [PATCH 25/28] =?UTF-8?q?fix(Menu):=20deleteMenu=20HttpStatus=2020?= =?UTF-8?q?0=20OK=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/apiadmin/menu/controller/MenuController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java index 095c2eb4..bc709367 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/controller/MenuController.java @@ -83,7 +83,7 @@ public ResponseEntity updateMenu( @DeleteMapping("/delete/{menuId}") public ResponseEntity deleteMenu(@PathVariable Long menuId) { return ResponseEntity - .status(HttpStatus.NO_CONTENT) + .status(HttpStatus.OK) .body( ApiUtils.success( menuService.deleteMenu(menuId) From 3991582abf1db4d755e9461bf5362dca7ee8507c Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:45:31 +0900 Subject: [PATCH 26/28] =?UTF-8?q?refactor(Menu):=20update=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20soft=20delete=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/apiadmin/menu/service/MenuService.java | 2 +- .../main/java/com/example/menu/repository/MenuRepository.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java index 2f3c7375..8c0e6c47 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java @@ -67,7 +67,7 @@ public MenuReadDto getMenuById(Long storeId, Long menuId) { @Transactional public MenuReadDto updateMenu(Long menuId, MenuUpdateRequest request) { - Menu menu = menuRepository.findById(menuId) + Menu menu = menuRepository.findByIdAndDeletedFalse(menuId) .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); menu.updateInfo( diff --git a/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java b/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java index dc1a485c..ca15d517 100644 --- a/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java +++ b/domain-menu/src/main/java/com/example/menu/repository/MenuRepository.java @@ -12,4 +12,5 @@ public interface MenuRepository extends JpaRepository { List findAllByStoreIdAndDeletedFalse(Long storeId); Optional findByStoreIdAndIdAndDeletedFalse(Long storeId, Long menuId); + Optional findByIdAndDeletedFalse(Long menuId); } From d9f8c83d08b3330002d37d4f6c306759fe416d46 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:46:31 +0900 Subject: [PATCH 27/28] =?UTF-8?q?refactor(Menu):=20deleteMenu=20=EC=98=88?= =?UTF-8?q?=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=A9=94=EC=8B=9C=EC=A7=80=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/apiadmin/menu/service/MenuService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java index 8c0e6c47..73c11fd3 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java @@ -89,12 +89,12 @@ public MenuReadDto updateMenu(Long menuId, MenuUpdateRequest request) { @Transactional public String deleteMenu(Long menuId) { Menu menu = menuRepository.findById(menuId) - .orElseThrow(() -> new IllegalArgumentException("Menu not found with id: " + menuId)); + .orElseThrow(() -> new IllegalArgumentException("Menu is already deleted with id: " + menuId)); menu.markAsDeleted(); menuRepository.save(menu); - return "Menu ID " + menuId + " 삭제되었습니다."; + return "Menu with ID " + menuId + " 삭제되었습니다."; } @Transactional From de975c135eaa496ae21ed03d21d3126529935354 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Mon, 30 Jun 2025 00:47:26 +0900 Subject: [PATCH 28/28] =?UTF-8?q?refactor(Menu):=20toggleSoldOut=20save=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/example/apiadmin/menu/service/MenuService.java | 1 + 1 file changed, 1 insertion(+) diff --git a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java index 73c11fd3..cf8fde2d 100644 --- a/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java +++ b/api-admin/src/main/java/com/example/apiadmin/menu/service/MenuService.java @@ -103,6 +103,7 @@ public Boolean toggleSoldOut(Long menuId) { .orElseThrow(() -> new IllegalArgumentException("해당 메뉴가 존재하지 않습니다.")); menu.toggleSoldOut(); + menuRepository.save(menu); return menu.getIsSoldOut(); }