From 1cec45701198f24563a68155ebe05231fc3ad33d Mon Sep 17 00:00:00 2001 From: vincentRamiere Date: Tue, 19 Aug 2025 16:09:15 +0200 Subject: [PATCH] =?UTF-8?q?Fonctionalit=C3=A9=20CRUD=20pour=20restaurant?= =?UTF-8?q?=20et=20am=C3=A9lioration=20du=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/RestaurantController.java | 91 +++++++++++++++++++ .../models/Restaurant.java | 5 +- .../repository/RestaurantRepository.java | 16 ++++ .../service/RestaurantService.java | 78 ++++++++++++++++ 4 files changed, 189 insertions(+), 1 deletion(-) create mode 100644 src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/controller/RestaurantController.java create mode 100644 src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/repository/RestaurantRepository.java create mode 100644 src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/service/RestaurantService.java diff --git a/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/controller/RestaurantController.java b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/controller/RestaurantController.java new file mode 100644 index 0000000..2ec6436 --- /dev/null +++ b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/controller/RestaurantController.java @@ -0,0 +1,91 @@ +package fr.vincent.ramiere.mangerautourdesimplonback.controller; + +import fr.vincent.ramiere.mangerautourdesimplonback.models.Restaurant; +import fr.vincent.ramiere.mangerautourdesimplonback.service.RestaurantService; + +import java.util.List; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.PutMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import lombok.AllArgsConstructor; + +/** + * Controleur REST pour la gestion des restaurants. + * Expose les endpoints de l'API pour les opérations CRUD. + */ +@RestController +@RequestMapping("/api/v1/restaurants") +@AllArgsConstructor +public class RestaurantController { + private final RestaurantService restaurantService; + + /** + * Endpoint pour récupérer la liste de tous les restaurants. + * @return une ResponseEntity contenant la liste des restaurants et le statut HTTP OK. + */ + @GetMapping + public ResponseEntity> getAllRestaurants() { + List restaurants = restaurantService.getAllRestaurants(); + return new ResponseEntity<>(restaurants, HttpStatus.OK); + } + + /** + * Endpoint pour récupérer un restaurant par son identifiant. + * @param id L'identifiant du restaurant. + * @return une ResponseEntity contenant le restaurant s'il est trouvé (OK), sinon NOT_FOUND. + */ + @GetMapping("/{id}") + public ResponseEntity getRestaurantById(@PathVariable Integer id) { + return restaurantService.getRestaurantById(id) + .map(restaurant -> new ResponseEntity<>(restaurant, HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + /** + * Endpoint pour créer un nouveau restaurant. + * @param restaurant Le restaurant à créer. + * @return une ResponseEntity contenant le restaurant créé et le statut CREATED. + */ + @PostMapping + public ResponseEntity createRestaurant(@RequestBody Restaurant restaurant) { + Restaurant savedRestaurant = restaurantService.saveRestaurant(restaurant); + return new ResponseEntity<>(savedRestaurant, HttpStatus.CREATED); + } + + /** + * Endpoint pour mettre à jour un restaurant existant. + * @param id L'identifiant du restaurant à mettre à jour. + * @param restaurantDetails Les nouvelles données du restaurant. + * @return une ResponseEntity contenant le restaurant mis à jour (OK), sinon NOT_FOUND. + */ + @PutMapping("/{id}") + public ResponseEntity updateRestaurant(@PathVariable Integer id, @RequestBody Restaurant restaurantDetails) { + return restaurantService.updateRestaurant(id, restaurantDetails) + .map(updateRestaurant -> new ResponseEntity<>(updateRestaurant, HttpStatus.OK)) + .orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND)); + } + + /** + * Endpoint pour supprimer un restaurant. + * @param id L'identifiant du restaurant à supprimer. + * @return une ResponseEntity avec le statut NO_CONTENT si la suppression réussit, + * ou NOT_FOUND si le restaurant n'existe pas. + */ + @DeleteMapping("/{id}") + public ResponseEntity deleteRestaurant(@PathVariable Integer id) { + if (restaurantService.getRestaurantById(id).isPresent()) { + restaurantService.deleteRestaurant(id); + return ResponseEntity.noContent().build(); + } + return ResponseEntity.notFound().build(); + } +} diff --git a/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/models/Restaurant.java b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/models/Restaurant.java index ea3d106..58d95eb 100644 --- a/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/models/Restaurant.java +++ b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/models/Restaurant.java @@ -13,7 +13,10 @@ import java.util.Collection; */ @Entity @Table(name = "restaurant") -@Data +@Getter +@Setter +@ToString(exclude = {"typerestaus", "preference"}) +@EqualsAndHashCode(exclude = {"typerestaus", "preference"}) @NoArgsConstructor @AllArgsConstructor @Builder diff --git a/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/repository/RestaurantRepository.java b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/repository/RestaurantRepository.java new file mode 100644 index 0000000..784d470 --- /dev/null +++ b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/repository/RestaurantRepository.java @@ -0,0 +1,16 @@ +package fr.vincent.ramiere.mangerautourdesimplonback.repository; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import fr.vincent.ramiere.mangerautourdesimplonback.models.Restaurant; + +/** + * Dépot pour l'entité Restaurant. + * Fournit les méthodes pour les opérations CRUD. + */ + +@Repository +public interface RestaurantRepository extends JpaRepository{ + +} diff --git a/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/service/RestaurantService.java b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/service/RestaurantService.java new file mode 100644 index 0000000..c6e9aaf --- /dev/null +++ b/src/main/java/fr/vincent/ramiere/mangerautourdesimplonback/service/RestaurantService.java @@ -0,0 +1,78 @@ +package fr.vincent.ramiere.mangerautourdesimplonback.service; + +import fr.vincent.ramiere.mangerautourdesimplonback.models.Restaurant; +import fr.vincent.ramiere.mangerautourdesimplonback.repository.RestaurantRepository; + +import java.util.List; +import java.util.Optional; + +import org.springframework.stereotype.Service; + +import lombok.AllArgsConstructor; + +/** + * Service pour la gestion des restaurants. + * Contient la logique métier liée aux opérations sur les restaurants. + */ +@Service +@AllArgsConstructor +public class RestaurantService { + private final RestaurantRepository restaurantRepository; + + /** + * Récupère tous les restaurants. + * @return une liste de tous les restaurants. + */ + public List getAllRestaurants() { + return restaurantRepository.findAll(); + } + + /** + * Récupère un restaurant par son identifiant. + * @param id L'identifiant du restaurant. + * @return un Optional contenant le restaurant s'il est trouvé, sinon un Optional vide. + */ + public Optional getRestaurantById(Integer id) { + return restaurantRepository.findById(id); + } + + /** + * Enregistre un nouveau restaurant. + * @param restaurant Le restaurant à enregistrer. + * @return le restaurant enregistré + */ + public Restaurant saveRestaurant(Restaurant restaurant) { + return restaurantRepository.save(restaurant); + } + + /** + * Met à jour un restaurant existant. + * @param id L'identifiant du restaurant à mettre à jour. + * @param restaurantDetails Les nouvelles informations du restaurant. + * @return le restaurant mis à jour. + */ + public Optional updateRestaurant(Integer id, Restaurant restaurantDetails) { + return restaurantRepository.findById(id) + .map(existingRestaurant -> { + existingRestaurant.setNom(restaurantDetails.getNom()); + existingRestaurant.setAdresse(restaurantDetails.getAdresse()); + existingRestaurant.setTelephone(restaurantDetails.getTelephone()); + existingRestaurant.setAccesPMR(restaurantDetails.getAccesPMR()); + existingRestaurant.setAEmporter(restaurantDetails.getAEmporter()); + existingRestaurant.setSurPlace(restaurantDetails.getSurPlace()); + existingRestaurant.setPrix(restaurantDetails.getPrix()); + existingRestaurant.setLatitude(restaurantDetails.getLatitude()); + existingRestaurant.setLongitude(restaurantDetails.getLongitude()); + existingRestaurant.setWebsite(restaurantDetails.getWebsite()); + return restaurantRepository.save(existingRestaurant); + }); + } + + /** + * Supprime un restaurant par son identifiant. + * @param id L'identifiant du restaurant à supprimer. + */ + public void deleteRestaurant(Integer id) { + restaurantRepository.deleteById(id); + } +}