Initial commit
This commit is contained in:
@@ -0,0 +1,171 @@
|
||||
package dev.lions.btpxpress.adapter.http;
|
||||
|
||||
import dev.lions.btpxpress.application.service.EmployeService;
|
||||
import dev.lions.btpxpress.domain.core.entity.Employe;
|
||||
import dev.lions.btpxpress.domain.core.entity.StatutEmploye;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.ws.rs.*;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import org.eclipse.microprofile.openapi.annotations.Operation;
|
||||
import org.eclipse.microprofile.openapi.annotations.parameters.Parameter;
|
||||
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
|
||||
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
/**
|
||||
* Resource REST pour la gestion des employés - Architecture 2025 MIGRATION: Préservation exacte de
|
||||
* tous les endpoints critiques
|
||||
*/
|
||||
@Path("/api/v1/employes")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Tag(name = "Employés", description = "Gestion des employés")
|
||||
public class EmployeResource {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(EmployeResource.class);
|
||||
|
||||
@Inject EmployeService employeService;
|
||||
|
||||
// === ENDPOINTS DE CONSULTATION - API CONTRACTS PRÉSERVÉS EXACTEMENT ===
|
||||
|
||||
@GET
|
||||
@Operation(summary = "Récupérer tous les employés")
|
||||
@APIResponse(responseCode = "200", description = "Liste des employés récupérée avec succès")
|
||||
public Response getAllEmployes(
|
||||
@Parameter(description = "Terme de recherche") @QueryParam("search") String search,
|
||||
@Parameter(description = "Statut de l'employé") @QueryParam("statut") String statut) {
|
||||
try {
|
||||
List<Employe> employes;
|
||||
|
||||
if (statut != null && !statut.isEmpty()) {
|
||||
employes = employeService.findByStatut(StatutEmploye.valueOf(statut.toUpperCase()));
|
||||
} else if (search != null && !search.isEmpty()) {
|
||||
employes = employeService.search(search, null, null, null);
|
||||
} else {
|
||||
employes = employeService.findAll();
|
||||
}
|
||||
|
||||
return Response.ok(employes).build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors de la récupération des employés", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des employés: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/{id}")
|
||||
@Operation(summary = "Récupérer un employé par ID")
|
||||
@APIResponse(responseCode = "200", description = "Employé récupéré avec succès")
|
||||
@APIResponse(responseCode = "404", description = "Employé non trouvé")
|
||||
public Response getEmployeById(
|
||||
@Parameter(description = "ID de l'employé") @PathParam("id") String id) {
|
||||
try {
|
||||
UUID employeId = UUID.fromString(id);
|
||||
return employeService
|
||||
.findById(employeId)
|
||||
.map(employe -> Response.ok(employe).build())
|
||||
.orElse(
|
||||
Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Employé non trouvé avec l'ID: " + id)
|
||||
.build());
|
||||
} catch (IllegalArgumentException e) {
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID d'employé invalide: " + id)
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors de la récupération de l'employé {}", id, e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération de l'employé: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/count")
|
||||
@Operation(summary = "Compter le nombre d'employés")
|
||||
@APIResponse(responseCode = "200", description = "Nombre d'employés retourné avec succès")
|
||||
public Response countEmployes() {
|
||||
try {
|
||||
long count = employeService.count();
|
||||
return Response.ok(new CountResponse(count)).build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors du comptage des employés", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors du comptage des employés: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/stats")
|
||||
@Operation(summary = "Obtenir les statistiques des employés")
|
||||
@APIResponse(responseCode = "200", description = "Statistiques récupérées avec succès")
|
||||
public Response getStats() {
|
||||
try {
|
||||
Object stats = employeService.getStatistics();
|
||||
return Response.ok(stats).build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors de la génération des statistiques des employés", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la génération des statistiques: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/disponibles")
|
||||
@Operation(summary = "Récupérer les employés disponibles")
|
||||
@APIResponse(
|
||||
responseCode = "200",
|
||||
description = "Liste des employés disponibles récupérée avec succès")
|
||||
@APIResponse(responseCode = "400", description = "Paramètres de date manquants")
|
||||
public Response getEmployesDisponibles(
|
||||
@Parameter(description = "Date de début (YYYY-MM-DD)") @QueryParam("dateDebut")
|
||||
String dateDebut,
|
||||
@Parameter(description = "Date de fin (YYYY-MM-DD)") @QueryParam("dateFin") String dateFin) {
|
||||
try {
|
||||
if (dateDebut == null || dateFin == null) {
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Les paramètres dateDebut et dateFin sont obligatoires")
|
||||
.build();
|
||||
}
|
||||
List<Employe> employes = employeService.findDisponibles(dateDebut, dateFin);
|
||||
return Response.ok(employes).build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors de la récupération des employés disponibles", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des employés disponibles: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
@GET
|
||||
@Path("/actifs")
|
||||
@Operation(summary = "Récupérer les employés actifs")
|
||||
@APIResponse(
|
||||
responseCode = "200",
|
||||
description = "Liste des employés actifs récupérée avec succès")
|
||||
public Response getEmployesActifs() {
|
||||
try {
|
||||
List<Employe> employes = employeService.findByStatut(StatutEmploye.ACTIF);
|
||||
return Response.ok(employes).build();
|
||||
} catch (Exception e) {
|
||||
logger.error("Erreur lors de la récupération des employés actifs", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des employés actifs: " + e.getMessage())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// CLASSES UTILITAIRES
|
||||
// ============================================
|
||||
|
||||
public static record CountResponse(long count) {}
|
||||
}
|
||||
Reference in New Issue
Block a user