119 lines
4.5 KiB
Java
119 lines
4.5 KiB
Java
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);
|
|
}
|
|
}
|
|
|