feat: Extension des événements avec 10 nouveaux champs - Ajout de maxParticipants, tags, organizer, participationFee - Ajout de privacyRules, transportInfo, accommodationInfo - Ajout de accessibilityInfo, parkingInfo, securityProtocol - Mise à jour des DTOs et services - Vérification des permissions pour le CRUD (créateur uniquement) - Ajout de creatorId dans EventCreateResponseDTO

This commit is contained in:
dahoud
2026-01-13 20:45:18 +00:00
parent 56d0aad6a6
commit 0443bd251f
5 changed files with 282 additions and 34 deletions

View File

@@ -59,6 +59,16 @@ public class EventService {
event.setCategory(eventCreateRequestDTO.getCategory());
event.setLink(eventCreateRequestDTO.getLink());
event.setImageUrl(eventCreateRequestDTO.getImageUrl());
event.setMaxParticipants(eventCreateRequestDTO.getMaxParticipants());
event.setTags(eventCreateRequestDTO.getTags());
event.setOrganizer(eventCreateRequestDTO.getOrganizer());
event.setParticipationFee(eventCreateRequestDTO.getParticipationFee());
event.setPrivacyRules(eventCreateRequestDTO.getPrivacyRules());
event.setTransportInfo(eventCreateRequestDTO.getTransportInfo());
event.setAccommodationInfo(eventCreateRequestDTO.getAccommodationInfo());
event.setAccessibilityInfo(eventCreateRequestDTO.getAccessibilityInfo());
event.setParkingInfo(eventCreateRequestDTO.getParkingInfo());
event.setSecurityProtocol(eventCreateRequestDTO.getSecurityProtocol());
event.setCreator(creator);
event.setStatus("ouvert");
@@ -132,33 +142,60 @@ public class EventService {
* Supprime un événement par son ID.
*
* @param id L'ID de l'événement à supprimer.
* @param userId L'ID de l'utilisateur qui tente de supprimer l'événement.
* @return true si l'événement a été supprimé, false sinon.
* @throws EventNotFoundException Si l'événement n'est pas trouvé.
* @throws SecurityException Si l'utilisateur n'est pas le créateur de l'événement.
*/
@Transactional
public boolean deleteEvent(UUID id) {
logger.info("[logger] Tentative de suppression de l'événement avec l'ID : {}", id);
public boolean deleteEvent(UUID id, UUID userId) {
logger.info("[logger] Tentative de suppression de l'événement avec l'ID : {} par l'utilisateur : {}", id, userId);
Events event = eventsRepository.findById(id);
if (event == null) {
logger.warn("[logger] Échec de la suppression : événement avec l'ID {} introuvable.", id);
throw new EventNotFoundException(id);
}
// Vérifier que l'utilisateur est le créateur
if (!canModifyEvent(event, userId)) {
logger.error("[ERROR] L'utilisateur {} n'a pas les permissions pour supprimer l'événement {}", userId, id);
throw new SecurityException("Vous n'avez pas les permissions pour supprimer cet événement");
}
boolean deleted = eventsRepository.deleteById(id);
if (deleted) {
logger.info("[logger] Événement avec l'ID {} supprimé avec succès.", id);
} else {
logger.warn("[logger] Échec de la suppression : événement avec l'ID {} introuvable.", id);
throw new EventNotFoundException(id);
}
return deleted;
}
/**
* Vérifie si un utilisateur peut modifier un événement.
*
* @param event L'événement à vérifier.
* @param userId L'ID de l'utilisateur.
* @return true si l'utilisateur peut modifier l'événement, false sinon.
*/
public boolean canModifyEvent(Events event, UUID userId) {
if (event == null || event.getCreator() == null) {
return false;
}
return event.getCreator().getId().equals(userId);
}
/**
* Met à jour un événement dans le système.
*
* @param event L'événement contenant les détails mis à jour.
* @param userId L'ID de l'utilisateur qui tente de mettre à jour l'événement.
* @return L'événement mis à jour.
* @throws EventNotFoundException Si l'événement n'est pas trouvé.
* @throws SecurityException Si l'utilisateur n'est pas le créateur de l'événement.
*/
@Transactional
public Events updateEvent(Events event) {
logger.info("[logger] Tentative de mise à jour de l'événement avec l'ID : {}", event.getId());
public Events updateEvent(Events event, UUID userId) {
logger.info("[logger] Tentative de mise à jour de l'événement avec l'ID : {} par l'utilisateur : {}", event.getId(), userId);
Events existingEvent = eventsRepository.findById(event.getId());
if (existingEvent == null) {
@@ -166,6 +203,12 @@ public class EventService {
throw new EventNotFoundException(event.getId());
}
// Vérifier que l'utilisateur est le créateur
if (!canModifyEvent(existingEvent, userId)) {
logger.error("[ERROR] L'utilisateur {} n'a pas les permissions pour modifier l'événement {}", userId, event.getId());
throw new SecurityException("Vous n'avez pas les permissions pour modifier cet événement");
}
// Mettre à jour les détails de l'événement
existingEvent.setTitle(event.getTitle());
existingEvent.setDescription(event.getDescription());
@@ -175,6 +218,16 @@ public class EventService {
existingEvent.setCategory(event.getCategory());
existingEvent.setLink(event.getLink());
existingEvent.setImageUrl(event.getImageUrl());
existingEvent.setMaxParticipants(event.getMaxParticipants());
existingEvent.setTags(event.getTags());
existingEvent.setOrganizer(event.getOrganizer());
existingEvent.setParticipationFee(event.getParticipationFee());
existingEvent.setPrivacyRules(event.getPrivacyRules());
existingEvent.setTransportInfo(event.getTransportInfo());
existingEvent.setAccommodationInfo(event.getAccommodationInfo());
existingEvent.setAccessibilityInfo(event.getAccessibilityInfo());
existingEvent.setParkingInfo(event.getParkingInfo());
existingEvent.setSecurityProtocol(event.getSecurityProtocol());
existingEvent.setStatus(event.getStatus());
// Persiste les modifications dans la base de données