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