Feat: crud pour les notes et les préférences
This commit is contained in:
parent
4402a2ae2b
commit
0573f58a90
3 changed files with 152 additions and 0 deletions
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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);
|
||||||
|
}
|
||||||
|
|
@ -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));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Add table
Reference in a new issue