71 lines
2.8 KiB
Java
71 lines
2.8 KiB
Java
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<Preference> 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<Preference> saveOrUpdatePreference(Integer personneId, Integer restaurantId, Integer note,
|
|
Boolean favori) {
|
|
Optional<Personne> personneOpt = personneRepository.findById(personneId);
|
|
Optional<Restaurant> 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));
|
|
}
|
|
}
|