From 43852076edffcdae73fd3c5b1044dacab11b0b2b Mon Sep 17 00:00:00 2001 From: aeeazip Date: Sun, 4 Jun 2023 21:57:29 +0900 Subject: [PATCH] =?UTF-8?q?docs=20:=20Swagger=20=EC=84=A4=EC=A0=95=20?= =?UTF-8?q?=EB=B0=8F=20API=20=EB=AC=B8=EC=84=9C=ED=99=94=20#51?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TogeDutch/build.gradle | 5 +- .../proj/togedutch/config/SwaggerConfig.java | 66 +++++++++++++++++++ .../togedutch/controller/PostController.java | 12 ++++ .../com/proj/togedutch/dto/PostResDto.java | 18 +++++ .../com/proj/togedutch/dto/UserResDto.java | 1 - 5 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 TogeDutch/src/main/java/com/proj/togedutch/config/SwaggerConfig.java diff --git a/TogeDutch/build.gradle b/TogeDutch/build.gradle index 934709b..96267b3 100644 --- a/TogeDutch/build.gradle +++ b/TogeDutch/build.gradle @@ -55,7 +55,10 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-websocket' implementation 'org.springframework.boot:spring-boot-starter-mail' - // 추가 끝 + // swagger + //https://mvnrepository.com/artifact/io.springfox/springfox-swagger-ui + implementation group: 'io.springfox', name: 'springfox-swagger-ui', version: '2.9.2' + implementation group: 'io.springfox', name: 'springfox-swagger2', version: '2.9.2' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' diff --git a/TogeDutch/src/main/java/com/proj/togedutch/config/SwaggerConfig.java b/TogeDutch/src/main/java/com/proj/togedutch/config/SwaggerConfig.java new file mode 100644 index 0000000..5c38fec --- /dev/null +++ b/TogeDutch/src/main/java/com/proj/togedutch/config/SwaggerConfig.java @@ -0,0 +1,66 @@ +package com.proj.togedutch.config; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; + +@Configuration // 스프링 실행 시 설정파일을 읽어들이기 위한 Annotation +@EnableSwagger2 // Swagger2를 사용한다는 Annotation +public class SwaggerConfig { + //swagger 설정 + public Docket getDocket(String groupName, Predicate predicate) { + return new Docket(DocumentationType.SWAGGER_2) + .groupName(groupName) + .select() + .apis(RequestHandlerSelectors.basePackage("com.proj.togedutch")) + .paths(predicate) + .apis(RequestHandlerSelectors.any()) + .build(); + } + + private ApiInfo apiInfo() { + return new ApiInfoBuilder() + .title("가치더치 Spring Boot REST API") + .version("1.0.0") + .description("JPA 버전 SWAGGER API 입니다.") + .build(); + } + + @Bean + public Docket postAPI() { + return getDocket("공고", Predicates.or( + PathSelectors.regex("/post.*"))); + } + + @Bean + public Docket matchingAPI() { + return getDocket("매칭", Predicates.or( + PathSelectors.regex("/matching.*"))); + } + + @Bean + public Docket likePostAPI() { + return getDocket("관심목록", Predicates.or( + PathSelectors.ant("/user/{userIdx}/likePost.*"))); + } + + @Bean + public Docket chatRoomAPI() { + return getDocket("채팅방", Predicates.or( + PathSelectors.regex("/chatRoom.*"))); + } + + @Bean + public Docket chatAPI() { + return getDocket("채팅", Predicates.or( + PathSelectors.ant("/chatRoom/{chatRoom_id}.*"))); + } +} diff --git a/TogeDutch/src/main/java/com/proj/togedutch/controller/PostController.java b/TogeDutch/src/main/java/com/proj/togedutch/controller/PostController.java index f94ff92..81e13b0 100644 --- a/TogeDutch/src/main/java/com/proj/togedutch/controller/PostController.java +++ b/TogeDutch/src/main/java/com/proj/togedutch/controller/PostController.java @@ -8,6 +8,10 @@ import com.proj.togedutch.service.AWSS3Service; import com.proj.togedutch.service.ChatRoomService; import com.proj.togedutch.service.PostService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -21,6 +25,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/post") +@Api(tags = {"공고 API"}) // Swagger 최상단 Controller 명칭 public class PostController { final Logger logger = LoggerFactory.getLogger(this.getClass()); private final PostService postService; @@ -31,6 +36,7 @@ public class PostController { // 공고 전체 조회 @GetMapping("") + @ApiOperation(value = "공고 전체 조회", notes = "모든 공고를 조회합니다.") public BaseResponse> getAllPosts() { try{ List getPostsRes = postService.findAll(); @@ -42,6 +48,12 @@ public BaseResponse> getAllPosts() { // 공고 생성 (채팅방도 생성) @PostMapping("") + @ApiOperation(value = "공고 생성", notes = "공고와 채팅방을 생성합니다.") + @ApiImplicitParams({ + @ApiImplicitParam(name = "user", value = "공고 생성자의 user_id"), + @ApiImplicitParam(name = "post", value = "공고 생성시 작성한 내용"), + @ApiImplicitParam(name = "file", value = "공고 생성시 첨부한 이미지") + }) public BaseResponse createPost(@RequestParam int user, @RequestPart PostReqDto post, @RequestPart(value="file", required = false) MultipartFile file) throws IOException { String fileUrl = null; int createPostIdx, insertIdx; diff --git a/TogeDutch/src/main/java/com/proj/togedutch/dto/PostResDto.java b/TogeDutch/src/main/java/com/proj/togedutch/dto/PostResDto.java index 76cd880..b308de8 100644 --- a/TogeDutch/src/main/java/com/proj/togedutch/dto/PostResDto.java +++ b/TogeDutch/src/main/java/com/proj/togedutch/dto/PostResDto.java @@ -1,6 +1,7 @@ package com.proj.togedutch.dto; import com.proj.togedutch.domain.Post; +import io.swagger.annotations.ApiModelProperty; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; @@ -10,22 +11,39 @@ @Getter @NoArgsConstructor public class PostResDto { + @ApiModelProperty(example = "공고 생성시 부여된 id") private int post_id; + @ApiModelProperty(example = "제목") private String title; + @ApiModelProperty(example = "첨부한 URL") private String url; + @ApiModelProperty(example = "배달팁") private int delivery_tips; + @ApiModelProperty(example = "최소 주문 금액") private int minimum; + @ApiModelProperty(example = "주문 시간") private String order_time; + @ApiModelProperty(example = "모집 인원") private int num_of_recruits; + @ApiModelProperty(example = "모집된 인원") private int recruited_num; + @ApiModelProperty(example = "공고 상태") private String status; + @ApiModelProperty(example = "최초 작성 시간") private Timestamp created_at; + @ApiModelProperty(example = "마지막으로 수정한 시간") private Timestamp updated_at; + @ApiModelProperty(example = "공고 생성자의 id") private int user_id; + @ApiModelProperty(example = "첨부한 이미지 URL") private String image; + @ApiModelProperty(example = "위도") private Double latitude; + @ApiModelProperty(example = "경도") private Double longitude; + @ApiModelProperty(example = "채팅방 생성시 부여된 id") private Integer chatRoom_id; + @ApiModelProperty(example = "카테고리") private String category; // Entity to Dto diff --git a/TogeDutch/src/main/java/com/proj/togedutch/dto/UserResDto.java b/TogeDutch/src/main/java/com/proj/togedutch/dto/UserResDto.java index b37b97f..16822cb 100644 --- a/TogeDutch/src/main/java/com/proj/togedutch/dto/UserResDto.java +++ b/TogeDutch/src/main/java/com/proj/togedutch/dto/UserResDto.java @@ -38,7 +38,6 @@ public UserResDto(UserRepository.UserInfo user) { this.password = user.getPassword(); this.phone = user.getPhone(); this.image = user.getImage() == null ? null : imageConvert(user.getImage()); - this.image = user.getImage(); this.status = user.getStatus(); this.created_at = user.getCreated_at(); this.updated_at = user.getUpdated_at();