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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user