OpenApiConfig.java
package com.aleprimo.Booking_System_App.config;
import io.swagger.v3.oas.models.parameters.Parameter;
import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.media.IntegerSchema;
import io.swagger.v3.oas.models.media.StringSchema;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springdoc.core.customizers.OpenApiCustomizer;
@Configuration
public class OpenApiConfig {
// http://localhost:8080/swagger-ui/index.html
@Bean
public OpenAPI bookingSystemOpenAPI() {
return new OpenAPI()
.info(new Info()
.title("Booking System API")
.description("API para gestión de reservas, notificaciones y pagos en un sistema de booking. " +
"Incluye soporte para usuarios, servicios ofrecidos, validaciones y paginación.")
.version("1.0.0")
.contact(new Contact()
.name("Alejandro Carullo")
.email("alejandrojuliancarullo@gmail.com")
.url("https://www.linkedin.com/in/alejandro-carullo-java-dev-jr"))
.license(new License()
.name("Apache 2.0")
.url("http://springdoc.org")))
.externalDocs(new ExternalDocumentation()
.description("Repositorio en GitHub")
.url("https://github.com/AlePrimo/Booking-System-App"));
}
@Bean
public OpenApiCustomizer customisePageable() {
return openApi -> openApi.getComponents()
.addParameters("page", new Parameter()
.name("page")
.in("query")
.description("Número de página (0..N)")
.required(false)
.schema(new IntegerSchema()._default(0)))
.addParameters("size", new Parameter()
.name("size")
.in("query")
.description("Cantidad de elementos por página")
.required(false)
.schema(new IntegerSchema()._default(20)))
.addParameters("sort", new Parameter()
.name("sort")
.in("query")
.description("Criterio de ordenación: propiedad,(asc|desc)")
.required(false)
.schema(new StringSchema()));
}
}