From 0f14db2706e2976bc369e2f8f1485c4cc92c9483 Mon Sep 17 00:00:00 2001 From: Robert Stolz Date: Fri, 15 Nov 2024 14:19:26 +0100 Subject: [PATCH 1/2] dto and clean frontend --- .../controller/RestaurantController.java | 68 +++++++++++++++---- .../java/reacp/model/RestaurantModelDto.java | 10 +++ frontend/src/App.tsx | 9 +-- frontend/src/components/Details.tsx | 10 --- frontend/src/components/Footer.tsx | 0 frontend/src/components/Home/Home.tsx | 0 frontend/src/components/Home/SearchBar.tsx | 0 frontend/src/components/NavBar.tsx | 0 frontend/src/components/RestaurantCard.tsx | 51 -------------- frontend/src/components/Wishlist.tsx | 0 .../src/components/{ => model}/Restaurant.ts | 0 .../components/{ => model}/WishlistStatus.ts | 0 12 files changed, 67 insertions(+), 81 deletions(-) create mode 100644 backend/src/main/java/reacp/model/RestaurantModelDto.java create mode 100644 frontend/src/components/Footer.tsx create mode 100644 frontend/src/components/Home/Home.tsx create mode 100644 frontend/src/components/Home/SearchBar.tsx create mode 100644 frontend/src/components/NavBar.tsx create mode 100644 frontend/src/components/Wishlist.tsx rename frontend/src/components/{ => model}/Restaurant.ts (100%) rename frontend/src/components/{ => model}/WishlistStatus.ts (100%) diff --git a/backend/src/main/java/reacp/controller/RestaurantController.java b/backend/src/main/java/reacp/controller/RestaurantController.java index b2e689b..d9134da 100644 --- a/backend/src/main/java/reacp/controller/RestaurantController.java +++ b/backend/src/main/java/reacp/controller/RestaurantController.java @@ -1,8 +1,8 @@ package reacp.controller; - import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.*; import reacp.model.RestaurantModel; +import reacp.model.RestaurantModelDto; import reacp.services.RestaurantService; import java.util.List; @@ -15,33 +15,75 @@ public class RestaurantController { private final RestaurantService restaurantService; @GetMapping - public List getAllRestaurants(){ - return restaurantService.getAllRestaurants(); + public List getAllRestaurants(){ + List restaurantModels = restaurantService.getAllRestaurants(); + return restaurantModels.stream().map(restaurantModel -> new RestaurantModelDto( + restaurantModel.name(), + restaurantModel.city(), + restaurantModel.category(), + restaurantModel.description(), + restaurantModel.status() + )).toList(); } @GetMapping("/{id}") - public RestaurantModel getRestaurantById(@PathVariable String id){ - return restaurantService.getRestaurantById(id); + public RestaurantModelDto getRestaurantById(@PathVariable String id){ + RestaurantModel restaurantModel = restaurantService.getRestaurantById(id); + return new RestaurantModelDto( + restaurantModel.name(), + restaurantModel.city(), + restaurantModel.category(), + restaurantModel.description(), + restaurantModel.status() + ); } @PostMapping - public RestaurantModel postRestaurant(@RequestBody RestaurantModel restaurantModel){ - return restaurantService.addRestaurant(restaurantModel); + public RestaurantModelDto postRestaurant(@RequestBody RestaurantModel restaurantModel){ + RestaurantModel newRestaurantModel = restaurantService.addRestaurant(restaurantModel); + return new RestaurantModelDto( + newRestaurantModel.name(), + newRestaurantModel.city(), + newRestaurantModel.category(), + newRestaurantModel.description(), + newRestaurantModel.status() + ); } @PostMapping("/update-all") - public List updateAll(@RequestBody List restaurantModels){ - return restaurantService.updateAll(restaurantModels); + public List updateAll(@RequestBody List restaurantModels){ + List updatedAllRestaurants = restaurantService.updateAll(restaurantModels); + return updatedAllRestaurants.stream().map(restaurantModel -> new RestaurantModelDto( + restaurantModel.name(), + restaurantModel.city(), + restaurantModel.category(), + restaurantModel.description(), + restaurantModel.status() + )).toList(); } @PutMapping("/{id}") - public RestaurantModel putRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ - return restaurantService.updateRestaurantWithPut(id, restaurantModel); + public RestaurantModelDto putRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ + RestaurantModel newRestaurantModel = restaurantService.updateRestaurantWithPut(id, restaurantModel); + return new RestaurantModelDto( + newRestaurantModel.name(), + newRestaurantModel.city(), + newRestaurantModel.category(), + newRestaurantModel.description(), + newRestaurantModel.status() + ); } @PatchMapping("/{id}") - public RestaurantModel patchRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ - return restaurantService.updateRestaurantWithPatch(id, restaurantModel); + public RestaurantModelDto patchRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ + RestaurantModel newRestaurantModel = restaurantService.updateRestaurantWithPatch(id, restaurantModel); + return new RestaurantModelDto( + newRestaurantModel.name(), + newRestaurantModel.city(), + newRestaurantModel.category(), + newRestaurantModel.description(), + newRestaurantModel.status() + ); } @DeleteMapping("/{id}") diff --git a/backend/src/main/java/reacp/model/RestaurantModelDto.java b/backend/src/main/java/reacp/model/RestaurantModelDto.java new file mode 100644 index 0000000..00090b6 --- /dev/null +++ b/backend/src/main/java/reacp/model/RestaurantModelDto.java @@ -0,0 +1,10 @@ +package reacp.model; + +public record RestaurantModelDto( + String name, + String city, + String category, + String description, + WishlistStatus status +) { +} \ No newline at end of file diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index bf707e0..03b6eb4 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,16 +1,11 @@ import './App.css' -import RestaurantCard from "./components/RestaurantCard.tsx"; -import Details from "./components/Details.tsx"; -import {BrowserRouter as Router, Route, Routes} from "react-router-dom"; +import {BrowserRouter as Router} from "react-router-dom"; export default function App() { return ( <> - - } /> - } /> - +

App

); diff --git a/frontend/src/components/Details.tsx b/frontend/src/components/Details.tsx index fb35d40..e69de29 100644 --- a/frontend/src/components/Details.tsx +++ b/frontend/src/components/Details.tsx @@ -1,10 +0,0 @@ - -export default function Details(){ - - return ( - <> -

Details

-

Details of the restaurant

- - ); -} \ No newline at end of file diff --git a/frontend/src/components/Footer.tsx b/frontend/src/components/Footer.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/Home/Home.tsx b/frontend/src/components/Home/Home.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/Home/SearchBar.tsx b/frontend/src/components/Home/SearchBar.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/NavBar.tsx b/frontend/src/components/NavBar.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/RestaurantCard.tsx b/frontend/src/components/RestaurantCard.tsx index 8aa800e..e69de29 100644 --- a/frontend/src/components/RestaurantCard.tsx +++ b/frontend/src/components/RestaurantCard.tsx @@ -1,51 +0,0 @@ -import {Restaurant} from "./Restaurant.ts"; -import axios from "axios"; -import {useEffect, useState} from "react"; -import {WishlistStatus} from "./WishlistStatus.ts"; - -type Props = { - restaurant: Restaurant; - onAddToWishlist: (id: string) => void; - onRemoveFromWishlist: (id: string) => void; - wishlistStatus: WishlistStatus; - onRestaurantUpdate: (restaurant: Restaurant) => void; -} - -export default function RestaurantCard() { - - const [restaurants, setRestaurants] = useState([]); - - function fetchRestaurants() { - axios.get("api/restaurant") - .then((response) => { - setRestaurants(response.data); - }) - .catch((error) => console.error("Error fetching restaurants:", error)); - } - - useEffect(fetchRestaurants, []); - - if(!restaurants) { - return "Loading..."; - } - - - return ( - <> -
-

Restaurants

-
- {restaurants.map((restaurant) => ( -
-

{restaurant.name}

-

{restaurant.city}

-

{restaurant.category}

-

{restaurant.description}

-
- ))} -
- -
- - ); -} \ No newline at end of file diff --git a/frontend/src/components/Wishlist.tsx b/frontend/src/components/Wishlist.tsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/components/Restaurant.ts b/frontend/src/components/model/Restaurant.ts similarity index 100% rename from frontend/src/components/Restaurant.ts rename to frontend/src/components/model/Restaurant.ts diff --git a/frontend/src/components/WishlistStatus.ts b/frontend/src/components/model/WishlistStatus.ts similarity index 100% rename from frontend/src/components/WishlistStatus.ts rename to frontend/src/components/model/WishlistStatus.ts From eb113334772f2a6d18093c3dd0469abbe783b14e Mon Sep 17 00:00:00 2001 From: Robert Stolz Date: Fri, 15 Nov 2024 15:00:13 +0100 Subject: [PATCH 2/2] dto final changes --- .../controller/RestaurantController.java | 99 +++++++++---------- 1 file changed, 44 insertions(+), 55 deletions(-) diff --git a/backend/src/main/java/reacp/controller/RestaurantController.java b/backend/src/main/java/reacp/controller/RestaurantController.java index d9134da..762b83d 100644 --- a/backend/src/main/java/reacp/controller/RestaurantController.java +++ b/backend/src/main/java/reacp/controller/RestaurantController.java @@ -14,78 +14,67 @@ public class RestaurantController { private final RestaurantService restaurantService; - @GetMapping - public List getAllRestaurants(){ - List restaurantModels = restaurantService.getAllRestaurants(); - return restaurantModels.stream().map(restaurantModel -> new RestaurantModelDto( - restaurantModel.name(), - restaurantModel.city(), - restaurantModel.category(), - restaurantModel.description(), - restaurantModel.status() - )).toList(); + + @GetMapping() + public List getAllRestaurants(){ + return restaurantService.getAllRestaurants(); } @GetMapping("/{id}") - public RestaurantModelDto getRestaurantById(@PathVariable String id){ - RestaurantModel restaurantModel = restaurantService.getRestaurantById(id); - return new RestaurantModelDto( - restaurantModel.name(), - restaurantModel.city(), - restaurantModel.category(), - restaurantModel.description(), - restaurantModel.status() - ); + public RestaurantModel getRestaurantById(@PathVariable String id){ + return restaurantService.getRestaurantById(id); } + @PostMapping - public RestaurantModelDto postRestaurant(@RequestBody RestaurantModel restaurantModel){ - RestaurantModel newRestaurantModel = restaurantService.addRestaurant(restaurantModel); - return new RestaurantModelDto( - newRestaurantModel.name(), - newRestaurantModel.city(), - newRestaurantModel.category(), - newRestaurantModel.description(), - newRestaurantModel.status() - ); + public RestaurantModel postRestaurant(@RequestBody RestaurantModelDto restaurantModelDto){ + return restaurantService.addRestaurant( + new RestaurantModel( + null, + restaurantModelDto.name(), + restaurantModelDto.city(), + restaurantModelDto.category(), + restaurantModelDto.description(), + restaurantModelDto.status() + )); } + @PostMapping("/update-all") - public List updateAll(@RequestBody List restaurantModels){ - List updatedAllRestaurants = restaurantService.updateAll(restaurantModels); - return updatedAllRestaurants.stream().map(restaurantModel -> new RestaurantModelDto( - restaurantModel.name(), - restaurantModel.city(), - restaurantModel.category(), - restaurantModel.description(), - restaurantModel.status() - )).toList(); + public List updateAll(@RequestBody List restaurantModels){ + return restaurantService.updateAll(restaurantModels); } + + @PutMapping("/{id}") - public RestaurantModelDto putRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ - RestaurantModel newRestaurantModel = restaurantService.updateRestaurantWithPut(id, restaurantModel); - return new RestaurantModelDto( - newRestaurantModel.name(), - newRestaurantModel.city(), - newRestaurantModel.category(), - newRestaurantModel.description(), - newRestaurantModel.status() - ); + public RestaurantModel putRestaurant(@PathVariable String id, @RequestBody RestaurantModelDto restaurantModeldto){ + return restaurantService.updateRestaurantWithPut(id, + new RestaurantModel( + id, + restaurantModeldto.name(), + restaurantModeldto.city(), + restaurantModeldto.category(), + restaurantModeldto.description(), + restaurantModeldto.status() + )); } + @PatchMapping("/{id}") - public RestaurantModelDto patchRestaurant(@PathVariable String id, @RequestBody RestaurantModel restaurantModel){ - RestaurantModel newRestaurantModel = restaurantService.updateRestaurantWithPatch(id, restaurantModel); - return new RestaurantModelDto( - newRestaurantModel.name(), - newRestaurantModel.city(), - newRestaurantModel.category(), - newRestaurantModel.description(), - newRestaurantModel.status() - ); + public RestaurantModel patchRestaurant(@PathVariable String id, @RequestBody RestaurantModelDto restaurantModeldto){ + return restaurantService.updateRestaurantWithPatch(id, + new RestaurantModel( + id, + restaurantModeldto.name(), + restaurantModeldto.city(), + restaurantModeldto.category(), + restaurantModeldto.description(), + restaurantModeldto.status() + )); } + @DeleteMapping("/{id}") public void deleteRestaurant(@PathVariable String id){ restaurantService.deleteRestaurant(id);