package dev.lions.unionflow.server.resource; import dev.lions.unionflow.server.service.PreferencesNotificationService; import jakarta.annotation.security.RolesAllowed; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import jakarta.ws.rs.*; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import java.util.Map; import java.util.UUID; import org.eclipse.microprofile.openapi.annotations.Operation; import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; import org.eclipse.microprofile.openapi.annotations.tags.Tag; import org.jboss.logging.Logger; /** Resource REST pour la gestion des préférences utilisateur */ @Path("/api/preferences") @Produces(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON) @ApplicationScoped @Tag(name = "Préférences", description = "API de gestion des préférences utilisateur") public class PreferencesResource { private static final Logger LOG = Logger.getLogger(PreferencesResource.class); @Inject PreferencesNotificationService preferencesService; @GET @Path("/{utilisateurId}") @RolesAllowed({"USER", "ADMIN", "SUPER_ADMIN"}) @Operation(summary = "Obtenir les préférences d'un utilisateur") @APIResponse(responseCode = "200", description = "Préférences récupérées avec succès") public Response obtenirPreferences( @PathParam("utilisateurId") UUID utilisateurId) { LOG.infof("Récupération des préférences pour l'utilisateur %s", utilisateurId); Map preferences = preferencesService.obtenirPreferences(utilisateurId); return Response.ok(preferences).build(); } @PUT @Path("/{utilisateurId}") @RolesAllowed({"USER", "ADMIN", "SUPER_ADMIN"}) @Operation(summary = "Mettre à jour les préférences d'un utilisateur") @APIResponse(responseCode = "204", description = "Préférences mises à jour avec succès") public Response mettreAJourPreferences( @PathParam("utilisateurId") UUID utilisateurId, Map preferences) { LOG.infof("Mise à jour des préférences pour l'utilisateur %s", utilisateurId); preferencesService.mettreAJourPreferences(utilisateurId, preferences); return Response.noContent().build(); } @POST @Path("/{utilisateurId}/reinitialiser") @RolesAllowed({"USER", "ADMIN", "SUPER_ADMIN"}) @Operation(summary = "Réinitialiser les préférences d'un utilisateur") @APIResponse(responseCode = "204", description = "Préférences réinitialisées avec succès") public Response reinitialiserPreferences(@PathParam("utilisateurId") UUID utilisateurId) { LOG.infof("Réinitialisation des préférences pour l'utilisateur %s", utilisateurId); preferencesService.reinitialiserPreferences(utilisateurId); return Response.noContent().build(); } @GET @Path("/{utilisateurId}/export") @RolesAllowed({"USER", "ADMIN", "SUPER_ADMIN"}) @Operation(summary = "Exporter les préférences d'un utilisateur") @APIResponse(responseCode = "200", description = "Préférences exportées avec succès") public Response exporterPreferences(@PathParam("utilisateurId") UUID utilisateurId) { LOG.infof("Export des préférences pour l'utilisateur %s", utilisateurId); Map export = preferencesService.exporterPreferences(utilisateurId); return Response.ok(export).build(); } }