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..faee5d11 --- /dev/null +++ b/src/main/java/com/dnd/gongmuin/common/config/SwaggerConfig.java @@ -0,0 +1,56 @@ +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) + .scheme("bearer") + .bearerFormat("JWT") + .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(); + } +} 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 ) { 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..1b0a5796 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()