fix(backend): Correction du système de réactions (favoris) pour les événements

This commit is contained in:
dahoud
2026-01-19 22:44:14 +00:00
parent a5fd9538fe
commit 7dd0969799
4 changed files with 240 additions and 46 deletions

View File

@@ -214,7 +214,6 @@ public class EventsResource {
event.setStartDate(eventUpdateRequestDTO.getStartDate());
event.setEndDate(eventUpdateRequestDTO.getEndDate());
event.setDescription(eventUpdateRequestDTO.getDescription());
event.setLocation(eventUpdateRequestDTO.getLocation());
event.setCategory(eventUpdateRequestDTO.getCategory());
event.setLink(eventUpdateRequestDTO.getLink());
event.setImageUrl(eventUpdateRequestDTO.getImageUrl());
@@ -252,9 +251,9 @@ public class EventsResource {
List<Events> events = eventsRepository.find("creator.id IN ?1", friendIds).list();
LOG.info("[LOG] Nombre d'événements récupérés dans la requête : " + events.size());
// Retourner une liste vide si aucun événement trouvé (pas d'erreur 404)
List<EventReadManyByIdResponseDTO> responseDTOs = events.stream()
.map(EventReadManyByIdResponseDTO::new)
// Retourner avec reactionsCount et isFavorite pour l'utilisateur actuel
List<EventCreateResponseDTO> responseDTOs = events.stream()
.map(event -> new EventCreateResponseDTO(event, usersRepository, userId))
.toList();
return Response.ok(responseDTOs).build();
} catch (Exception e) {
@@ -552,9 +551,6 @@ public class EventsResource {
case "description":
event.setDescription(value != null ? value.toString() : null);
break;
case "location":
event.setLocation(value != null ? value.toString() : null);
break;
case "category":
event.setCategory(value != null ? value.toString() : null);
break;
@@ -762,9 +758,9 @@ public class EventsResource {
@POST
@Path("/{id}/favorite")
@Transactional
@Operation(summary = "Marquer un événement comme favori", description = "Permet à un utilisateur de marquer un événement comme favori.")
@Operation(summary = "Toggle favori d'un événement", description = "Permet à un utilisateur d'ajouter ou retirer un événement de ses favoris (toggle).")
public Response favoriteEvent(@PathParam("id") UUID eventId, @QueryParam("userId") UUID userId) {
LOG.info("[LOG] Marquage de l'événement comme favori pour l'utilisateur ID : " + userId);
LOG.info("[LOG] Toggle favori de l'événement " + eventId + " pour l'utilisateur ID : " + userId);
Events event = eventsRepository.findById(eventId);
Users user = usersRepository.findById(userId);
@@ -773,9 +769,22 @@ public class EventsResource {
return Response.status(Response.Status.NOT_FOUND).entity("Événement ou utilisateur non trouvé.").build();
}
user.addFavoriteEvent(event);
// ✅ Toggle : ajouter si pas favori, retirer si déjà favori
boolean wasFavorite = user.hasFavoriteEvent(event);
if (wasFavorite) {
user.removeFavoriteEvent(event);
LOG.info("[LOG] Événement retiré des favoris pour l'utilisateur : " + user.getEmail());
} else {
user.addFavoriteEvent(event);
LOG.info("[LOG] Événement ajouté aux favoris pour l'utilisateur : " + user.getEmail());
}
usersRepository.persist(user);
return Response.ok("Événement marqué comme favori.").build();
// Retourner un JSON avec le statut
Map<String, Object> response = new java.util.HashMap<>();
response.put("isFavorite", !wasFavorite);
response.put("message", wasFavorite ? "Événement retiré des favoris." : "Événement ajouté aux favoris.");
return Response.ok(response).build();
}
@GET