Refactoring
This commit is contained in:
@@ -1,17 +1,19 @@
|
||||
package com.lions.dev.resource;
|
||||
|
||||
import com.lions.dev.dto.response.events.EventUpdateResponseDTO;
|
||||
import com.lions.dev.dto.request.events.EventUpdateRequestDTO;
|
||||
import com.lions.dev.entity.users.Users;
|
||||
import com.lions.dev.dto.request.events.EventCreateRequestDTO;
|
||||
import com.lions.dev.dto.response.events.EventCreateResponseDTO;
|
||||
import com.lions.dev.entity.events.Events;
|
||||
import com.lions.dev.service.EventService;
|
||||
import com.lions.dev.repository.EventsRepository;
|
||||
import com.lions.dev.repository.UsersRepository; // Ajout du UsersRepository pour gérer les participants
|
||||
import com.lions.dev.dto.request.events.EventCreateRequestDTO;
|
||||
import com.lions.dev.dto.request.events.EventUpdateRequestDTO;
|
||||
import com.lions.dev.dto.response.events.EventCreateResponseDTO;
|
||||
import com.lions.dev.dto.response.events.EventUpdateResponseDTO;
|
||||
import com.lions.dev.entity.events.Events;
|
||||
import com.lions.dev.entity.users.Users;
|
||||
import com.lions.dev.repository.UsersRepository; // Ajout du UsersRepository pour gérer les
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import jakarta.ws.rs.*;
|
||||
import jakarta.ws.rs.core.Response;
|
||||
import java.io.File; // participants
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
@@ -20,10 +22,10 @@ import org.eclipse.microprofile.openapi.annotations.tags.Tag;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
/**
|
||||
* Ressource REST pour la gestion des événements dans le système AfterWork.
|
||||
* Cette classe expose des endpoints pour créer, récupérer, et supprimer des événements.
|
||||
* Ressource REST pour la gestion des événements dans le système AfterWork. Cette classe expose des
|
||||
* endpoints pour créer, récupérer, et supprimer des événements.
|
||||
*
|
||||
* Tous les logs nécessaires pour la traçabilité sont intégrés.
|
||||
* <p>Tous les logs nécessaires pour la traçabilité sont intégrés.
|
||||
*/
|
||||
@Path("/events")
|
||||
@Produces("application/json")
|
||||
@@ -35,7 +37,10 @@ public class EventsResource {
|
||||
EventsRepository eventsRepository;
|
||||
|
||||
@Inject
|
||||
UsersRepository usersRepository; // Ajout pour la gestion des participants
|
||||
UsersRepository usersRepository; // Ajout pour la gestion des participants
|
||||
|
||||
@Inject
|
||||
EventService eventService;
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(EventsResource.class);
|
||||
|
||||
@@ -47,9 +52,12 @@ public class EventsResource {
|
||||
*/
|
||||
@POST
|
||||
@Transactional
|
||||
@Operation(summary = "Créer un nouvel événement", description = "Crée un nouvel événement et retourne ses détails")
|
||||
@Operation(
|
||||
summary = "Créer un nouvel événement",
|
||||
description = "Crée un nouvel événement et retourne ses détails")
|
||||
public Response createEvent(EventCreateRequestDTO eventCreateRequestDTO) {
|
||||
LOG.info("[LOG] Tentative de création d'un nouvel événement : " + eventCreateRequestDTO.getTitle());
|
||||
LOG.info(
|
||||
"[LOG] Tentative de création d'un nouvel événement : " + eventCreateRequestDTO.getTitle());
|
||||
|
||||
Events event = new Events();
|
||||
event.setTitle(eventCreateRequestDTO.getTitle());
|
||||
@@ -77,7 +85,9 @@ public class EventsResource {
|
||||
*/
|
||||
@GET
|
||||
@Path("/{id}")
|
||||
@Operation(summary = "Récupérer un événement par ID", description = "Retourne les détails de l'événement demandé")
|
||||
@Operation(
|
||||
summary = "Récupérer un événement par ID",
|
||||
description = "Retourne les détails de l'événement demandé")
|
||||
public Response getEventById(@PathParam("id") UUID id) {
|
||||
LOG.info("[LOG] Récupération de l'événement avec l'ID : " + id);
|
||||
|
||||
@@ -100,17 +110,22 @@ public class EventsResource {
|
||||
*/
|
||||
@GET
|
||||
@Path("/after-date")
|
||||
@Operation(summary = "Récupérer les événements après une date", description = "Retourne les événements après une date donnée")
|
||||
@Operation(
|
||||
summary = "Récupérer les événements après une date",
|
||||
description = "Retourne les événements après une date donnée")
|
||||
public Response getEventsAfterDate(@QueryParam("startDate") LocalDateTime startDate) {
|
||||
LOG.info("[LOG] Récupération des événements après la date : " + startDate);
|
||||
|
||||
List<Events> events = eventsRepository.findEventsAfterDate(startDate);
|
||||
if (events.isEmpty()) {
|
||||
LOG.warn("[LOG] Aucun événement trouvé après la date : " + startDate);
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Aucun événement trouvé après cette date.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Aucun événement trouvé après cette date.")
|
||||
.build();
|
||||
}
|
||||
|
||||
List<EventCreateResponseDTO> responseDTOs = events.stream().map(EventCreateResponseDTO::new).toList();
|
||||
List<EventCreateResponseDTO> responseDTOs =
|
||||
events.stream().map(EventCreateResponseDTO::new).toList();
|
||||
LOG.info("[LOG] Nombre d'événements trouvés après la date : " + events.size());
|
||||
return Response.ok(responseDTOs).build();
|
||||
}
|
||||
@@ -124,7 +139,9 @@ public class EventsResource {
|
||||
@DELETE
|
||||
@Path("/{id}")
|
||||
@Transactional
|
||||
@Operation(summary = "Supprimer un événement", description = "Supprime un événement de la base de données")
|
||||
@Operation(
|
||||
summary = "Supprimer un événement",
|
||||
description = "Supprime un événement de la base de données")
|
||||
public Response deleteEvent(@PathParam("id") UUID id) {
|
||||
LOG.info("Tentative de suppression de l'événement avec l'ID : " + id);
|
||||
|
||||
@@ -134,8 +151,7 @@ public class EventsResource {
|
||||
return Response.noContent().build();
|
||||
} else {
|
||||
LOG.warn("Échec de la suppression : événement introuvable avec l'ID : " + id);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Événement non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Événement non trouvé.").build();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -149,15 +165,16 @@ public class EventsResource {
|
||||
@POST
|
||||
@Path("/{id}/participants")
|
||||
@Transactional
|
||||
@Operation(summary = "Ajouter un participant à un événement", description = "Ajoute un utilisateur à un événement")
|
||||
@Operation(
|
||||
summary = "Ajouter un participant à un événement",
|
||||
description = "Ajoute un utilisateur à un événement")
|
||||
public Response addParticipant(@PathParam("id") UUID eventId, Users user) {
|
||||
LOG.info("Ajout d'un participant à l'événement : " + eventId);
|
||||
Events event = eventsRepository.findById(eventId);
|
||||
|
||||
if (event == null) {
|
||||
LOG.warn("Événement non trouvé avec l'ID : " + eventId);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Événement non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Événement non trouvé.").build();
|
||||
}
|
||||
|
||||
event.addParticipant(user);
|
||||
@@ -176,22 +193,23 @@ public class EventsResource {
|
||||
@DELETE
|
||||
@Path("/{id}/participants/{userId}")
|
||||
@Transactional
|
||||
@Operation(summary = "Retirer un participant d'un événement", description = "Supprime un utilisateur de la liste des participants d'un événement")
|
||||
public Response removeParticipant(@PathParam("id") UUID eventId, @PathParam("userId") UUID userId) {
|
||||
@Operation(
|
||||
summary = "Retirer un participant d'un événement",
|
||||
description = "Supprime un utilisateur de la liste des participants d'un événement")
|
||||
public Response removeParticipant(
|
||||
@PathParam("id") UUID eventId, @PathParam("userId") UUID userId) {
|
||||
LOG.info("Retrait d'un participant de l'événement : " + eventId);
|
||||
Events event = eventsRepository.findById(eventId);
|
||||
|
||||
if (event == null) {
|
||||
LOG.warn("Événement non trouvé avec l'ID : " + eventId);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Événement non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Événement non trouvé.").build();
|
||||
}
|
||||
|
||||
Users user = usersRepository.findById(userId);
|
||||
if (user == null) {
|
||||
LOG.warn("Utilisateur non trouvé avec l'ID : " + userId);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Utilisateur non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Utilisateur non trouvé.").build();
|
||||
}
|
||||
|
||||
event.removeParticipant(user);
|
||||
@@ -208,15 +226,16 @@ public class EventsResource {
|
||||
*/
|
||||
@GET
|
||||
@Path("/{id}/participants/count")
|
||||
@Operation(summary = "Obtenir le nombre de participants à un événement", description = "Retourne le nombre total de participants à un événement")
|
||||
@Operation(
|
||||
summary = "Obtenir le nombre de participants à un événement",
|
||||
description = "Retourne le nombre total de participants à un événement")
|
||||
public Response getNumberOfParticipants(@PathParam("id") UUID eventId) {
|
||||
LOG.info("Récupération du nombre de participants pour l'événement : " + eventId);
|
||||
Events event = eventsRepository.findById(eventId);
|
||||
|
||||
if (event == null) {
|
||||
LOG.warn("Événement non trouvé avec l'ID : " + eventId);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Événement non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Événement non trouvé.").build();
|
||||
}
|
||||
|
||||
int participantCount = event.getNumberOfParticipants();
|
||||
@@ -233,15 +252,16 @@ public class EventsResource {
|
||||
@POST
|
||||
@Path("/{id}/close")
|
||||
@Transactional
|
||||
@Operation(summary = "Fermer un événement", description = "Ferme un événement et empêche les nouvelles participations")
|
||||
@Operation(
|
||||
summary = "Fermer un événement",
|
||||
description = "Ferme un événement et empêche les nouvelles participations")
|
||||
public Response closeEvent(@PathParam("id") UUID eventId) {
|
||||
LOG.info("Tentative de fermeture de l'événement avec l'ID : " + eventId);
|
||||
Events event = eventsRepository.findById(eventId);
|
||||
|
||||
if (event == null) {
|
||||
LOG.warn("Événement non trouvé avec l'ID : " + eventId);
|
||||
return Response.status(Response.Status.NOT_FOUND)
|
||||
.entity("Événement non trouvé.").build();
|
||||
return Response.status(Response.Status.NOT_FOUND).entity("Événement non trouvé.").build();
|
||||
}
|
||||
|
||||
event.setClosed(true); // Marquer l'événement comme fermé
|
||||
@@ -261,7 +281,8 @@ public class EventsResource {
|
||||
@Path("/{id}")
|
||||
@Transactional
|
||||
@Operation(summary = "Mettre à jour un événement", description = "Modifie un événement existant")
|
||||
public Response updateEvent(@PathParam("id") UUID id, EventUpdateRequestDTO eventUpdateRequestDTO) {
|
||||
public Response updateEvent(
|
||||
@PathParam("id") UUID id, EventUpdateRequestDTO eventUpdateRequestDTO) {
|
||||
LOG.info("[LOG] Tentative de mise à jour de l'événement avec l'ID : " + id);
|
||||
|
||||
Events event = eventsRepository.findById(id);
|
||||
@@ -287,4 +308,51 @@ public class EventsResource {
|
||||
return Response.ok(responseDTO).build();
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint pour mettre à jour l'image d'un événement.
|
||||
*
|
||||
* @param id L'identifiant de l'événement.
|
||||
* @param imageFilePath Le chemin vers l'image de l'événement.
|
||||
* @return Un message indiquant si la mise à jour a réussi ou non.
|
||||
*/
|
||||
@PUT
|
||||
@jakarta.ws.rs.Path("/{id}/image")
|
||||
public String updateEventImage(@PathParam("id") UUID id, String imageFilePath) {
|
||||
try {
|
||||
// Vérification si le chemin d'image est vide ou null
|
||||
if (imageFilePath == null || imageFilePath.isEmpty()) {
|
||||
System.out.println("[ERROR] Le chemin de l'image est vide ou null.");
|
||||
return "Le chemin de l'image est vide ou null.";
|
||||
}
|
||||
|
||||
// Utiliser File pour vérifier si le fichier existe
|
||||
File file = new File(imageFilePath);
|
||||
if (!file.exists()) {
|
||||
System.out.println("[ERROR] Le fichier spécifié n'existe pas : " + imageFilePath);
|
||||
return "Le fichier spécifié n'existe pas.";
|
||||
}
|
||||
|
||||
// Récupérer l'événement par son ID
|
||||
Events event = eventService.getEventById(id);
|
||||
if (event == null) {
|
||||
System.out.println("[ERROR] Événement non trouvé avec l'ID : " + id);
|
||||
return "Événement non trouvé.";
|
||||
}
|
||||
|
||||
// Mettre à jour l'URL de l'image de l'événement
|
||||
String imageUrl = file.getAbsolutePath(); // Obtenir le chemin complet du fichier
|
||||
event.setImageUrl(imageUrl);
|
||||
|
||||
// Mise à jour de l'événement
|
||||
eventService.updateEvent(event);
|
||||
System.out.println(
|
||||
"[LOG] Image de l'événement mise à jour avec succès pour : " + event.getTitle());
|
||||
|
||||
return "Image de l'événement mise à jour avec succès.";
|
||||
} catch (Exception e) {
|
||||
System.out.println(
|
||||
"[ERROR] Erreur lors de la mise à jour de l'image de l'événement : " + e.getMessage());
|
||||
return "Erreur lors de la mise à jour de l'image de l'événement.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user