package com.cubetiqs.web.config import com.cubetiqs.web.property.AppProperties import io.swagger.v3.oas.annotations.enums.SecuritySchemeType import io.swagger.v3.oas.annotations.security.SecurityScheme import io.swagger.v3.oas.models.OpenAPI import io.swagger.v3.oas.models.info.Info import io.swagger.v3.oas.models.info.License import org.springdoc.core.GroupedOpenApi import org.springframework.beans.factory.annotation.Autowired import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration import io.swagger.v3.oas.annotations.OpenAPIDefinition import io.swagger.v3.oas.annotations.servers.Server //import org.springdoc.core.SpringDocUtils //import org.springdoc.core.converters.models.Pageable //import javax.servlet.http.HttpServletRequest @Configuration @SecurityScheme( name = "bearerAuth", type = SecuritySchemeType.HTTP, scheme = "bearer", bearerFormat = "JWT", ) @OpenAPIDefinition( servers = [ Server(url = "/") ], ) class OpenApiDocConfig @Autowired constructor( val appProperties: AppProperties, ) { companion object { private val ADMIN_API_PATH get() = "/admin/**" private val DEFAULT_API_PATH get() = "/**" } // init { // SpringDocUtils.getConfig() // .replaceParameterObjectWithClass(org.springframework.data.domain.Pageable::class.java, Pageable::class.java) // .replaceParameterObjectWithClass( // org.springframework.data.domain.PageRequest::class.java, // Pageable::class.java // ) // .removeRequestWrapperToIgnore( // HttpServletRequest::class.java, // org.springframework.data.domain.Pageable::class.java, // org.springframework.data.domain.PageRequest::class.java, // ) // } @Bean fun defaultApi(): GroupedOpenApi { return GroupedOpenApi.builder() .group("default") .pathsToMatch(DEFAULT_API_PATH) .pathsToExclude("/error", ADMIN_API_PATH) .packagesToScan("com.cubetiqs.web") .build() } @Bean fun adminApi(): GroupedOpenApi { return GroupedOpenApi.builder() .group("admin") .pathsToMatch(ADMIN_API_PATH) .build() } @Bean fun cubetiqOpenAPI(): OpenAPI { return OpenAPI() .info( Info().title(appProperties.appName) .description(appProperties.appDescription) .version(appProperties.appVersion) .license(License().name("Apache 2.0").url(appProperties.appLicenseUrl)) ) } }