feat: Système complet de gestion des établissements (backend) - Entités JPA pour Establishment, EstablishmentMedia, EstablishmentRating - DTOs pour création, mise à jour et réponses - Repositories Panache pour accès aux données - Services avec logique métier et validation - Resources REST avec tous les endpoints CRUD - Gestion des médias (photos/vidéos) - Système de notation avec statistiques

This commit is contained in:
dahoud
2026-01-13 20:45:13 +00:00
parent c0b1863467
commit 56d0aad6a6
20 changed files with 1886 additions and 0 deletions

View File

@@ -0,0 +1,118 @@
package com.lions.dev.service;
import com.lions.dev.entity.establishment.Establishment;
import com.lions.dev.entity.establishment.EstablishmentMedia;
import com.lions.dev.entity.establishment.MediaType;
import com.lions.dev.entity.users.Users;
import com.lions.dev.repository.EstablishmentMediaRepository;
import com.lions.dev.repository.EstablishmentRepository;
import com.lions.dev.repository.UsersRepository;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.transaction.Transactional;
import org.jboss.logging.Logger;
import java.util.List;
import java.util.UUID;
/**
* Service de gestion des médias d'établissements.
* Ce service contient la logique métier pour l'upload, la récupération et la suppression des médias.
*/
@ApplicationScoped
public class EstablishmentMediaService {
@Inject
EstablishmentMediaRepository mediaRepository;
@Inject
EstablishmentRepository establishmentRepository;
@Inject
UsersRepository usersRepository;
private static final Logger LOG = Logger.getLogger(EstablishmentMediaService.class);
/**
* Récupère tous les médias d'un établissement.
*
* @param establishmentId L'ID de l'établissement
* @return Liste des médias de l'établissement
*/
public List<EstablishmentMedia> getMediaByEstablishmentId(UUID establishmentId) {
LOG.info("Récupération des médias pour l'établissement : " + establishmentId);
return mediaRepository.findByEstablishmentId(establishmentId);
}
/**
* Upload un nouveau média pour un établissement.
*
* @param establishmentId L'ID de l'établissement
* @param mediaUrl L'URL du média
* @param mediaType Le type de média (PHOTO ou VIDEO)
* @param uploadedByUserId L'ID de l'utilisateur qui upload
* @param thumbnailUrl L'URL de la miniature (optionnel, pour les vidéos)
* @return Le média créé
*/
@Transactional
public EstablishmentMedia uploadMedia(UUID establishmentId, String mediaUrl, MediaType mediaType, UUID uploadedByUserId, String thumbnailUrl) {
LOG.info("Upload d'un média pour l'établissement : " + establishmentId);
// Vérifier que l'établissement existe
Establishment establishment = establishmentRepository.findById(establishmentId);
if (establishment == null) {
LOG.error("Établissement non trouvé avec l'ID : " + establishmentId);
throw new RuntimeException("Établissement non trouvé");
}
// Vérifier que l'utilisateur existe
Users uploadedBy = usersRepository.findById(uploadedByUserId);
if (uploadedBy == null) {
LOG.error("Utilisateur non trouvé avec l'ID : " + uploadedByUserId);
throw new RuntimeException("Utilisateur non trouvé");
}
// Créer le média
EstablishmentMedia media = new EstablishmentMedia(establishment, mediaUrl, mediaType, uploadedBy);
media.setThumbnailUrl(thumbnailUrl);
// Déterminer l'ordre d'affichage (dernier média = ordre le plus élevé)
List<EstablishmentMedia> existingMedia = mediaRepository.findByEstablishmentId(establishmentId);
int maxOrder = existingMedia.stream()
.mapToInt(EstablishmentMedia::getDisplayOrder)
.max()
.orElse(-1);
media.setDisplayOrder(maxOrder + 1);
mediaRepository.persist(media);
LOG.info("Média uploadé avec succès : " + media.getId());
return media;
}
/**
* Supprime un média d'un établissement.
*
* @param establishmentId L'ID de l'établissement
* @param mediaId L'ID du média à supprimer
*/
@Transactional
public void deleteMedia(UUID establishmentId, UUID mediaId) {
LOG.info("Suppression du média " + mediaId + " de l'établissement " + establishmentId);
EstablishmentMedia media = mediaRepository.findById(mediaId);
if (media == null) {
LOG.error("Média non trouvé avec l'ID : " + mediaId);
throw new RuntimeException("Média non trouvé");
}
// Vérifier que le média appartient à l'établissement
if (!media.getEstablishment().getId().equals(establishmentId)) {
LOG.error("Le média " + mediaId + " n'appartient pas à l'établissement " + establishmentId);
throw new RuntimeException("Le média n'appartient pas à cet établissement");
}
mediaRepository.delete(media);
LOG.info("Média supprimé avec succès : " + mediaId);
}
}