OpenApiConfig.java

package com.archiweb.config;

import io.swagger.v3.oas.models.ExternalDocumentation;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
import io.swagger.v3.oas.models.security.SecurityScheme;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.servers.Server;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class OpenApiConfig {

    @Value("${spring.profiles.active:dev}")
    private String activeProfile;

    @Bean
    public OpenAPI archiwebOpenAPI() {
        OpenAPI openAPI = new OpenAPI()
                .info(new Info()
                        .title("ArchiWeb Backend API")
                        .description("Documentation de l'API ArchiWeb (authentification, users, codes, participations, stats)")
                        .version("v1.0")
                        .license(new License().name("Apache 2.0").url("http://springdoc.org")))
                .externalDocs(new ExternalDocumentation()
                        .description("Projet ArchiWeb - GitLab")
                        .url("https://gitlab.com/karim-aitbouaddi/archiweb-g2-tiptop-backend"))
                .addSecurityItem(new SecurityRequirement().addList("Bearer Authentication"))
                .components(new Components()
                        .addSecuritySchemes("Bearer Authentication", new SecurityScheme()
                                .name("Authorization")
                                .type(SecurityScheme.Type.HTTP)
                                .scheme("bearer")
                                .bearerFormat("JWT")
                                .description("Insère ici ton token JWT : **Bearer + espace + token**")));

        // Ajouter les serveurs selon l'environnement
        Server localServer = new Server()
                .url("http://localhost:8080")
                .description("Serveur Local (Développement)");

        if ("integration".equals(activeProfile)) {
            Server integrationServer = new Server()
                    .url("https://integ.dsp5-archi-o24a-15m-g2.fr")
                    .description("Serveur Intégration");
            openAPI.addServersItem(integrationServer);
            openAPI.addServersItem(localServer);
        } else if ("prod".equals(activeProfile) || "production".equals(activeProfile)) {
            Server prodServer = new Server()
                    .url("https://dsp5-archi-o24a-15m-g2.fr")
                    .description("Serveur Production");
            openAPI.addServersItem(prodServer);
            openAPI.addServersItem(localServer);
        } else {
            // Dev par défaut
            Server integrationServer = new Server()
                    .url("https://integ.dsp5-archi-o24a-15m-g2.fr")
                    .description("Serveur Intégration");
            openAPI.addServersItem(localServer);
            openAPI.addServersItem(integrationServer);
        }

        return openAPI;
    }
}