import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import springfox.documentation.builders.*;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
import static com.scb.techx.lending.security.constant.HeadersConstants.ACCESS_TOKEN;
import static com.scb.techx.lending.security.constant.HeadersConstants.PERMISSION_ID;
@Configuration
@EnableSwagger2
public class SwaggerConfig implements WebMvcConfigurer {
@Bean
public Docket produceApi() {
return new Docket(DocumentationType.SWAGGER_2).useDefaultResponseMessages(false)
.globalResponses(HttpMethod.GET, getCustomizedResponseMessages())
.globalResponses(HttpMethod.POST, getCustomizedResponseMessages())
.globalResponses(HttpMethod.PATCH,getCustomizedResponseMessages())
.globalResponses(HttpMethod.DELETE, getCustomizedResponseMessages()).apiInfo(apiInfo())
.select().apis(RequestHandlerSelectors.basePackage(""))
.paths(PathSelectors.any())
.paths(PathSelectors.regex("/error.*").negate())
.build().tags(new Tag())
.globalRequestParameters(operationParameters());
}
private List<RequestParameter > operationParameters() {
List<RequestParameter > headers = new ArrayList<>();
headers.add(new RequestParameterBuilder ().name(ACCESS_TOKEN)
.description("Access Token")
.in(ParameterType.HEADER)
.required(false).build());
headers.add(new RequestParameterBuilder().name(PERMISSION_ID)
.description("permission id")
.in(ParameterType.HEADER)
.required(false).build());
return headers;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title().description()
.build();
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
private List<Response> getCustomizedResponseMessages() {
List<Response> responseMessages = new ArrayList<>();
responseMessages.add(new ResponseBuilder().code("400").description("Invalid Request").build());
responseMessages.add(new ResponseBuilder().code("404").description("Could not found").build());
responseMessages.add(new ResponseBuilder().code("500").description("Internal Server Error").build());
responseMessages.add(new ResponseBuilder().code("503").description("Services Unavailable").build());
return responseMessages;
}
}