144 lines
4.3 KiB
Java
144 lines
4.3 KiB
Java
package dev.lions.unionflow.server.dto;
|
|
|
|
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
|
|
import dev.lions.unionflow.server.entity.Evenement;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDateTime;
|
|
import java.util.UUID;
|
|
import lombok.AllArgsConstructor;
|
|
import lombok.Builder;
|
|
import lombok.Data;
|
|
import lombok.NoArgsConstructor;
|
|
|
|
/**
|
|
* DTO pour l'API mobile - Mapping des champs de l'entité Evenement vers le
|
|
* format attendu par
|
|
* l'application mobile Flutter
|
|
*
|
|
* @author UnionFlow Team
|
|
* @version 2.0
|
|
* @since 2025-01-16
|
|
*/
|
|
@Data
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
@Builder
|
|
@JsonIgnoreProperties(ignoreUnknown = true)
|
|
public class EvenementMobileDTO {
|
|
|
|
private UUID id;
|
|
private String titre;
|
|
private String description;
|
|
private LocalDateTime dateDebut;
|
|
private LocalDateTime dateFin;
|
|
private String lieu;
|
|
private String adresse;
|
|
private String ville;
|
|
private String codePostal;
|
|
|
|
// Mapping: typeEvenement -> type
|
|
private String type;
|
|
|
|
// Mapping: statut -> statut (OK)
|
|
private String statut;
|
|
|
|
// Mapping: capaciteMax -> maxParticipants
|
|
private Integer maxParticipants;
|
|
|
|
// Nombre de participants actuels (calculé depuis les inscriptions)
|
|
private Integer participantsActuels;
|
|
|
|
// IDs et noms pour les relations
|
|
private UUID organisateurId;
|
|
private String organisateurNom;
|
|
private UUID organisationId;
|
|
private String organisationNom;
|
|
|
|
// Priorité (à ajouter dans l'entité si nécessaire)
|
|
private String priorite;
|
|
|
|
// Mapping: visiblePublic -> estPublic
|
|
private Boolean estPublic;
|
|
|
|
// Mapping: inscriptionRequise -> inscriptionRequise (OK)
|
|
private Boolean inscriptionRequise;
|
|
|
|
// Mapping: prix -> cout
|
|
private BigDecimal cout;
|
|
|
|
// Devise
|
|
private String devise;
|
|
|
|
// Tags (à implémenter si nécessaire)
|
|
private String[] tags;
|
|
|
|
// URLs
|
|
private String imageUrl;
|
|
private String documentUrl;
|
|
|
|
// Notes
|
|
private String notes;
|
|
|
|
// Dates de création/modification
|
|
private LocalDateTime dateCreation;
|
|
private LocalDateTime dateModification;
|
|
|
|
// Actif
|
|
private Boolean actif;
|
|
|
|
/**
|
|
* Convertit une entité Evenement en DTO mobile
|
|
*
|
|
* @param evenement L'entité à convertir
|
|
* @return Le DTO mobile
|
|
*/
|
|
public static EvenementMobileDTO fromEntity(Evenement evenement) {
|
|
if (evenement == null) {
|
|
return null;
|
|
}
|
|
|
|
return EvenementMobileDTO.builder()
|
|
.id(evenement.getId()) // Utilise getId() depuis BaseEntity
|
|
.titre(evenement.getTitre())
|
|
.description(evenement.getDescription())
|
|
.dateDebut(evenement.getDateDebut())
|
|
.dateFin(evenement.getDateFin())
|
|
.lieu(evenement.getLieu())
|
|
.adresse(evenement.getAdresse())
|
|
.ville(null) // Pas de champ ville dans l'entité
|
|
.codePostal(null) // Pas de champ codePostal dans l'entité
|
|
// Mapping des enums
|
|
.type(evenement.getTypeEvenement() != null ? evenement.getTypeEvenement() : null)
|
|
.statut(evenement.getStatut() != null ? evenement.getStatut() : "PLANIFIE")
|
|
// Mapping des champs renommés
|
|
.maxParticipants(evenement.getCapaciteMax())
|
|
.participantsActuels(evenement.getNombreInscrits())
|
|
// Relations (gestion sécurisée des lazy loading)
|
|
.organisateurId(evenement.getOrganisateur() != null ? evenement.getOrganisateur().getId() : null)
|
|
.organisateurNom(evenement.getOrganisateur() != null ? evenement.getOrganisateur().getNomComplet() : null)
|
|
.organisationId(evenement.getOrganisation() != null ? evenement.getOrganisation().getId() : null)
|
|
.organisationNom(evenement.getOrganisation() != null ? evenement.getOrganisation().getNom() : null)
|
|
// Priorité (valeur par défaut)
|
|
.priorite("MOYENNE")
|
|
// Mapping booléens
|
|
.estPublic(evenement.getVisiblePublic())
|
|
.inscriptionRequise(evenement.getInscriptionRequise())
|
|
// Mapping prix -> cout
|
|
.cout(evenement.getPrix())
|
|
.devise("XOF")
|
|
// Tags vides pour l'instant
|
|
.tags(new String[] {})
|
|
// URLs (à implémenter si nécessaire)
|
|
.imageUrl(null)
|
|
.documentUrl(null)
|
|
// Notes
|
|
.notes(evenement.getInstructionsParticulieres())
|
|
// Dates
|
|
.dateCreation(evenement.getDateCreation())
|
|
.dateModification(evenement.getDateModification())
|
|
// Actif
|
|
.actif(evenement.getActif())
|
|
.build();
|
|
}
|
|
}
|