diff --git a/build.gradle b/build.gradle index 84f1a4a..8ed774a 100644 --- a/build.gradle +++ b/build.gradle @@ -75,6 +75,9 @@ dependencies { // Sentry implementation 'io.sentry:sentry-spring-boot-starter:4.3.0' + // Swagger (OpenAPI) + implementation 'org.springdoc:springdoc-openapi-ui:1.7.0' + } tasks.named('test') { diff --git a/src/main/java/org/runnect/server/config/swagger/SwaggerConfig.java b/src/main/java/org/runnect/server/config/swagger/SwaggerConfig.java new file mode 100644 index 0000000..0aa5572 --- /dev/null +++ b/src/main/java/org/runnect/server/config/swagger/SwaggerConfig.java @@ -0,0 +1,43 @@ +package org.runnect.server.config.swagger; + +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 org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class SwaggerConfig { + + private static final String ACCESS_TOKEN_HEADER = "accessToken"; + private static final String REFRESH_TOKEN_HEADER = "refreshToken"; + + @Bean + public OpenAPI openAPI() { + SecurityScheme accessTokenScheme = new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name(ACCESS_TOKEN_HEADER); + + SecurityScheme refreshTokenScheme = new SecurityScheme() + .type(SecurityScheme.Type.APIKEY) + .in(SecurityScheme.In.HEADER) + .name(REFRESH_TOKEN_HEADER); + + SecurityRequirement securityRequirement = new SecurityRequirement() + .addList(ACCESS_TOKEN_HEADER) + .addList(REFRESH_TOKEN_HEADER); + + return new OpenAPI() + .info(new Info() + .title("Runnect API") + .description("Runnect 서버 API 문서") + .version("v1")) + .components(new Components() + .addSecuritySchemes(ACCESS_TOKEN_HEADER, accessTokenScheme) + .addSecuritySchemes(REFRESH_TOKEN_HEADER, refreshTokenScheme)) + .addSecurityItem(securityRequirement); + } +}