Feat: crud pour les notes et les préférences

This commit is contained in:
vincentRamiere 2025-10-20 22:28:40 +02:00
parent 4402a2ae2b
commit 0573f58a90
3 changed files with 152 additions and 0 deletions

View file

@ -0,0 +1,64 @@
package fr.vincent.ramiere.mangerautourdesimplonback.controller;
import fr.vincent.ramiere.mangerautourdesimplonback.models.Preference;
import fr.vincent.ramiere.mangerautourdesimplonback.service.PreferenceService;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* Controleur REST pour la gestion des préférences des utilisateurs.
*/
@RestController
@RequestMapping("/api/v1/preferences")
@AllArgsConstructor
public class PreferenceController {
private final PreferenceService preferenceService;
/**
* DTO pour recevoir les données de préférence.
*/
@Data
static class PreferenceRequest {
private Integer personneId;
private Integer restaurantId;
private Integer note;
private Boolean favori;
}
/**
* Endpoint pour récupérer toutes les préférences d'un utilisateur.
*
* @param personneId L'ID de l'utilisateur.
* @return une ResponseEntity contenant la liste des préférences et le statut
* HTTP OK.
*/
@GetMapping("/user/{personneId}")
public ResponseEntity<List<Preference>> getPreferencesByPersonneId(@PathVariable Integer personneId) {
List<Preference> preferences = preferenceService.getPreferencesByPersonneId(personneId);
return ResponseEntity.ok(preferences);
}
/**
* Endpoint pour créer ou mettre à jour une préférence (note et/ou favori).
*
* @param request Le corps de la requête contenant les détails de la préférence.
* @return une ResponseEntity contenant la préférence sauvegardée (OK) ou
* NOT_FOUND si l'utilisateur ou le restaurant n'existe pas.
*/
@PutMapping
public ResponseEntity<Preference> saveOrUpdatePreference(@RequestBody PreferenceRequest request) {
return preferenceService.saveOrUpdatePreference(
request.getPersonneId(),
request.getRestaurantId(),
request.getNote(),
request.getFavori())
.map(ResponseEntity::ok)
.orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
}

View file

@ -0,0 +1,17 @@
package fr.vincent.ramiere.mangerautourdesimplonback.repository;
import fr.vincent.ramiere.mangerautourdesimplonback.models.Preference;
import fr.vincent.ramiere.mangerautourdesimplonback.models.PreferencePK;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Repository pour l'entité Preference.
* Fournit les méthodes pour les opérations CRUD sur les préférences.
*/
@Repository
public interface PreferenceRepository extends JpaRepository<Preference, PreferencePK> {
List<Preference> findByPreferencePK_Personne_Id(Integer personneId);
}

View file

@ -0,0 +1,71 @@
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));
}
}