package dev.lions.unionflow.server.resource; import dev.lions.unionflow.server.service.MigrerOrganisationsVersKeycloakService; import dev.lions.unionflow.server.service.MigrerOrganisationsVersKeycloakService.MigrationReport; import jakarta.annotation.security.RolesAllowed; import jakarta.inject.Inject; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; import java.util.Map; /** * Endpoints d'administration Keycloak 26 Organizations. * *
Réservés aux SUPER_ADMIN. Opérations à déclencher manuellement lors de la * migration Keycloak 23 → 26. */ @Slf4j @Path("/api/admin/keycloak") @Produces(MediaType.APPLICATION_JSON) @RolesAllowed("SUPER_ADMIN") public class AdminKeycloakOrganisationResource { @Inject MigrerOrganisationsVersKeycloakService migrationService; /** * Lance la migration one-shot des organisations UnionFlow vers Keycloak 26 Organizations. * *
Idempotent : les organisations déjà migrées (keycloak_org_id non null) sont ignorées. * * @return rapport de migration (total, créés, ignorés, erreurs) */ @POST @Path("/migrer-organisations") public Response migrerOrganisations() { log.info("Déclenchement migration organisations → Keycloak 26 Organizations"); try { MigrationReport report = migrationService.migrerToutesLesOrganisations(); log.info("Migration terminée : {}", report); return Response .status(report.success() ? Response.Status.OK.getStatusCode() : 207) .entity(Map.of( "total", report.total(), "crees", report.crees(), "ignores", report.ignores(), "erreurs", report.erreurs(), "succes", report.success() )) .build(); } catch (Exception e) { log.error("Erreur critique lors de la migration : {}", e.getMessage(), e); return Response.serverError() .entity(Map.of("error", e.getMessage())) .build(); } } }