Changeset 2518b3a
- Timestamp:
- 05/02/25 00:37:10 (2 weeks ago)
- Branches:
- main
- Children:
- c44c5ed
- Parents:
- e15e8d9
- Files:
-
- 2 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
my-react-app/src/components/ReservationConfirmation.js
re15e8d9 r2518b3a 56 56 rating: parseFloat(restaurant.rating) || null, 57 57 tableNumber: parseInt(table.id, 10), 58 restaurant : restaurant,58 restaurantId: restaurant.restaurantId, 59 59 reservationDateTime: adjustedTimeSlot, 60 60 partySize: parseInt(partySize, 10), … … 62 62 specialRequests: specialRequests.trim(), 63 63 paymentStatus: 'Pending', 64 preOrderedItems: preOrderedItems.map(item => `${item.itemName}:${item.quantity}:${item.price}`) 64 preOrderedItems: preOrderedItems.map(item => ({ 65 name: item.itemName, 66 quantity: item.quantity, 67 price: item.price 68 })) 65 69 }; 70 console.log(payload) 66 71 67 72 68 73 try { 69 const response = await axios.post('http://localhost:8081/api/reservations', payload); 74 console.log(payload) 75 const response = await axios.post('http://localhost:8081/api/reservations', payload, { 76 headers: { 77 'Content-Type': 'application/json' 78 } 79 }); 70 80 console.log('Reservation created successfully:', response.data); 71 81 navigate("/reservations") -
my-react-app/src/components/Reservations.js
re15e8d9 r2518b3a 1 import React, { useState, useEffect} from 'react';1 import React, {useState, useEffect, useContext} from 'react'; 2 2 import axios from 'axios'; 3 3 import 'bootstrap/dist/css/bootstrap.min.css'; 4 4 import {useNavigate} from "react-router-dom"; 5 5 import {jwtDecode} from "jwt-decode"; 6 import {RestaurantContext} from "./RestaurantContext"; 6 7 7 8 8 9 const Reservations = () => { 9 10 const navigate = useNavigate(); 10 11 const { restaurants } = useContext(RestaurantContext); 11 12 const [reservations, setReservations] = useState([]); 12 13 … … 24 25 const response = await axios.get(`http://localhost:8081/api/reservations/by/${userId}`); 25 26 setReservations(response.data); 26 console.log(response.data)27 27 } catch (error) { 28 28 console.error('Error fetching reservations:', error); … … 63 63 <div className="card-body"> 64 64 <h5 className="card-title">Reservation ID: {reservation.reservationID}</h5> 65 <p className="card-text">Restaurant: {reservation?.restaurant.name || "Not specified"}</p> 66 <p className="card-text">Table Number: {reservation?.tableNumber || "Not specified"}</p> 65 <p className="card-text"> 66 Restaurant: { 67 restaurants.find(r => r.restaurantId === reservation.restaurantId)?.name || "Not specified" 68 } 69 </p> 70 71 <p className="card-text">Table 72 Number: {reservation?.tableNumber || "Not specified"}</p> 67 73 <p className="card-text"> 68 74 Reservation Date: {reservation.checkInTime ? … … 93 99 <h5 className="text-primary">Pre-Ordered Items:</h5> 94 100 <ul className="list-group mb-3"> 95 {reservation.preOrderedItems.map((itemStr, index) => { 96 const parts = itemStr.split(':'); 97 const name = parts[0]; 98 const quantity = parseInt(parts[1], 10) || 0; 99 const price = parseFloat(parts[2]) || 0; 100 101 return ( 102 <li key={index} className="list-group-item d-flex justify-content-between align-items-center"> 103 <span><strong>{name}</strong> × {quantity}</span> 104 <span className="badge bg-success rounded-pill">${(price * quantity).toFixed(2)}</span> 105 </li> 106 ); 107 })} 101 {reservation.preOrderedItems.map((item, index) => ( 102 <li key={index} className="list-group-item d-flex justify-content-between align-items-center"> 103 <span><strong>{item.name}</strong> × {item.quantity}</span> 104 <span className="badge bg-success rounded-pill">${(item.price * item.quantity).toFixed(2)}</span> 105 </li> 106 ))} 108 107 </ul> 109 108 110 109 <div className="alert alert-info text-center" role="alert"> 111 <h5>Grand Total: ${reservation.preOrderedItems.reduce((acc, itemStr) => { 112 const parts = itemStr.split(':'); 113 const quantity = parseInt(parts[1], 10) || 0; 114 const price = parseFloat(parts[2]) || 0; 115 return acc + (quantity * price); 116 }, 0).toFixed(2)}</h5> 110 <h5>Grand Total: ${reservation.preOrderedItems.reduce((acc, item) => acc + (item.quantity * item.price), 0).toFixed(2)}</h5> 117 111 </div> 118 112 </div> -
my-react-app/src/components/RestaurantContext.js
re15e8d9 r2518b3a 8 8 9 9 useEffect(() => { 10 if (restaurants.length > 0) return; 10 11 const fetchRestaurants = async () => { 11 12 try { 12 13 const response = await axios.get('http://localhost:8081/api/restaurants'); 14 console.log("Fetched once", response.data); 13 15 setRestaurants(response.data); 14 16 } catch (error) { … … 16 18 } 17 19 }; 18 19 20 fetchRestaurants(); 20 21 }, []); -
my-react-app/src/components/Restaurants.js
re15e8d9 r2518b3a 26 26 const navigate = useNavigate(); 27 27 const restaurantContext = useContext(RestaurantContext); 28 console.log(restaurantContext) 28 29 29 30 useEffect(() => { -
src/main/java/com/example/rezevirajmasa/demo/dto/ReservationDTO.java
re15e8d9 r2518b3a 1 1 package com.example.rezevirajmasa.demo.dto; 2 2 3 import com.example.rezevirajmasa.demo.model.PreorderedItem; 3 4 import com.example.rezevirajmasa.demo.model.Reservation; 4 5 import com.example.rezevirajmasa.demo.model.Restaurant; … … 15 16 private LocalDateTime reservationDateTime; 16 17 private LocalDateTime checkInTime; 17 private Restaurant restaurant;18 private Long restaurantId; 18 19 private int partySize; 19 20 private String status; 20 21 private String specialRequests; 21 22 private String paymentStatus; 22 private List<String> preOrderedItems; 23 23 private List<PreorderedItem> preOrderedItems; 24 24 25 25 public ReservationDTO() { 26 26 } 27 27 28 public ReservationDTO(Long reservationID, String userEmail, BigDecimal rating, Long tableNumber, LocalDateTime reservationDateTime, LocalDateTime checkInTime, Restaurant restaurant, int partySize, String status, String specialRequests, String paymentStatus, List<String> preOrderedItems) {28 public ReservationDTO(Long reservationID, String userEmail, BigDecimal rating, Long tableNumber, LocalDateTime reservationDateTime, LocalDateTime checkInTime, Long restaurantId, int partySize, String status, String specialRequests, String paymentStatus, List<PreorderedItem> preOrderedItems) { 29 29 this.reservationID = reservationID; 30 30 this.userEmail = userEmail; … … 33 33 this.reservationDateTime = reservationDateTime; 34 34 this.checkInTime = checkInTime; 35 this.res taurant = restaurant;35 this.reservationID = restaurantId; 36 36 this.partySize = partySize; 37 37 this.status = status; … … 48 48 this.reservationDateTime = reservation.getReservationDateTime(); 49 49 this.checkInTime = reservation.getCheckInTime(); 50 this.restaurant = reservation.getRestaurant();50 this.restaurantId = reservation.getRestaurant().getRestaurantId(); 51 51 this.partySize = reservation.getPartySize(); 52 52 this.status = reservation.getStatus(); … … 54 54 this.paymentStatus = reservation.getPaymentStatus(); 55 55 this.preOrderedItems = reservation.getPreOrderedItems(); 56 }57 58 public List<String> getPreOrderedItems() {59 return preOrderedItems;60 }61 62 public void setPreOrderedItems(List<String> preOrderedItems) {63 this.preOrderedItems = preOrderedItems;64 56 } 65 57 … … 112 104 } 113 105 114 public Restaurant getRestaurant() {115 return restaurant ;106 public Long getRestaurantId() { 107 return restaurantId; 116 108 } 117 109 118 public void setRestaurant (Restaurant restaurant) {119 this.restaurant = restaurant;110 public void setRestaurantId(Long restaurantId) { 111 this.restaurantId = restaurantId; 120 112 } 121 113 … … 151 143 this.paymentStatus = paymentStatus; 152 144 } 145 146 public List<PreorderedItem> getPreOrderedItems() { 147 return preOrderedItems; 148 } 149 150 public void setPreOrderedItems(List<PreorderedItem> preOrderedItems) { 151 this.preOrderedItems = preOrderedItems; 152 } 153 153 } -
src/main/java/com/example/rezevirajmasa/demo/model/Menu.java
re15e8d9 r2518b3a 6 6 7 7 import java.math.BigDecimal; 8 import java.util.ArrayList; 9 import java.util.List; 8 10 9 11 @Entity … … 13 15 @Id 14 16 @GeneratedValue(strategy = GenerationType.IDENTITY) 15 @Column(name = " MenuID")17 @Column(name = "menu_id") 16 18 private Long menuID; 17 19 18 20 @ManyToOne 19 @JoinColumn(name = " RestaurantID", nullable = false)21 @JoinColumn(name = "restaurant_id", nullable = false) 20 22 @JsonIgnore 21 23 private Restaurant restaurant; 22 24 23 @Column(name = " ItemName", length = 100)25 @Column(name = "item_name", length = 100) 24 26 private String itemName; 25 27 26 @Column(name = " Category", length = 50)28 @Column(name = "category", length = 50) 27 29 private String category; 28 30 29 @Column(name = " Price", precision = 8, scale = 2)31 @Column(name = "price", precision = 8, scale = 2) 30 32 private BigDecimal price; 31 33 32 @Column(name = " Description")34 @Column(name = "description") 33 35 private String description; 34 36 35 @ Column(name = "DietaryInformation", columnDefinition = "JSONB")36 private String dietaryInformation;37 @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) 38 private List<MenuTag> tags = new ArrayList<>(); 37 39 38 40 public Menu() { 39 41 } 40 42 41 public Menu(Restaurant restaurant, String itemName, String category, BigDecimal price, String description, String dietaryInformation) { 43 public Menu(Long menuID, Restaurant restaurant, String itemName, String category, BigDecimal price, String description, List<MenuTag> tags) { 44 this.menuID = menuID; 42 45 this.restaurant = restaurant; 43 46 this.itemName = itemName; … … 45 48 this.price = price; 46 49 this.description = description; 47 this. dietaryInformation = dietaryInformation;50 this.tags = tags; 48 51 } 49 52 } -
src/main/java/com/example/rezevirajmasa/demo/model/Reservation.java
re15e8d9 r2518b3a 26 26 @ManyToOne 27 27 @JoinColumn(name = "UserID") 28 @Json ManagedReference28 @JsonBackReference(value = "user-reservations") 29 29 private User user; 30 30 … … 57 57 private LocalDateTime checkOutTime; 58 58 59 @ElementCollection 60 @CollectionTable(name = "reservation_preordered_items", joinColumns = @JoinColumn(name = "reservation_id")) 61 @Column(name = "item") 62 private List<String> preOrderedItems = new ArrayList<>(); 59 // @ElementCollection 60 // @CollectionTable(name = "reservation_preordered_items", joinColumns = @JoinColumn(name = "reservation_id")) 61 // @Column(name = "item") 62 // private List<String> preOrderedItems = new ArrayList<>(); 63 @OneToMany(mappedBy = "reservation", cascade = CascadeType.ALL, orphanRemoval = true) 64 private List<PreorderedItem> preOrderedItems = new ArrayList<>(); 63 65 64 66 @Column(name = "PaymentStatus", length = 20, nullable = false, columnDefinition = "VARCHAR default 'Unpaid'") -
src/main/java/com/example/rezevirajmasa/demo/model/Restaurant.java
re15e8d9 r2518b3a 41 41 private BigDecimal rating; 42 42 43 @Json Ignore43 @JsonManagedReference 44 44 @OneToMany(mappedBy = "restaurant", cascade = CascadeType.ALL, fetch = FetchType.LAZY) 45 45 private List<TableEntity> tablesList; -
src/main/java/com/example/rezevirajmasa/demo/model/TableEntity.java
re15e8d9 r2518b3a 29 29 30 30 @JsonBackReference 31 @ManyToOne(fetch = FetchType. EAGER)31 @ManyToOne(fetch = FetchType.LAZY) 32 32 @JoinColumn(name = "RestaurantID") 33 33 private Restaurant restaurant; -
src/main/java/com/example/rezevirajmasa/demo/service/ReservationService.java
re15e8d9 r2518b3a 11 11 12 12 public interface ReservationService { 13 public Reservation makeReservationRest(ReservationDTO reservation, User user );13 public Reservation makeReservationRest(ReservationDTO reservation, User user, Restaurant restaurant); 14 14 public List<Reservation> listAll(); 15 15 public Reservation updateReservation(Long reservationId, ReservationDTO reservationDTO, User user); -
src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java
re15e8d9 r2518b3a 26 26 27 27 import javax.swing.text.html.Option; 28 import java.math.BigDecimal; 28 29 import java.time.LocalDateTime; 29 30 import java.time.LocalTime; 30 31 import java.time.format.DateTimeFormatter; 32 import java.util.ArrayList; 31 33 import java.util.List; 32 34 import java.util.Optional; … … 55 57 56 58 @Override 57 public Reservation makeReservationRest(ReservationDTO reservationDTO, User user ) {59 public Reservation makeReservationRest(ReservationDTO reservationDTO, User user, Restaurant restaurant) { 58 60 Reservation reservation = new Reservation(); 59 61 … … 92 94 reservation.setPaymentStatus(reservationDTO.getPaymentStatus() != null ? reservationDTO.getPaymentStatus() : "Unpaid"); 93 95 reservation.setUser(user); 94 reservation.setPreOrderedItems(reservationDTO.getPreOrderedItems()); 95 reservation.setRestaurant(reservationDTO.getRestaurant()); 96 97 List<PreorderedItem> preOrderedItems = new ArrayList<>(); 98 99 for (PreorderedItem dtoItem : reservationDTO.getPreOrderedItems()) { 100 PreorderedItem item = new PreorderedItem(); 101 item.setName(dtoItem.getName()); 102 item.setQuantity(dtoItem.getQuantity()); 103 item.setPrice(dtoItem.getPrice()); 104 item.setReservation(reservation); 105 106 preOrderedItems.add(item); 107 } 108 109 reservation.setPreOrderedItems(preOrderedItems); 110 reservation.setRestaurant(restaurant); 96 111 reservation.setCheckInTime(reservationDTO.getReservationDateTime().plusHours(1)); 97 112 reservation.setReservationDateTime(LocalDateTime.now()); 98 113 reservation.setCheckOutTime(reservationDTO.getReservationDateTime().plusHours(3)); 99 reservation.setRestaurant(reservationDTO.getRestaurant());100 114 101 115 return reservationRepository.save(reservation); -
src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java
re15e8d9 r2518b3a 181 181 182 182 @PostMapping("/api/reservations") 183 public ResponseEntity<?> createReservation(@RequestBody ReservationDTO reservation) { 184 User user = userService.findByMail(reservation.getUserEmail()); 185 Reservation savedReservation = reservationService.makeReservationRest(reservation, user); 183 public ResponseEntity<?> createReservation(@RequestBody ReservationDTO reservation){ 184 User user = userService.findByMail(reservation.getUserEmail()); 185 Restaurant restaurant = restaurantService.findByIdRestaurant(reservation.getRestaurantId()); 186 Reservation savedReservation = reservationService.makeReservationRest(reservation, user, restaurant); 186 187 187 188 return new ResponseEntity<>(savedReservation, HttpStatus.CREATED); … … 227 228 @PathVariable String email) { 228 229 User user = userService.findByMail(email); 229 230 Restaurant restaurant = restaurantService.findByIdRestaurant(reservationDTO.getRestaurantId()); 230 231 if (!reservationDTO.getReservationID().equals(reservationId)) { 231 232 return ResponseEntity.badRequest().build();
Note:
See TracChangeset
for help on using the changeset viewer.