From 20c4b5b936e1d850260ea419dcbb7af796653984 Mon Sep 17 00:00:00 2001 From: hs12 Date: Sun, 4 Aug 2024 19:54:06 +0900 Subject: [PATCH 1/5] =?UTF-8?q?[chore]=20Swagger=20=EC=84=A4=EC=A0=95=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 --- build.gradle | 2 + .../gongmuin/common/config/SwaggerConfig.java | 54 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java diff --git a/build.gradle b/build.gradle index 718851cc..abfafea5 100644 --- a/build.gradle +++ b/build.gradle @@ -64,6 +64,8 @@ dependencies { //spring bean validation implementation 'org.springframework.boot:spring-boot-starter-validation' + //swagger + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' } tasks.named('test') { diff --git a/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java new file mode 100644 index 00000000..4631bbbf --- /dev/null +++ b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java @@ -0,0 +1,54 @@ +package com.dnd.gongmuin.common.config; + +import java.util.List; + +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.annotations.info.Info; +import io.swagger.v3.oas.annotations.servers.Server; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; + +@OpenAPIDefinition( + info = @Info( + title = "GongmuIn API", + description = "공무인 API 명세서", + version = "v.1.0"), + servers = { + @Server(url = "https://gongmuin.site", description = "Deploy Server URL"), + @Server(url = "http://localhost:8080", description = "Local Host URL") + } +) +@Configuration +public class SwaggerConfig { + + @Bean + public OpenAPI openAPI() { + SecurityScheme securityScheme = new SecurityScheme() + .type(SecurityScheme.Type.HTTP) + .in(SecurityScheme.In.HEADER) + .name(HttpHeaders.AUTHORIZATION); + SecurityRequirement securityRequirement + = new SecurityRequirement().addList(HttpHeaders.AUTHORIZATION); + + return new OpenAPI() + .components(new Components().addSecuritySchemes(HttpHeaders.AUTHORIZATION, securityScheme)) + .security(List.of(securityRequirement)); + } + + @Bean + public GroupedOpenApi chatOpenApi() { + String[] paths = {"/api/**"}; + + return GroupedOpenApi.builder() + .group("API v.1.0") + .pathsToMatch(paths) + .build(); + } +} From 2e0fd02845b201fa9c9d5a9eaca94ae38e008b9a Mon Sep 17 00:00:00 2001 From: hs12 Date: Sun, 4 Aug 2024 19:55:46 +0900 Subject: [PATCH 2/5] =?UTF-8?q?[feat]=20:=20question-post=20=EB=AA=85?= =?UTF-8?q?=EC=84=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../question_post/controller/QuestionPostController.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/com/dnd/gongmuin/question_post/controller/QuestionPostController.java b/src/main/java/com/dnd/gongmuin/question_post/controller/QuestionPostController.java index e6e5fe16..36c5de44 100644 --- a/src/main/java/com/dnd/gongmuin/question_post/controller/QuestionPostController.java +++ b/src/main/java/com/dnd/gongmuin/question_post/controller/QuestionPostController.java @@ -14,8 +14,12 @@ import com.dnd.gongmuin.question_post.dto.RegisterQuestionPostRequest; import com.dnd.gongmuin.question_post.service.QuestionPostService; +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 = "질문글 API") @RestController @RequiredArgsConstructor @RequestMapping("/api/question-posts") @@ -24,6 +28,8 @@ public class QuestionPostController { private final QuestionPostService questionPostService; @PostMapping + @Operation(summary = "질문글 등록 API", description = "질문글을 등록한다") + @ApiResponse(useReturnTypeSchema = true) public ResponseEntity registerQuestionPost( @RequestBody RegisterQuestionPostRequest request, @AuthenticationPrincipal Member member @@ -33,6 +39,8 @@ public ResponseEntity registerQuestionPost( } @GetMapping("/{questionPostId}") + @Operation(summary = "질문글 상세 조회 API", description = "질문글을 아이디로 상세조회한다.") + @ApiResponse(useReturnTypeSchema = true) public ResponseEntity getQuestionPostById( @PathVariable("questionPostId") Long questionPostId ) { From c7d8404a1dee47126948feae3883a43bd61179c6 Mon Sep 17 00:00:00 2001 From: hs12 Date: Sun, 4 Aug 2024 22:40:18 +0900 Subject: [PATCH 3/5] =?UTF-8?q?[chore]=20:=20swagger=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=20=EA=B6=8C=ED=95=9C=20=EB=B6=80=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dnd/gongmuin/security/config/SecurityConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java index 029e45ae..8c38fded 100644 --- a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java +++ b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java @@ -47,6 +47,8 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { .authorizeHttpRequests( (auth) -> auth .requestMatchers("/").permitAll() + .requestMatchers("/api/**").permitAll() + .requestMatchers("/swagger-ui/**","/v3/api-docs/**").permitAll() .requestMatchers("/api/auth/signin/kakao").permitAll() .requestMatchers("/api/auth/member").permitAll() .requestMatchers("/api/auth/check-email").permitAll() From 6e707bd5f1c9f5fcb495f132b2a211c7565b7fe4 Mon Sep 17 00:00:00 2001 From: hs12 Date: Sun, 4 Aug 2024 22:40:46 +0900 Subject: [PATCH 4/5] =?UTF-8?q?[chore]=20:=20scheme=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java index 4631bbbf..faee5d11 100644 --- a/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java +++ b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java @@ -32,6 +32,8 @@ public class SwaggerConfig { public OpenAPI openAPI() { SecurityScheme securityScheme = new SecurityScheme() .type(SecurityScheme.Type.HTTP) + .scheme("bearer") + .bearerFormat("JWT") .in(SecurityScheme.In.HEADER) .name(HttpHeaders.AUTHORIZATION); SecurityRequirement securityRequirement From 6d3b684dff531edd31e396a475bf35e450a577dd Mon Sep 17 00:00:00 2001 From: hs12 Date: Sun, 4 Aug 2024 22:41:23 +0900 Subject: [PATCH 5/5] =?UTF-8?q?[style]=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=A6=AC=ED=8F=AC=EB=A9=A7=ED=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/dnd/gongmuin/security/config/SecurityConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java index 8c38fded..1b0a5796 100644 --- a/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java +++ b/src/main/java/com/dnd/gongmuin/security/config/SecurityConfig.java @@ -48,7 +48,7 @@ public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { (auth) -> auth .requestMatchers("/").permitAll() .requestMatchers("/api/**").permitAll() - .requestMatchers("/swagger-ui/**","/v3/api-docs/**").permitAll() + .requestMatchers("/swagger-ui/**", "/v3/api-docs/**").permitAll() .requestMatchers("/api/auth/signin/kakao").permitAll() .requestMatchers("/api/auth/member").permitAll() .requestMatchers("/api/auth/check-email").permitAll()