package fr.vincent.ramiere.mangerautourdesimplonback.service; import fr.vincent.ramiere.mangerautourdesimplonback.models.Personne; import fr.vincent.ramiere.mangerautourdesimplonback.models.Preference; import fr.vincent.ramiere.mangerautourdesimplonback.models.PreferencePK; import fr.vincent.ramiere.mangerautourdesimplonback.models.Restaurant; import fr.vincent.ramiere.mangerautourdesimplonback.repository.PersonneRepository; import fr.vincent.ramiere.mangerautourdesimplonback.repository.PreferenceRepository; import fr.vincent.ramiere.mangerautourdesimplonback.repository.RestaurantRepository; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; import java.util.Optional; /** * Service pour la gestion des préférences des utilisateurs. */ @Service @AllArgsConstructor public class PreferenceService { private final PreferenceRepository preferenceRepository; private final PersonneRepository personneRepository; private final RestaurantRepository restaurantRepository; /** * Récupère toutes les préférences pour un utilisateur donné. * * @param personneId L'ID de l'utilisateur. * @return Une liste de préférences. */ public List getPreferencesByPersonneId(Integer personneId) { return preferenceRepository.findByPreferencePK_Personne_Id(personneId); } /** * Crée ou met à jour une préférence pour un utilisateur et un restaurant. * * @param personneId L'ID de l'utilisateur. * @param restaurantId L'ID du restaurant. * @param note La note attribuée (peut être null). * @param favori Le statut de favori (peut être null). * @return Un Optional contenant la préférence sauvegardée, ou un Optional vide * si l'utilisateur ou le restaurant n'existe pas. */ @Transactional public Optional saveOrUpdatePreference(Integer personneId, Integer restaurantId, Integer note, Boolean favori) { Optional personneOpt = personneRepository.findById(personneId); Optional restaurantOpt = restaurantRepository.findById(restaurantId); if (personneOpt.isEmpty() || restaurantOpt.isEmpty()) { return Optional.empty(); } Personne personne = personneOpt.get(); Restaurant restaurant = restaurantOpt.get(); PreferencePK preferencePK = new PreferencePK(personne, restaurant); Preference preference = preferenceRepository.findById(preferencePK) .orElse(new Preference(preferencePK)); preference.setNote(note); preference.setFavori(favori); return Optional.of(preferenceRepository.save(preference)); } }