package com.interplug.qcast.config.swagger; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.media.StringSchema; import io.swagger.v3.oas.models.parameters.Parameter; import io.swagger.v3.oas.models.servers.Server; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springdoc.core.customizers.OpenApiCustomizer; import org.springdoc.core.models.GroupedOpenApi; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; @Configuration @RequiredArgsConstructor @Slf4j public class SwaggerConfig { @Autowired Environment env; @Value("${swagger.url}") private String swaggerUrl; @Bean public OpenAPI baseApi() { String activeProfile = env.getProperty("spring.profiles.active"); if (log.isDebugEnabled()) { log.debug("Active profile: {}", activeProfile); } Server server = new Server(); server.setUrl(swaggerUrl); OpenAPI openAPI = new OpenAPI(); openAPI .info(new Info().title("QCast API").version("1.0").description("QCast API Documentation")) .addServersItem(server); return openAPI; } @Bean public GroupedOpenApi allApi() { return GroupedOpenApi.builder() .group("ALL") .packagesToScan("com.interplug.qcast.biz") .addOpenApiCustomizer(openApiCustomizer()) .build(); } @Bean public OpenApiCustomizer openApiCustomizer() { Parameter lang = new Parameter() .name("lang") .description("Language") .in("header") .schema(new StringSchema()); return openApi -> openApi .getPaths() .values() .forEach( pathItem -> pathItem .readOperations() .forEach(operation -> operation.addParametersItem(lang))); } }