diff --git a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/SwaggerConfig.java b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/SwaggerConfig.java index a99e062..24454c6 100644 --- a/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/SwaggerConfig.java +++ b/app/kac-app/src/main/java/kr/co/palnet/kac/app/config/SwaggerConfig.java @@ -7,6 +7,7 @@ import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; import lombok.extern.slf4j.Slf4j; +import org.springdoc.core.models.GroupedOpenApi; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -90,8 +91,22 @@ public class SwaggerConfig { .version("1.0") .description("PAV API") ); - } + @Bean + public GroupedOpenApi commonCode() { + return GroupedOpenApi.builder() + .group("공통-코드") + .pathsToMatch("/v1/com/code/**") + .build(); + } + + @Bean + public GroupedOpenApi selectAll() { + return GroupedOpenApi.builder() + .group("All") + .pathsToMatch("/**") + .build(); + } } diff --git a/app/kac-app/src/main/resources/application-swagger.yml b/app/kac-app/src/main/resources/application-swagger.yml index 8d7c6d9..985171e 100644 --- a/app/kac-app/src/main/resources/application-swagger.yml +++ b/app/kac-app/src/main/resources/application-swagger.yml @@ -3,9 +3,6 @@ springdoc: path: /api-docs groups: enabled: true -# 해당 패턴에 매칭되는 controller만 swagger-ui에 노출한다. -# paths-to-match: -# - /api/** # paths-to-exclude: # - /api/v1/utm # - /api/bas/flight/** @@ -17,7 +14,7 @@ springdoc: path: /index.html display-request-duration: true - groups-order: DESC + groups-order: ASC # 태그 정렬 순서. # alpha: 알파벳 순 정렬 @@ -27,7 +24,7 @@ springdoc: # 컨트롤러 정렬 순서. # method는 delete - get - patch - post - put 순으로 정렬된다. # alpha를 사용해 알파벳 순으로 정렬할 수 있다. - operations-sorter: method + operations-sorter: alpha # Spring Actuator의 endpoint까지 보여줄 것인지? show-actuator: false diff --git a/app/kac-app/src/main/resources/application.yml b/app/kac-app/src/main/resources/application.yml index 842a141..92f5077 100644 --- a/app/kac-app/src/main/resources/application.yml +++ b/app/kac-app/src/main/resources/application.yml @@ -2,6 +2,7 @@ spring: profiles: include: - database + - swagger threads: virtual: enabled: true diff --git a/web/api-com/build.gradle b/web/api-com/build.gradle index 449ecc7..6d3c4dc 100644 --- a/web/api-com/build.gradle +++ b/web/api-com/build.gradle @@ -4,6 +4,7 @@ dependencies { implementation("$boot:spring-boot-starter-web") implementation("org.springframework.data:spring-data-commons") + compileOnly 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' implementation project(":data-com") } diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java index 49e5c8d..0ea034f 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/controller/ComCodeController.java @@ -1,13 +1,35 @@ package kr.co.palnet.kac.api.v1.com.code.controller; -import kr.co.palnet.kac.api.v1.com.code.model.*; +import java.util.List; + +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.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.enums.ParameterIn; +import io.swagger.v3.oas.annotations.tags.Tag; +import kr.co.palnet.kac.api.v1.com.code.model.CodeDTO; +import kr.co.palnet.kac.api.v1.com.code.model.CodeGroupDTO; +import kr.co.palnet.kac.api.v1.com.code.model.CodeGroupRS; +import kr.co.palnet.kac.api.v1.com.code.model.CodeLangDTO; +import kr.co.palnet.kac.api.v1.com.code.model.CodeRS; +import kr.co.palnet.kac.api.v1.com.code.model.FormCodeGroupRQ; +import kr.co.palnet.kac.api.v1.com.code.model.FormCodeLangRQ; +import kr.co.palnet.kac.api.v1.com.code.model.FormCodeRQ; +import kr.co.palnet.kac.api.v1.com.code.model.SearchCodeAllRQ; +import kr.co.palnet.kac.api.v1.com.code.model.SearchCodeRQ; import kr.co.palnet.kac.api.v1.com.code.service.ComCodeService; import lombok.RequiredArgsConstructor; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; - -import java.util.List; +@Tag(name = "공통 - 코드", description = "코드 관련 API") @RequiredArgsConstructor @RequestMapping("/v1/com/code") @RestController @@ -18,6 +40,7 @@ public class ComCodeController { /* 사용 용도 */ // 전체 코드 조회 - 코드그룹-코드-언어 @GetMapping("/all") + @Operation(summary = "전체 코드 조회", description = "전체 코드를 조회합니다.") public ResponseEntity> getAllGroup(SearchCodeAllRQ rq) { List allCode = comCodeService.getAllGroup(rq); return ResponseEntity.ok(allCode); @@ -25,6 +48,7 @@ public class ComCodeController { // 그룹 목록 조회 - 코드 그룹만 @GetMapping("/group") + @Operation(summary = "코드 그룹 조회", description = "코드 그룹을 조회합니다.") public ResponseEntity> getAllGroupCode() { List codeGroupRSList = comCodeService.getAllGroupCode(); return ResponseEntity.ok(codeGroupRSList); @@ -32,6 +56,7 @@ public class ComCodeController { // 코드 목록 조회 - 코드 - 언어 @GetMapping("/code") + @Operation(summary = "코드 목록 조회", description = "코드 목록을 조회합니다.") public ResponseEntity> getAllCodeByGroup(SearchCodeRQ rq) { List list = comCodeService.getAllCodeByGroup(rq); return ResponseEntity.ok(list); @@ -40,6 +65,7 @@ public class ComCodeController { /* 관리 용도 */ // 코드 그룹 등록 @PostMapping("/group") + @Operation(summary = "코드 그룹 등록", description = "코드 그룹을 등록합니다.") public ResponseEntity createCodeGroup(@RequestBody FormCodeGroupRQ rq) { CodeGroupDTO codeGroup = comCodeService.createCodeGroup(rq); return ResponseEntity.ok(codeGroup); @@ -47,6 +73,7 @@ public class ComCodeController { // 코드 등록 @PostMapping("/code") + @Operation(summary = "코드 등록", description = "코드를 등록합니다.") public ResponseEntity createCode(@RequestBody FormCodeRQ rq) { CodeDTO code = comCodeService.createCode(rq); return ResponseEntity.ok(code); @@ -54,6 +81,7 @@ public class ComCodeController { // 언어 등록 @PostMapping("/lang") + @Operation(summary = "언어 등록", description = "언어를 등록합니다.") public ResponseEntity createCodeLang(@RequestBody FormCodeLangRQ rq) { CodeLangDTO lang = comCodeService.createCodeLang(rq); return ResponseEntity.ok(lang); @@ -61,6 +89,7 @@ public class ComCodeController { // 코드 그룹 수정 @PutMapping("/group") + @Operation(summary = "코드 그룹 수정", description = "코드 그룹을 수정합니다.") public ResponseEntity updateCodeGroup(@RequestBody FormCodeGroupRQ rq) { CodeGroupDTO codeGroup = comCodeService.updateCodeGroup(rq); return ResponseEntity.ok(codeGroup); @@ -68,6 +97,7 @@ public class ComCodeController { // 코드 수정 @PutMapping("/code") + @Operation(summary = "코드 수정", description = "코드를 수정합니다.") public ResponseEntity updateCode(@RequestBody FormCodeRQ rq) { CodeDTO code = comCodeService.updateCode(rq); return ResponseEntity.ok(code); @@ -75,6 +105,7 @@ public class ComCodeController { // 언어 수정 @PutMapping("/lang") + @Operation(summary = "언어 수정", description = "언어를 수정합니다.") public ResponseEntity updateCodeLang(@RequestBody FormCodeLangRQ rq) { CodeLangDTO lang = comCodeService.updateCodeLang(rq); return ResponseEntity.ok(lang); @@ -82,24 +113,27 @@ public class ComCodeController { // 코드 그룹 삭제 @DeleteMapping("/group") - public void deleteCodeGroup(@RequestParam("groupCd") String groupCd) { + @Operation(summary = "코드 그룹 삭제", description = "코드 그룹을 삭제합니다.") + public void deleteCodeGroup(@Parameter(name="groupCd", description = "삭제할 그룹 코드", in = ParameterIn.QUERY, example = "NEW_GROUP001") @RequestParam("groupCd") String groupCd) { comCodeService.deleteCodeGroup(groupCd); } // 코드 삭제 @DeleteMapping("/code") + @Operation(summary = "코드 삭제", description = "코드를 삭제합니다.") public void deleteCode( - @RequestParam("groupCd") String groupCd, - @RequestParam("cdId") String cdId) { + @Parameter(name="groupCd", description = "그룹 코드", in = ParameterIn.QUERY, example = "NEW_GROUP001") @RequestParam("groupCd") String groupCd, + @Parameter(name="cdId", description = "삭제할 코드 아이디", in = ParameterIn.QUERY, example = "NEW_CODE001") @RequestParam("cdId") String cdId) { comCodeService.deleteCode(groupCd, cdId); } // 언어 삭제 @DeleteMapping("/lang") + @Operation(summary = "언어 삭제", description = "언어를 삭제합니다.") public void deleteLang( - @RequestParam("groupCd") String groupCd, - @RequestParam("cdId") String cdId, - @RequestParam("langDivCd") String langDivCd) { + @Parameter(name="groupCd", description = " 그룹 코드", in = ParameterIn.QUERY, example = "NEW_GROUP001") @RequestParam("groupCd") String groupCd, + @Parameter(name="cdId", description = "코드 아이디", in = ParameterIn.QUERY, example = "NEW_CODE001") @RequestParam("cdId") String cdId, + @Parameter(name="langDivCd", description = "삭제할 언어 코드", in = ParameterIn.QUERY, example = "ko_KR") @RequestParam("langDivCd") String langDivCd) { comCodeService.deleteLang(groupCd, cdId, langDivCd); } diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeGroupRQ.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeGroupRQ.java index ae252ef..870ea69 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeGroupRQ.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeGroupRQ.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.api.v1.com.code.model; +import io.swagger.v3.oas.annotations.media.Schema; import kr.co.palnet.kac.data.com.domain.ComCdGroupBas; import lombok.AllArgsConstructor; import lombok.Builder; @@ -12,13 +13,16 @@ import lombok.NoArgsConstructor; @Builder public class FormCodeGroupRQ { - // 그룹코드 + @Schema(description = "그룹 코드", example = "NEW_GROUP001") private String groupCd; - // 사이트코드 + + @Schema(description = "사이트 코드", example = "KAC") private String siteCd; - // 그룹코드명 + + @Schema(description = "그룹코드명", example = "신규그룹001") private String groupCdNm; - // 비고 + + @Schema(description = "비고", example = "비고....") private String rm; public ComCdGroupBas toEntity() { diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeLangRQ.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeLangRQ.java index 5fb0aa9..415206f 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeLangRQ.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeLangRQ.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.api.v1.com.code.model; +import io.swagger.v3.oas.annotations.media.Schema; import kr.co.palnet.kac.data.com.domain.ComCdLangCtg; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,18 +14,23 @@ import lombok.NoArgsConstructor; public class FormCodeLangRQ { // 그룹코드 + @Schema(description = "그룹 코드", example = "NEW_GROUP001") private String groupCd; // 코드ID + @Schema(description = "코드 ID", example = "NEW_CODE001") private String cdId; // 언어구분코드 + @Schema(description = "언어 구분 코드", example = "ko_KR") private String langDivCd; // 코드명 + @Schema(description = "코드명", example = "신규코드001") private String cdNm; // 비고 + @Schema(description = "비고", example = "비고....") private String rm; public ComCdLangCtg toEntity() { diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeRQ.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeRQ.java index 0aa740f..cb17f2d 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeRQ.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/FormCodeRQ.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.api.v1.com.code.model; +import io.swagger.v3.oas.annotations.media.Schema; import kr.co.palnet.kac.data.com.domain.ComCdBas; import lombok.AllArgsConstructor; import lombok.Builder; @@ -13,21 +14,27 @@ import lombok.NoArgsConstructor; public class FormCodeRQ { // 코드ID, 그룹코드 + @Schema(description = "그룹 코드", example = "NEW_GROUP001") private String groupCd; // 코드ID + @Schema(description = "코드 ID", example = "NEW_CODE001") private String cdId; // 상위코드 + @Schema(description = "상위 코드", example = "null", hidden = true) private String upperCd; // 정렬순서 + @Schema(description = "정렬 순서", example = "0") private Integer sortOrdr; // 추가정보값 + @Schema(description = "추가 정보값", example = "추가!!") private String addInfoValue; // 사용여부 + @Schema(description = "사용 여부", example = "Y") private String useYn; public ComCdBas toEntity() { diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeAllRQ.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeAllRQ.java index 6c16327..4f5b24e 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeAllRQ.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeAllRQ.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.api.v1.com.code.model; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,6 +11,10 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @Builder public class SearchCodeAllRQ { + + @Schema(description = "사이트 코드", example = "KAC") private String siteCd; + + @Schema(description = "언어 코드", example = "ko_KR") private String langDivCd; } diff --git a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeRQ.java b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeRQ.java index 687e4d9..b75fff2 100644 --- a/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeRQ.java +++ b/web/api-com/src/main/java/kr/co/palnet/kac/api/v1/com/code/model/SearchCodeRQ.java @@ -1,5 +1,6 @@ package kr.co.palnet.kac.api.v1.com.code.model; +import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -10,6 +11,11 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @Builder public class SearchCodeRQ { + + @Schema(description = "그룹 코드", example = "TEST1") private String groupCd; + + @Schema(description = "언어 코드", example = "ko_KR") private String langDivCd; + }