From fe636df2ffcd28c6344bbd43b1f165d4972bd6af Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Tue, 1 Jul 2025 12:14:53 +0900 Subject: [PATCH 1/3] =?UTF-8?q?doc(Menu):=20swagger=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=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 | 18 ++++++++++++++++++ .../menu/controller/MenuImageController.java | 18 +++++++++++++++++- .../main/java/com/nowait/menu/entity/Menu.java | 13 +++++++++++++ .../java/com/nowait/menu/entity/MenuImage.java | 1 + 4 files changed, 49 insertions(+), 1 deletion(-) diff --git a/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java b/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java index f93eb255..08c6f1bd 100644 --- a/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java +++ b/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuController.java @@ -17,17 +17,25 @@ import com.nowait.applicationadmin.menu.service.MenuService; import com.nowait.common.api.ApiUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +@Tag(name = "Menu API", description = "메뉴 API") @RestController @RequestMapping("/admin/menus") @RequiredArgsConstructor +@Slf4j public class MenuController { private final MenuService menuService; @PostMapping("/create") + @Operation(summary = "메뉴 생성", description = "새로운 메뉴를 생성합니다.") + @ApiResponse(responseCode = "201", description = "메뉴 생성") public ResponseEntity createMenu(@Valid @RequestBody MenuCreateRequest request) { MenuCreateResponse response = menuService.createMenu(request); @@ -41,6 +49,8 @@ public ResponseEntity createMenu(@Valid @RequestBody MenuCreateRequest reques } @GetMapping("/all-menus/stores/{storeId}") + @Operation(summary = "가게의 모든 메뉴 조회", description = "특정 가게의 모든 메뉴를 조회") + @ApiResponse(responseCode = "200", description = "가게의 모든 메뉴 조회") public ResponseEntity getMenusByStoreId(@PathVariable Long storeId) { return ResponseEntity .status(HttpStatus.OK) @@ -52,6 +62,8 @@ public ResponseEntity getMenusByStoreId(@PathVariable Long storeId) { } @GetMapping("/{storeId}/{menuId}") + @Operation(summary = "메뉴 상세 조회", description = "특정 메뉴의 상세 정보를 조회") + @ApiResponse(responseCode = "200", description = "메뉴 상세 조회") public ResponseEntity getMenuById( @PathVariable Long storeId, @PathVariable Long menuId @@ -67,6 +79,8 @@ public ResponseEntity getMenuById( @PatchMapping("/update/{menuId}") + @Operation(summary = "메뉴 수정", description = "특정 메뉴의 정보를 수정합니다.") + @ApiResponse(responseCode = "200", description = "메뉴 수정") public ResponseEntity updateMenu( @PathVariable Long menuId, @Valid @RequestBody MenuUpdateRequest request @@ -81,6 +95,8 @@ public ResponseEntity updateMenu( } @DeleteMapping("/delete/{menuId}") + @Operation(summary = "메뉴 삭제", description = "특정 메뉴를 삭제합니다.") + @ApiResponse(responseCode = "200", description = "메뉴 삭제") public ResponseEntity deleteMenu(@PathVariable Long menuId) { return ResponseEntity .status(HttpStatus.OK) @@ -92,6 +108,8 @@ public ResponseEntity deleteMenu(@PathVariable Long menuId) { } @PatchMapping("/toggle-soldout/{menuId}") + @Operation(summary = "메뉴 판매 중지/재개", description = "특정 메뉴의 판매 상태를 판매 중지 또는 재개로 토글합니다.") + @ApiResponse(responseCode = "200", description = "메뉴 판매 상태 토글") public ResponseEntity toggleSoldOut(@PathVariable Long menuId) { return ResponseEntity .status(HttpStatus.OK) diff --git a/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuImageController.java b/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuImageController.java index 286b3915..5e5b6d20 100644 --- a/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuImageController.java +++ b/application-admin/src/main/java/com/nowait/applicationadmin/menu/controller/MenuImageController.java @@ -14,16 +14,27 @@ import com.nowait.applicationadmin.menu.service.MenuImageService; import com.nowait.common.api.ApiUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +@Tag(name = "Menu Image API", description = "메뉴 이미지 API") @RestController @RequestMapping("/admin/menus") @RequiredArgsConstructor +@Slf4j public class MenuImageController { private final MenuImageService menuImageService; @PostMapping("/images/{menuId}") + @Operation( + summary = "메뉴 이미지 업로드", + description = "특정 메뉴에 대한 이미지를 업로드합니다. 파일 크기는 최대 10MB로 제한됩니다." + ) + @ApiResponse(responseCode = "201", description = "메뉴 이미지 업로드 성공") public ResponseEntity uploadMenuImage( @PathVariable Long menuId, @RequestParam("file") MultipartFile file @@ -40,11 +51,16 @@ public ResponseEntity uploadMenuImage( } @DeleteMapping("/images/{menuImageId}") + @Operation( + summary = "메뉴 이미지 삭제", + description = "특정 메뉴 이미지 ID에 해당하는 이미지를 삭제합니다." + ) + @ApiResponse(responseCode = "200", description = "메뉴 이미지 삭제 성공") public ResponseEntity deleteMenuImage(@PathVariable Long id) { menuImageService.delete(id); return ResponseEntity .status( - HttpStatus.NO_CONTENT + HttpStatus.OK ) .body( ApiUtils diff --git a/domain-menu/src/main/java/com/nowait/menu/entity/Menu.java b/domain-menu/src/main/java/com/nowait/menu/entity/Menu.java index 31b280ae..f1145543 100644 --- a/domain-menu/src/main/java/com/nowait/menu/entity/Menu.java +++ b/domain-menu/src/main/java/com/nowait/menu/entity/Menu.java @@ -3,6 +3,7 @@ import java.time.LocalDateTime; import com.nowait.base.BaseTimeEntity; +import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; @@ -25,11 +26,23 @@ public class Menu extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long Id; + + @Column(nullable = false) private Long storeId; + + @Column(nullable = false) private String name; + + @Column(nullable = true) private String description; + + @Column(nullable = true) private Integer price; + + @Column(nullable = false) private Boolean isSoldOut; + + @Column(nullable = false) private Boolean deleted; diff --git a/domain-menu/src/main/java/com/nowait/menu/entity/MenuImage.java b/domain-menu/src/main/java/com/nowait/menu/entity/MenuImage.java index c7dc602f..b856feab 100644 --- a/domain-menu/src/main/java/com/nowait/menu/entity/MenuImage.java +++ b/domain-menu/src/main/java/com/nowait/menu/entity/MenuImage.java @@ -29,6 +29,7 @@ public class MenuImage extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "menu_id") + @Column(nullable = false) private Menu menu; @Column(nullable = false, length = 500) From 523e608ab33fadd7805e60411cc24f5e0c0cb54c Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Tue, 1 Jul 2025 12:32:56 +0900 Subject: [PATCH 2/3] =?UTF-8?q?doc(Store):=20swagger=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=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 --- .../store/controller/StoreController.java | 17 +++++++++++++++++ .../store/controller/StoreImageController.java | 16 +++++++++++++++- .../java/com/nowait/store/entity/Store.java | 12 +++++++----- .../com/nowait/store/entity/StoreImage.java | 1 + 4 files changed, 40 insertions(+), 6 deletions(-) diff --git a/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java b/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java index f9ee3a27..07a5e63f 100644 --- a/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java +++ b/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java @@ -17,17 +17,26 @@ import com.nowait.applicationadmin.store.service.StoreService; import com.nowait.common.api.ApiUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +@Tag(name = "Store API", description = "주점(Store) API") @RestController @RequestMapping("admin/stores") @RequiredArgsConstructor +@Slf4j public class StoreController { private final StoreService storeService; + // 주점 생성 @PostMapping("/create") + @Operation(summary = "주점 생성", description = "새로운 주점을 생성합니다.") + @ApiResponse(responseCode = "201", description = "주점 생성 성공") public ResponseEntity createStore(@Valid @RequestBody StoreCreateRequest request) { StoreCreateResponse response = storeService.createStore(request); @@ -41,6 +50,8 @@ public ResponseEntity createStore(@Valid @RequestBody StoreCreateRequest requ } @GetMapping("/{storeId}") + @Operation(summary = "주점 조회", description = "주점 ID로 주점을 조회합니다.") + @ApiResponse(responseCode = "200", description = "주점 조회 성공") public ResponseEntity getStoreById(@PathVariable Long storeId) { return ResponseEntity .status(HttpStatus.OK) @@ -52,6 +63,8 @@ public ResponseEntity getStoreById(@PathVariable Long storeId) { } @PatchMapping("/{storeId}") + @Operation(summary = "주점 정보 수정", description = "주점 ID로 주점 정보를 수정합니다.") + @ApiResponse(responseCode = "200", description = "주점 정보 수정 성공") public ResponseEntity updateStore( @PathVariable Long storeId, @Valid @RequestBody StoreUpdateRequest request @@ -66,6 +79,8 @@ public ResponseEntity updateStore( } @DeleteMapping("/{storeId}") + @Operation(summary = "주점 삭제", description = "주점 ID로 주점을 삭제합니다.") + @ApiResponse(responseCode = "200", description = "주점 삭제 성공") public ResponseEntity deleteStore(@PathVariable Long storeId) { return ResponseEntity .ok() @@ -77,6 +92,8 @@ public ResponseEntity deleteStore(@PathVariable Long storeId) { } @PatchMapping("/toggle-active/{storeId}") + @Operation(summary = "주점 활성화/비활성화 토글", description = "주점 ID로 주점의 활성화 상태를 토글합니다.") + @ApiResponse(responseCode = "200", description = "주점 활성화/비활성화 토글 성공") public ResponseEntity toggleActive(@PathVariable Long storeId) { return ResponseEntity .status(HttpStatus.OK) diff --git a/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreImageController.java b/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreImageController.java index b3547d03..61ed67f2 100644 --- a/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreImageController.java +++ b/application-admin/src/main/java/com/nowait/applicationadmin/store/controller/StoreImageController.java @@ -16,8 +16,12 @@ import com.nowait.applicationadmin.store.service.StoreImageService; import com.nowait.common.api.ApiUtils; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +@Tag(name = "Store Image API", description = "주점 이미지 API") @RestController @RequestMapping("/admin/stores") @RequiredArgsConstructor @@ -26,6 +30,11 @@ public class StoreImageController { private final StoreImageService storeImageService; @PostMapping("/store-images/{storeId}") + @Operation( + summary = "주점 이미지 업로드", + description = "주점에 이미지를 업로드합니다. 최대 10개의 이미지 파일을 업로드할 수 있습니다." + ) + @ApiResponse(responseCode = "201", description = "주점 이미지 업로드 성공") public ResponseEntity uploadStoreImage( @PathVariable Long storeId, @RequestParam("files") List files @@ -56,10 +65,15 @@ public ResponseEntity uploadStoreImage( } @DeleteMapping("/store-images/{storeImageId}") + @Operation( + summary = "주점 이미지 삭제", + description = "주점 이미지를 삭제합니다. 이미지 ID를 사용하여 특정 이미지를 삭제할 수 있습니다." + ) + @ApiResponse(responseCode = "200", description = "주점 이미지 삭제 성공") public ResponseEntity deleteStoreImage(@PathVariable Long imageId) { storeImageService.delete(imageId); return ResponseEntity - .status(HttpStatus.NO_CONTENT) + .status(HttpStatus.OK) .body( ApiUtils .success( diff --git a/domain-store/src/main/java/com/nowait/store/entity/Store.java b/domain-store/src/main/java/com/nowait/store/entity/Store.java index abd03960..c1458feb 100644 --- a/domain-store/src/main/java/com/nowait/store/entity/Store.java +++ b/domain-store/src/main/java/com/nowait/store/entity/Store.java @@ -29,21 +29,23 @@ public class Store extends BaseTimeEntity { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long storeId; + @Column(name = "department_id", nullable = false) private Long departmentId; + @Column(nullable = false, length = 200) private String name; + @Column(nullable = true, length = 200) private String location; + @Column(nullable = true, length = 200) private String description; - @Builder.Default @Column(name = "is_active", nullable = false) - private Boolean isActive = false; + private Boolean isActive; - @Builder.Default - @Column - private Boolean deleted = false; + @Column(nullable = false) + private Boolean deleted; public Store(LocalDateTime createdAt, Long storeId, Long departmentId, String name, String location, String description, Boolean isActive, Boolean deleted) { diff --git a/domain-store/src/main/java/com/nowait/store/entity/StoreImage.java b/domain-store/src/main/java/com/nowait/store/entity/StoreImage.java index cddb9ad1..41a7d2a7 100644 --- a/domain-store/src/main/java/com/nowait/store/entity/StoreImage.java +++ b/domain-store/src/main/java/com/nowait/store/entity/StoreImage.java @@ -29,6 +29,7 @@ public class StoreImage extends BaseTimeEntity { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "store_id") + @Column(nullable = false) private Store store; @Column(nullable = false, length = 500) From 61fce6bbf7fea423d16deae27b8bc5c0ed323b85 Mon Sep 17 00:00:00 2001 From: Jihun Kim Date: Tue, 1 Jul 2025 12:33:57 +0900 Subject: [PATCH 3/3] =?UTF-8?q?doc(Store):=20swagger=20=EC=96=B4=EB=85=B8?= =?UTF-8?q?=ED=85=8C=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 --- .../applicationadmin/token/controller/TokenController.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/application-admin/src/main/java/com/nowait/applicationadmin/token/controller/TokenController.java b/application-admin/src/main/java/com/nowait/applicationadmin/token/controller/TokenController.java index ebadba02..be84678e 100644 --- a/application-admin/src/main/java/com/nowait/applicationadmin/token/controller/TokenController.java +++ b/application-admin/src/main/java/com/nowait/applicationadmin/token/controller/TokenController.java @@ -13,9 +13,13 @@ import com.nowait.applicationadmin.token.service.TokenService; import com.nowait.adminsecurity.auth.jwt.JwtUtil; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +@Tag(name = "Token API", description = "토큰 API") @RestController @RequiredArgsConstructor @RequestMapping("/api/refresh-token") @@ -27,7 +31,10 @@ public class TokenController { private long accessTokenExpiration; @Value("${jwt.refresh-token-expiration-ms}") private long refreshTokenExpiration; + @PostMapping + @Operation(summary = "리프레시 토큰", description = "리프레시 토큰을 사용하여 새로운 액세스 토큰과 리프레시 토큰을 발급합니다.") + @ApiResponse(responseCode = "200", description = "새로운 액세스 토큰과 리프레시 토큰 발급 성공") public ResponseEntity refreshToken(@RequestBody RefreshTokenRequest request){ String refreshToken = request.getRefreshToken();