diff --git a/build.gradle b/build.gradle index 9a358a68..39f8fcc3 100644 --- a/build.gradle +++ b/build.gradle @@ -62,6 +62,9 @@ dependencies { // runtimeOnly 'com.mysql:mysql-connector-j' runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' + //swagger + implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' + testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.security:spring-security-test' diff --git a/src/main/java/ussum/homepage/application/reaction/controller/PostReactionController.java b/src/main/java/ussum/homepage/application/reaction/controller/PostReactionController.java index 4b94159a..1ce1e33a 100644 --- a/src/main/java/ussum/homepage/application/reaction/controller/PostReactionController.java +++ b/src/main/java/ussum/homepage/application/reaction/controller/PostReactionController.java @@ -1,5 +1,7 @@ package ussum.homepage.application.reaction.controller; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import ussum.homepage.application.reaction.service.PostReactionService; @@ -10,9 +12,16 @@ @RequiredArgsConstructor @RequestMapping @RestController +@Tag(name = "post_reaction", description = "게시물 반응 api") public class PostReactionController { private final PostReactionService postReactionService; + @Operation(summary = "게시물 반응 생성 api", description = """ + 게시물 반응을 등록하기 위한 api입니다. + + 요청 json으로 like 또는 unlike를 받습니다. + + """) @PostMapping("/boards/posts/{postId}/reactions") public ApiResponse createPostReaction(@PathVariable(name = "postId") Long postId, @RequestBody PostReactionCreateRequest postReactionCreateRequest) { @@ -20,6 +29,12 @@ public ApiResponse createPostReaction(@PathVariable(name = "postId") Long return ApiResponse.onSuccess(null); } + @Operation(summary = "게시물 반응 삭제 api", description = """ + 게시물 반응을 삭제하기 위한 api입니다. + + 요청 json으로 like 또는 unlike를 받습니다. + + """) @DeleteMapping("/boards/posts/{postId}/reactions") public ApiResponse deletePostReaction(@PathVariable(name = "postId") Long postId, @RequestBody PostReactionCreateRequest postReactionCreateRequest) { diff --git a/src/main/java/ussum/homepage/application/reaction/service/dto/request/PostReactionCreateRequest.java b/src/main/java/ussum/homepage/application/reaction/service/dto/request/PostReactionCreateRequest.java index caec1f53..29d8170f 100644 --- a/src/main/java/ussum/homepage/application/reaction/service/dto/request/PostReactionCreateRequest.java +++ b/src/main/java/ussum/homepage/application/reaction/service/dto/request/PostReactionCreateRequest.java @@ -1,7 +1,6 @@ package ussum.homepage.application.reaction.service.dto.request; import ussum.homepage.domain.postlike.PostReaction; -import ussum.homepage.domain.reaction.PostCommentReaction; public record PostReactionCreateRequest( String reaction diff --git a/src/main/java/ussum/homepage/global/config/SecurityConfig.java b/src/main/java/ussum/homepage/global/config/SecurityConfig.java index 1b32f8f1..b6961803 100644 --- a/src/main/java/ussum/homepage/global/config/SecurityConfig.java +++ b/src/main/java/ussum/homepage/global/config/SecurityConfig.java @@ -25,8 +25,15 @@ public class SecurityConfig { private final JwtAccessDeniedHandler jwtAccessDeniedHandler; private final JwtAuthenticationEntryPoint jwtAuthenticationEntryPoint; -// private static final String[] whiteList = {"/**"}; - private static final String[] whiteList = {"/auth/**", "/onboarding/**"}; + // private static final String[] whiteList = {"/**"}; + private static final String[] whiteList = { + "/auth/**", + "/onboarding/**", + "/swagger-ui/**", + "/swagger-resources/**", + "/v3/api-docs/**" + }; + @Bean public PasswordEncoder passwordEncoder() { diff --git a/src/main/java/ussum/homepage/infra/config/SwaggerConfig.java b/src/main/java/ussum/homepage/infra/config/SwaggerConfig.java new file mode 100644 index 00000000..84610255 --- /dev/null +++ b/src/main/java/ussum/homepage/infra/config/SwaggerConfig.java @@ -0,0 +1,42 @@ +package ussum.homepage.infra.config; + +import io.swagger.v3.oas.annotations.OpenAPIDefinition; +import io.swagger.v3.oas.models.Components; +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import io.swagger.v3.oas.models.security.SecurityRequirement; +import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +@OpenAPIDefinition( + info = @io.swagger.v3.oas.annotations.info.Info( + title = "SoongSil University IT Support" + ,description = "숭실대학교 IT 지원 위원회" + , version = "v1") +) +public class SwaggerConfig { + private static final String BEARER_TOKEN_PREFIX = "Bearer"; + private static final String JWT = "JWT"; + @Bean + public OpenAPI openAPI() { + SecurityRequirement securityRequirement = new SecurityRequirement().addList(JWT); + Components components = new Components().addSecuritySchemes(JWT, new SecurityScheme() + .name(JWT) + .type(SecurityScheme.Type.HTTP) + .scheme(BEARER_TOKEN_PREFIX) + .bearerFormat(JWT) + ); + return new OpenAPI() + .addServersItem(new Server().url("/")) + .components(new Components()) + .info(new Info()) + .addSecurityItem(securityRequirement) + .components(components); + } +} + + +