Sync: code local unifié
Synchronisation du code source local (fait foi). Signed-off-by: lions dev Team
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
package dev.lions.unionflow.server.service;
|
||||
|
||||
import dev.lions.unionflow.server.entity.Evenement;
|
||||
import dev.lions.unionflow.server.entity.Evenement.StatutEvenement;
|
||||
import dev.lions.unionflow.server.entity.Evenement.TypeEvenement;
|
||||
import dev.lions.unionflow.server.repository.EvenementRepository;
|
||||
import dev.lions.unionflow.server.repository.MembreRepository;
|
||||
import dev.lions.unionflow.server.repository.OrganisationRepository;
|
||||
@@ -13,6 +11,8 @@ import jakarta.enterprise.context.ApplicationScoped;
|
||||
import jakarta.inject.Inject;
|
||||
import jakarta.transaction.Transactional;
|
||||
import java.time.LocalDateTime;
|
||||
import jakarta.ws.rs.NotFoundException;
|
||||
import org.hibernate.Hibernate;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
@@ -20,7 +20,8 @@ import java.util.UUID;
|
||||
import org.jboss.logging.Logger;
|
||||
|
||||
/**
|
||||
* Service métier pour la gestion des événements Version simplifiée pour tester les imports et
|
||||
* Service métier pour la gestion des événements Version simplifiée pour tester
|
||||
* les imports et
|
||||
* Lombok
|
||||
*
|
||||
* @author UnionFlow Team
|
||||
@@ -32,13 +33,17 @@ public class EvenementService {
|
||||
|
||||
private static final Logger LOG = Logger.getLogger(EvenementService.class);
|
||||
|
||||
@Inject EvenementRepository evenementRepository;
|
||||
@Inject
|
||||
EvenementRepository evenementRepository;
|
||||
|
||||
@Inject MembreRepository membreRepository;
|
||||
@Inject
|
||||
MembreRepository membreRepository;
|
||||
|
||||
@Inject OrganisationRepository organisationRepository;
|
||||
@Inject
|
||||
OrganisationRepository organisationRepository;
|
||||
|
||||
@Inject KeycloakService keycloakService;
|
||||
@Inject
|
||||
KeycloakService keycloakService;
|
||||
|
||||
/**
|
||||
* Crée un nouvel événement
|
||||
@@ -69,7 +74,7 @@ public class EvenementService {
|
||||
|
||||
// Valeurs par défaut
|
||||
if (evenement.getStatut() == null) {
|
||||
evenement.setStatut(StatutEvenement.PLANIFIE);
|
||||
evenement.setStatut("PLANIFIE");
|
||||
}
|
||||
if (evenement.getActif() == null) {
|
||||
evenement.setActif(true);
|
||||
@@ -90,7 +95,7 @@ public class EvenementService {
|
||||
/**
|
||||
* Met à jour un événement existant
|
||||
*
|
||||
* @param id l'UUID de l'événement
|
||||
* @param id l'UUID de l'événement
|
||||
* @param evenementMisAJour les nouvelles données
|
||||
* @return l'événement mis à jour
|
||||
* @throws IllegalArgumentException si l'événement n'existe pas
|
||||
@@ -99,11 +104,10 @@ public class EvenementService {
|
||||
public Evenement mettreAJourEvenement(UUID id, Evenement evenementMisAJour) {
|
||||
LOG.infof("Mise à jour événement ID: %s", id);
|
||||
|
||||
Evenement evenementExistant =
|
||||
evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new IllegalArgumentException("Événement non trouvé avec l'ID: " + id));
|
||||
Evenement evenementExistant = evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new NotFoundException("Événement non trouvé avec l'ID: " + id));
|
||||
|
||||
// Vérifier les permissions
|
||||
if (!peutModifierEvenement(evenementExistant)) {
|
||||
@@ -130,6 +134,9 @@ public class EvenementService {
|
||||
evenementExistant.setContactOrganisateur(evenementMisAJour.getContactOrganisateur());
|
||||
evenementExistant.setMaterielRequis(evenementMisAJour.getMaterielRequis());
|
||||
evenementExistant.setVisiblePublic(evenementMisAJour.getVisiblePublic());
|
||||
if (evenementMisAJour.getStatut() != null) {
|
||||
evenementExistant.setStatut(evenementMisAJour.getStatut());
|
||||
}
|
||||
|
||||
// Métadonnées de modification
|
||||
evenementExistant.setModifiePar(keycloakService.getCurrentUserEmail());
|
||||
@@ -137,6 +144,10 @@ public class EvenementService {
|
||||
evenementRepository.update(evenementExistant);
|
||||
|
||||
LOG.infof("Événement mis à jour avec succès: ID=%s", id);
|
||||
// Initialiser les relations lazy pour éviter LazyInitializationException lors
|
||||
// de la sérialisation JSON
|
||||
Hibernate.initialize(evenementExistant.getOrganisation());
|
||||
Hibernate.initialize(evenementExistant.getOrganisateur());
|
||||
return evenementExistant;
|
||||
}
|
||||
|
||||
@@ -167,7 +178,7 @@ public class EvenementService {
|
||||
}
|
||||
|
||||
/** Liste les événements par type */
|
||||
public List<Evenement> listerParType(TypeEvenement type, Page page, Sort sort) {
|
||||
public List<Evenement> listerParType(String type, Page page, Sort sort) {
|
||||
return evenementRepository.findByType(type, page, sort);
|
||||
}
|
||||
|
||||
@@ -181,11 +192,10 @@ public class EvenementService {
|
||||
public void supprimerEvenement(UUID id) {
|
||||
LOG.infof("Suppression événement ID: %s", id);
|
||||
|
||||
Evenement evenement =
|
||||
evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new IllegalArgumentException("Événement non trouvé avec l'ID: " + id));
|
||||
Evenement evenement = evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new NotFoundException("Événement non trouvé avec l'ID: " + id));
|
||||
|
||||
// Vérifier les permissions
|
||||
if (!peutModifierEvenement(evenement)) {
|
||||
@@ -209,19 +219,18 @@ public class EvenementService {
|
||||
/**
|
||||
* Change le statut d'un événement
|
||||
*
|
||||
* @param id l'UUID de l'événement
|
||||
* @param id l'UUID de l'événement
|
||||
* @param nouveauStatut le nouveau statut
|
||||
* @return l'événement mis à jour
|
||||
*/
|
||||
@Transactional
|
||||
public Evenement changerStatut(UUID id, StatutEvenement nouveauStatut) {
|
||||
public Evenement changerStatut(UUID id, String nouveauStatut) {
|
||||
LOG.infof("Changement statut événement ID: %s vers %s", id, nouveauStatut);
|
||||
|
||||
Evenement evenement =
|
||||
evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new IllegalArgumentException("Événement non trouvé avec l'ID: " + id));
|
||||
Evenement evenement = evenementRepository
|
||||
.findByIdOptional(id)
|
||||
.orElseThrow(
|
||||
() -> new NotFoundException("Événement non trouvé avec l'ID: " + id));
|
||||
|
||||
// Vérifier les permissions
|
||||
if (!peutModifierEvenement(evenement)) {
|
||||
@@ -320,9 +329,9 @@ public class EvenementService {
|
||||
|
||||
/** Valide un changement de statut */
|
||||
private void validerChangementStatut(
|
||||
StatutEvenement statutActuel, StatutEvenement nouveauStatut) {
|
||||
String statutActuel, String nouveauStatut) {
|
||||
// Règles de transition simplifiées pour la version mobile
|
||||
if (statutActuel == StatutEvenement.TERMINE || statutActuel == StatutEvenement.ANNULE) {
|
||||
if ("TERMINE".equals(statutActuel) || "ANNULE".equals(statutActuel)) {
|
||||
throw new IllegalArgumentException(
|
||||
"Impossible de changer le statut d'un événement terminé ou annulé");
|
||||
}
|
||||
@@ -337,4 +346,22 @@ public class EvenementService {
|
||||
String utilisateurActuel = keycloakService.getCurrentUserEmail();
|
||||
return utilisateurActuel != null && utilisateurActuel.equals(evenement.getCreePar());
|
||||
}
|
||||
|
||||
/**
|
||||
* Indique si l'utilisateur connecté est inscrit à l'événement.
|
||||
* Utilisé par l'app mobile pour afficher le statut d'inscription sur la page détail.
|
||||
*/
|
||||
public boolean isUserInscrit(UUID evenementId) {
|
||||
Evenement evenement = evenementRepository.findByIdOptional(evenementId).orElse(null);
|
||||
if (evenement == null) {
|
||||
return false;
|
||||
}
|
||||
String email = keycloakService.getCurrentUserEmail();
|
||||
if (email == null || email.isBlank()) {
|
||||
return false;
|
||||
}
|
||||
return membreRepository.findByEmail(email)
|
||||
.map(m -> evenement.isMemberInscrit(m.getId()))
|
||||
.orElse(false);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user