feat: Système complet de gestion des établissements (backend) - Entités JPA pour Establishment, EstablishmentMedia, EstablishmentRating - DTOs pour création, mise à jour et réponses - Repositories Panache pour accès aux données - Services avec logique métier et validation - Resources REST avec tous les endpoints CRUD - Gestion des médias (photos/vidéos) - Système de notation avec statistiques
This commit is contained in:
@@ -0,0 +1,149 @@
|
||||
package com.lions.dev.resource;
|
||||
|
||||
import com.lions.dev.dto.response.establishment.EstablishmentMediaResponseDTO;
|
||||
import com.lions.dev.entity.establishment.EstablishmentMedia;
|
||||
import com.lions.dev.entity.establishment.MediaType;
|
||||
import com.lions.dev.service.EstablishmentMediaService;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.ws.rs.*;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.eclipse.microprofile.openapi.annotations.Operation;
|
||||
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Ressource REST pour la gestion des médias d'établissements.
|
||||
* Cette classe expose des endpoints pour uploader, récupérer et supprimer des médias.
|
||||
*/
|
||||
@Path("/establishments/{establishmentId}/media")
|
||||
@Produces(jakarta.ws.rs.core.MediaType.APPLICATION_JSON)
|
||||
@Consumes(jakarta.ws.rs.core.MediaType.APPLICATION_JSON)
|
||||
@Tag(name = "Establishment Media", description = "Opérations liées aux médias des établissements")
|
||||
public class EstablishmentMediaResource {
|
||||
|
||||
@Inject
|
||||
EstablishmentMediaService mediaService;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(EstablishmentMediaResource.class);
|
||||
|
||||
/**
|
||||
* Récupère tous les médias d'un établissement.
|
||||
*/
|
||||
@GET
|
||||
@Operation(summary = "Récupérer tous les médias d'un établissement",
|
||||
description = "Retourne la liste de tous les médias (photos et vidéos) d'un établissement")
|
||||
public Response getEstablishmentMedia(@PathParam("establishmentId") String establishmentId) {
|
||||
LOG.info("Récupération des médias pour l'établissement : " + establishmentId);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
List<EstablishmentMedia> medias = mediaService.getMediaByEstablishmentId(id);
|
||||
List<EstablishmentMediaResponseDTO> responseDTOs = medias.stream()
|
||||
.map(EstablishmentMediaResponseDTO::new)
|
||||
.collect(Collectors.toList());
|
||||
return Response.ok(responseDTOs).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID d'établissement invalide : " + establishmentId);
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID d'établissement invalide")
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur lors de la récupération des médias", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des médias")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Upload un nouveau média pour un établissement.
|
||||
*/
|
||||
@POST
|
||||
@Transactional
|
||||
@Operation(summary = "Uploader un média pour un établissement",
|
||||
description = "Upload un nouveau média (photo ou vidéo) pour un établissement")
|
||||
public Response uploadMedia(
|
||||
@PathParam("establishmentId") String establishmentId,
|
||||
@QueryParam("mediaUrl") String mediaUrl,
|
||||
@QueryParam("mediaType") String mediaTypeStr,
|
||||
@QueryParam("uploadedByUserId") String uploadedByUserIdStr,
|
||||
@QueryParam("thumbnailUrl") String thumbnailUrl) {
|
||||
LOG.info("Upload d'un média pour l'établissement : " + establishmentId);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
UUID uploadedByUserId = UUID.fromString(uploadedByUserIdStr);
|
||||
|
||||
// Valider le type de média
|
||||
MediaType mediaType;
|
||||
try {
|
||||
mediaType = MediaType.valueOf(mediaTypeStr.toUpperCase());
|
||||
} catch (IllegalArgumentException e) {
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Type de média invalide. Utilisez PHOTO ou VIDEO")
|
||||
.build();
|
||||
}
|
||||
|
||||
EstablishmentMedia media = mediaService.uploadMedia(id, mediaUrl, mediaType, uploadedByUserId, thumbnailUrl);
|
||||
EstablishmentMediaResponseDTO responseDTO = new EstablishmentMediaResponseDTO(media);
|
||||
return Response.status(Response.Status.CREATED).entity(responseDTO).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("Paramètres invalides : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Paramètres invalides : " + e.getMessage())
|
||||
.build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("Erreur lors de l'upload du média : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de l'upload du média", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de l'upload du média")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Supprime un média d'un établissement.
|
||||
*/
|
||||
@DELETE
|
||||
@Path("/{mediaId}")
|
||||
@Transactional
|
||||
@Operation(summary = "Supprimer un média d'un établissement",
|
||||
description = "Supprime un média spécifique d'un établissement")
|
||||
public Response deleteMedia(
|
||||
@PathParam("establishmentId") String establishmentId,
|
||||
@PathParam("mediaId") String mediaId) {
|
||||
LOG.info("Suppression du média " + mediaId + " de l'établissement " + establishmentId);
|
||||
|
||||
try {
|
||||
UUID establishmentUuid = UUID.fromString(establishmentId);
|
||||
UUID mediaUuid = UUID.fromString(mediaId);
|
||||
mediaService.deleteMedia(establishmentUuid, mediaUuid);
|
||||
return Response.status(Response.Status.NO_CONTENT).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID invalide : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID invalide")
|
||||
.build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("Erreur lors de la suppression du média : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de la suppression du média", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la suppression du média")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
package com.lions.dev.resource;
|
||||
|
||||
import com.lions.dev.dto.request.establishment.EstablishmentRatingRequestDTO;
|
||||
import com.lions.dev.dto.response.establishment.EstablishmentRatingResponseDTO;
|
||||
import com.lions.dev.dto.response.establishment.EstablishmentRatingStatsResponseDTO;
|
||||
import com.lions.dev.entity.establishment.EstablishmentRating;
|
||||
import com.lions.dev.service.EstablishmentRatingService;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.ws.rs.*;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.eclipse.microprofile.openapi.annotations.Operation;
|
||||
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/**
|
||||
* Ressource REST pour la gestion des notations d'établissements.
|
||||
* Cette classe expose des endpoints pour soumettre, modifier et récupérer les notes.
|
||||
*/
|
||||
@Path("/establishments/{establishmentId}/ratings")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Tag(name = "Establishment Ratings", description = "Opérations liées aux notations des établissements")
|
||||
public class EstablishmentRatingResource {
|
||||
|
||||
@Inject
|
||||
EstablishmentRatingService ratingService;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(EstablishmentRatingResource.class);
|
||||
|
||||
/**
|
||||
* Soumet une nouvelle note pour un établissement.
|
||||
*/
|
||||
@POST
|
||||
@Transactional
|
||||
@Operation(summary = "Soumettre une note pour un établissement",
|
||||
description = "Soumet une nouvelle note (1 à 5 étoiles) pour un établissement")
|
||||
public Response submitRating(
|
||||
@PathParam("establishmentId") String establishmentId,
|
||||
@QueryParam("userId") String userIdStr,
|
||||
@Valid EstablishmentRatingRequestDTO requestDTO) {
|
||||
LOG.info("Soumission d'une note pour l'établissement " + establishmentId + " par l'utilisateur " + userIdStr);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
UUID userId = UUID.fromString(userIdStr);
|
||||
|
||||
EstablishmentRating rating = ratingService.submitRating(id, userId, requestDTO);
|
||||
EstablishmentRatingResponseDTO responseDTO = new EstablishmentRatingResponseDTO(rating);
|
||||
return Response.status(Response.Status.CREATED).entity(responseDTO).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID invalide : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID invalide : " + e.getMessage())
|
||||
.build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("Erreur lors de la soumission de la note : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de la soumission de la note", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la soumission de la note")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Met à jour une note existante.
|
||||
*/
|
||||
@PUT
|
||||
@Transactional
|
||||
@Operation(summary = "Modifier une note existante",
|
||||
description = "Met à jour une note existante pour un établissement")
|
||||
public Response updateRating(
|
||||
@PathParam("establishmentId") String establishmentId,
|
||||
@QueryParam("userId") String userIdStr,
|
||||
@Valid EstablishmentRatingRequestDTO requestDTO) {
|
||||
LOG.info("Mise à jour de la note pour l'établissement " + establishmentId + " par l'utilisateur " + userIdStr);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
UUID userId = UUID.fromString(userIdStr);
|
||||
|
||||
EstablishmentRating rating = ratingService.updateRating(id, userId, requestDTO);
|
||||
EstablishmentRatingResponseDTO responseDTO = new EstablishmentRatingResponseDTO(rating);
|
||||
return Response.ok(responseDTO).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID invalide : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID invalide : " + e.getMessage())
|
||||
.build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("Erreur lors de la mise à jour de la note : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de la mise à jour de la note", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la mise à jour de la note")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère la note d'un utilisateur pour un établissement.
|
||||
*/
|
||||
@GET
|
||||
@Path("/users/{userId}")
|
||||
@Operation(summary = "Récupérer la note d'un utilisateur",
|
||||
description = "Récupère la note donnée par un utilisateur spécifique pour un établissement")
|
||||
public Response getUserRating(
|
||||
@PathParam("establishmentId") String establishmentId,
|
||||
@PathParam("userId") String userIdStr) {
|
||||
LOG.info("Récupération de la note de l'utilisateur " + userIdStr + " pour l'établissement " + establishmentId);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
UUID userId = UUID.fromString(userIdStr);
|
||||
|
||||
EstablishmentRating rating = ratingService.getUserRating(id, userId);
|
||||
if (rating == null) {
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Note non trouvée")
|
||||
.build();
|
||||
}
|
||||
|
||||
EstablishmentRatingResponseDTO responseDTO = new EstablishmentRatingResponseDTO(rating);
|
||||
return Response.ok(responseDTO).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID invalide : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID invalide : " + e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de la récupération de la note", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération de la note")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Récupère les statistiques de notation d'un établissement.
|
||||
*/
|
||||
@GET
|
||||
@Path("/stats")
|
||||
@Operation(summary = "Récupérer les statistiques de notation",
|
||||
description = "Récupère les statistiques de notation d'un établissement (moyenne, total, distribution)")
|
||||
public Response getRatingStats(@PathParam("establishmentId") String establishmentId) {
|
||||
LOG.info("Récupération des statistiques de notation pour l'établissement " + establishmentId);
|
||||
|
||||
try {
|
||||
UUID id = UUID.fromString(establishmentId);
|
||||
Map<String, Object> stats = ratingService.getRatingStats(id);
|
||||
|
||||
EstablishmentRatingStatsResponseDTO responseDTO = new EstablishmentRatingStatsResponseDTO(
|
||||
(Double) stats.get("averageRating"),
|
||||
(Integer) stats.get("totalRatingsCount"),
|
||||
(Map<Integer, Integer>) stats.get("ratingDistribution")
|
||||
);
|
||||
return Response.ok(responseDTO).build();
|
||||
} catch (IllegalArgumentException e) {
|
||||
LOG.error("ID invalide : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("ID invalide : " + e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("Erreur inattendue lors de la récupération des statistiques", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des statistiques")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
300
src/main/java/com/lions/dev/resource/EstablishmentResource.java
Normal file
300
src/main/java/com/lions/dev/resource/EstablishmentResource.java
Normal file
@@ -0,0 +1,300 @@
|
||||
package com.lions.dev.resource;
|
||||
|
||||
import com.lions.dev.dto.request.establishment.EstablishmentCreateRequestDTO;
|
||||
import com.lions.dev.dto.request.establishment.EstablishmentUpdateRequestDTO;
|
||||
import com.lions.dev.dto.response.establishment.EstablishmentResponseDTO;
|
||||
import com.lions.dev.entity.establishment.Establishment;
|
||||
import com.lions.dev.entity.users.Users;
|
||||
import com.lions.dev.repository.UsersRepository;
|
||||
import com.lions.dev.service.EstablishmentService;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.validation.Valid;
|
||||
import jakarta.ws.rs.*;
|
||||
import jakarta.ws.rs.core.MediaType;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import org.eclipse.microprofile.openapi.annotations.Operation;
|
||||
import org.eclipse.microprofile.openapi.annotations.tags.Tag;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Ressource REST pour la gestion des établissements dans le système AfterWork.
|
||||
* Cette classe expose des endpoints pour créer, récupérer, mettre à jour et supprimer des établissements.
|
||||
* Seuls les responsables d'établissement peuvent créer et gérer des établissements.
|
||||
*/
|
||||
@Path("/establishments")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
@Consumes(MediaType.APPLICATION_JSON)
|
||||
@Tag(name = "Establishments", description = "Opérations liées à la gestion des établissements")
|
||||
public class EstablishmentResource {
|
||||
|
||||
@Inject
|
||||
EstablishmentService establishmentService;
|
||||
|
||||
@Inject
|
||||
UsersRepository usersRepository;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(EstablishmentResource.class);
|
||||
|
||||
// *********** Création d'un établissement ***********
|
||||
|
||||
@POST
|
||||
@Transactional
|
||||
@Operation(summary = "Créer un nouvel établissement",
|
||||
description = "Crée un nouvel établissement. Seuls les responsables d'établissement peuvent créer des établissements.")
|
||||
public Response createEstablishment(@Valid EstablishmentCreateRequestDTO requestDTO) {
|
||||
LOG.info("[LOG] Tentative de création d'un nouvel établissement : " + requestDTO.getName());
|
||||
|
||||
try {
|
||||
// Vérifier que managerId est fourni
|
||||
if (requestDTO.getManagerId() == null) {
|
||||
LOG.error("[ERROR] managerId est obligatoire pour créer un établissement");
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("L'identifiant du responsable (managerId) est obligatoire")
|
||||
.build();
|
||||
}
|
||||
|
||||
// Récupérer le responsable
|
||||
Users manager = usersRepository.findById(requestDTO.getManagerId());
|
||||
if (manager == null) {
|
||||
LOG.error("[ERROR] Responsable non trouvé avec l'ID : " + requestDTO.getManagerId());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Responsable non trouvé avec l'ID fourni")
|
||||
.build();
|
||||
}
|
||||
|
||||
// Créer l'établissement
|
||||
Establishment establishment = new Establishment();
|
||||
establishment.setName(requestDTO.getName());
|
||||
establishment.setType(requestDTO.getType());
|
||||
establishment.setAddress(requestDTO.getAddress());
|
||||
establishment.setCity(requestDTO.getCity());
|
||||
establishment.setPostalCode(requestDTO.getPostalCode());
|
||||
establishment.setDescription(requestDTO.getDescription());
|
||||
establishment.setPhoneNumber(requestDTO.getPhoneNumber());
|
||||
establishment.setEmail(requestDTO.getEmail());
|
||||
establishment.setWebsite(requestDTO.getWebsite());
|
||||
establishment.setImageUrl(requestDTO.getImageUrl());
|
||||
establishment.setRating(requestDTO.getRating());
|
||||
establishment.setPriceRange(requestDTO.getPriceRange());
|
||||
establishment.setCapacity(requestDTO.getCapacity());
|
||||
establishment.setAmenities(requestDTO.getAmenities());
|
||||
establishment.setOpeningHours(requestDTO.getOpeningHours());
|
||||
establishment.setLatitude(requestDTO.getLatitude());
|
||||
establishment.setLongitude(requestDTO.getLongitude());
|
||||
|
||||
Establishment createdEstablishment = establishmentService.createEstablishment(establishment, requestDTO.getManagerId());
|
||||
LOG.info("[LOG] Établissement créé avec succès : " + createdEstablishment.getName());
|
||||
|
||||
EstablishmentResponseDTO responseDTO = new EstablishmentResponseDTO(createdEstablishment);
|
||||
return Response.status(Response.Status.CREATED).entity(responseDTO).build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("[ERROR] Erreur lors de la création de l'établissement : " + e.getMessage());
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur inattendue lors de la création de l'établissement", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la création de l'établissement")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Récupération de tous les établissements ***********
|
||||
|
||||
@GET
|
||||
@Operation(summary = "Récupérer tous les établissements",
|
||||
description = "Retourne la liste de tous les établissements disponibles")
|
||||
public Response getAllEstablishments() {
|
||||
LOG.info("[LOG] Récupération de tous les établissements");
|
||||
try {
|
||||
List<Establishment> establishments = establishmentService.getAllEstablishments();
|
||||
List<EstablishmentResponseDTO> responseDTOs = establishments.stream()
|
||||
.map(EstablishmentResponseDTO::new)
|
||||
.collect(Collectors.toList());
|
||||
return Response.ok(responseDTOs).build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la récupération des établissements", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des établissements")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Récupération d'un établissement par ID ***********
|
||||
|
||||
@GET
|
||||
@Path("/{id}")
|
||||
@Operation(summary = "Récupérer un établissement par ID",
|
||||
description = "Retourne les détails de l'établissement demandé")
|
||||
public Response getEstablishmentById(@PathParam("id") UUID id) {
|
||||
LOG.info("[LOG] Récupération de l'établissement avec l'ID : " + id);
|
||||
try {
|
||||
Establishment establishment = establishmentService.getEstablishmentById(id);
|
||||
EstablishmentResponseDTO responseDTO = new EstablishmentResponseDTO(establishment);
|
||||
return Response.ok(responseDTO).build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.warn("[WARN] " + e.getMessage());
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la récupération de l'établissement", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération de l'établissement")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Recherche d'établissements ***********
|
||||
|
||||
@GET
|
||||
@Path("/search")
|
||||
@Operation(summary = "Rechercher des établissements",
|
||||
description = "Recherche des établissements par nom ou ville")
|
||||
public Response searchEstablishments(@QueryParam("q") String query) {
|
||||
LOG.info("[LOG] Recherche d'établissements avec la requête : " + query);
|
||||
try {
|
||||
if (query == null || query.trim().isEmpty()) {
|
||||
return Response.status(Response.Status.BAD_REQUEST)
|
||||
.entity("Le paramètre de recherche 'q' est obligatoire")
|
||||
.build();
|
||||
}
|
||||
List<Establishment> establishments = establishmentService.searchEstablishments(query);
|
||||
List<EstablishmentResponseDTO> responseDTOs = establishments.stream()
|
||||
.map(EstablishmentResponseDTO::new)
|
||||
.collect(Collectors.toList());
|
||||
return Response.ok(responseDTOs).build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la recherche d'établissements", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la recherche d'établissements")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Filtrage d'établissements ***********
|
||||
|
||||
@GET
|
||||
@Path("/filter")
|
||||
@Operation(summary = "Filtrer les établissements",
|
||||
description = "Filtre les établissements par type, fourchette de prix et/ou ville")
|
||||
public Response filterEstablishments(
|
||||
@QueryParam("type") String type,
|
||||
@QueryParam("priceRange") String priceRange,
|
||||
@QueryParam("city") String city) {
|
||||
LOG.info("[LOG] Filtrage des établissements : type=" + type + ", priceRange=" + priceRange + ", city=" + city);
|
||||
try {
|
||||
List<Establishment> establishments = establishmentService.filterEstablishments(type, priceRange, city);
|
||||
List<EstablishmentResponseDTO> responseDTOs = establishments.stream()
|
||||
.map(EstablishmentResponseDTO::new)
|
||||
.collect(Collectors.toList());
|
||||
return Response.ok(responseDTOs).build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors du filtrage des établissements", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors du filtrage des établissements")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Récupération des établissements d'un responsable ***********
|
||||
|
||||
@GET
|
||||
@Path("/manager/{managerId}")
|
||||
@Operation(summary = "Récupérer les établissements d'un responsable",
|
||||
description = "Retourne tous les établissements gérés par un responsable")
|
||||
public Response getEstablishmentsByManager(@PathParam("managerId") UUID managerId) {
|
||||
LOG.info("[LOG] Récupération des établissements du responsable : " + managerId);
|
||||
try {
|
||||
List<Establishment> establishments = establishmentService.getEstablishmentsByManager(managerId);
|
||||
List<EstablishmentResponseDTO> responseDTOs = establishments.stream()
|
||||
.map(EstablishmentResponseDTO::new)
|
||||
.collect(Collectors.toList());
|
||||
return Response.ok(responseDTOs).build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la récupération des établissements du responsable", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la récupération des établissements du responsable")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Mise à jour d'un établissement ***********
|
||||
|
||||
@PUT
|
||||
@Path("/{id}")
|
||||
@Transactional
|
||||
@Operation(summary = "Mettre à jour un établissement",
|
||||
description = "Met à jour les informations d'un établissement existant")
|
||||
public Response updateEstablishment(
|
||||
@PathParam("id") UUID id,
|
||||
@Valid EstablishmentUpdateRequestDTO requestDTO) {
|
||||
LOG.info("[LOG] Mise à jour de l'établissement avec l'ID : " + id);
|
||||
try {
|
||||
Establishment establishment = new Establishment();
|
||||
establishment.setName(requestDTO.getName());
|
||||
establishment.setType(requestDTO.getType());
|
||||
establishment.setAddress(requestDTO.getAddress());
|
||||
establishment.setCity(requestDTO.getCity());
|
||||
establishment.setPostalCode(requestDTO.getPostalCode());
|
||||
establishment.setDescription(requestDTO.getDescription());
|
||||
establishment.setPhoneNumber(requestDTO.getPhoneNumber());
|
||||
establishment.setEmail(requestDTO.getEmail());
|
||||
establishment.setWebsite(requestDTO.getWebsite());
|
||||
establishment.setImageUrl(requestDTO.getImageUrl());
|
||||
establishment.setRating(requestDTO.getRating());
|
||||
establishment.setPriceRange(requestDTO.getPriceRange());
|
||||
establishment.setCapacity(requestDTO.getCapacity());
|
||||
establishment.setAmenities(requestDTO.getAmenities());
|
||||
establishment.setOpeningHours(requestDTO.getOpeningHours());
|
||||
establishment.setLatitude(requestDTO.getLatitude());
|
||||
establishment.setLongitude(requestDTO.getLongitude());
|
||||
|
||||
Establishment updatedEstablishment = establishmentService.updateEstablishment(id, establishment);
|
||||
EstablishmentResponseDTO responseDTO = new EstablishmentResponseDTO(updatedEstablishment);
|
||||
return Response.ok(responseDTO).build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("[ERROR] " + e.getMessage());
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la mise à jour de l'établissement", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la mise à jour de l'établissement")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
||||
// *********** Suppression d'un établissement ***********
|
||||
|
||||
@DELETE
|
||||
@Path("/{id}")
|
||||
@Transactional
|
||||
@Operation(summary = "Supprimer un établissement",
|
||||
description = "Supprime un établissement du système")
|
||||
public Response deleteEstablishment(@PathParam("id") UUID id) {
|
||||
LOG.info("[LOG] Suppression de l'établissement avec l'ID : " + id);
|
||||
try {
|
||||
establishmentService.deleteEstablishment(id);
|
||||
return Response.noContent().build();
|
||||
} catch (RuntimeException e) {
|
||||
LOG.error("[ERROR] " + e.getMessage());
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity(e.getMessage())
|
||||
.build();
|
||||
} catch (Exception e) {
|
||||
LOG.error("[ERROR] Erreur lors de la suppression de l'établissement", e);
|
||||
return Response.status(Response.Status.INTERNAL_SERVER_ERROR)
|
||||
.entity("Erreur lors de la suppression de l'établissement")
|
||||
.build();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user