Index: my-react-app/src/App.js
===================================================================
--- my-react-app/src/App.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/App.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -96,5 +96,5 @@
                 const option = currentTime.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', hour12: false });
                 slots.push(option);
-                currentTime.setMinutes(currentTime.getMinutes() + 15); // Increment by 15 minutes
+                currentTime.setMinutes(currentTime.getMinutes() + 15);
             }
 
@@ -322,5 +322,5 @@
                             <div className="card-body">
                                 <div className="row">
-                                    {/* Narrow left column: info and actions */}
+
                                     <div className="col-md-4">
                                         <RestaurantInfo key={restaurant.id} restaurant={restaurant}/>
@@ -340,5 +340,5 @@
                                     </div>
 
-                                    {/* Wide right column: menu */}
+
                                     <div className="col-md-8">
                                         <ReadOnlyMenuList restaurantId={restaurant.restaurantId}/>
Index: my-react-app/src/components/ErrorPage.js
===================================================================
--- my-react-app/src/components/ErrorPage.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/ErrorPage.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -1,3 +1,2 @@
-// ErrorPage.js
 import React from 'react';
 
@@ -7,5 +6,4 @@
             <h1>Oops! Something went wrong.</h1>
             <p>Please try again later or contact support.</p>
-            {/* Add any additional content or error-specific messages */}
         </div>
     );
Index: my-react-app/src/components/Layout.js
===================================================================
--- my-react-app/src/components/Layout.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/Layout.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -1,3 +1,2 @@
-// Layout.js
 import React from 'react';
 import Header from './Header';
Index: my-react-app/src/components/ReadOnlyMenuList.js
===================================================================
--- my-react-app/src/components/ReadOnlyMenuList.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/ReadOnlyMenuList.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -14,5 +14,5 @@
                 const response = await axios.get(`http://localhost:8081/api/restaurant-menu/${restaurantId}`);
                 setMenuItems(response.data);
-                setCurrentPage(1); // Reset to first page on restaurant change
+                setCurrentPage(1);
             } catch (err) {
                 console.error('Failed to fetch menu:', err);
Index: my-react-app/src/components/ReservationConfirmation.js
===================================================================
--- my-react-app/src/components/ReservationConfirmation.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/ReservationConfirmation.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -27,5 +27,4 @@
                 const tableResponse = await axios.get(`http://localhost:8081/api/tables/${tableNumber}`);
                 setTable(tableResponse.data);
-                console.log(tableResponse.data)
                 const restaurantResponse = await axios.get(`http://localhost:8081/api/restaurants/${restaurantId}`);
                 setRestaurant(restaurantResponse.data);
@@ -65,5 +64,6 @@
                 preorderedItemName: item.itemName,
                 quantity: item.quantity,
-                price: item.price
+                price: item.price,
+                menuID: item.menuID
             }))
         };
@@ -76,5 +76,4 @@
                 }
             });
-            console.log('Reservation created successfully:', response.data);
             navigate("/reservations")
         } catch (error) {
@@ -112,5 +111,5 @@
             localStorage.removeItem('remainingTime');
             alert("Time has expired. Please try reserving again.");
-            navigate('/restaurants'); // Redirect or take necessary action
+            navigate('/restaurants');
         }
     }, [remainingTime, navigate]);
Index: my-react-app/src/components/ReservationEdit.js
===================================================================
--- my-react-app/src/components/ReservationEdit.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/ReservationEdit.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -30,9 +30,10 @@
                 setIsLoading(true);
                 const response = await axios.get(`http://localhost:8081/api/reservations/${reservationId}`);
-                console.log(response)
                 setCheckInTime(response.data.reservationDateTime);
                 setFormData(response.data);
-                setRestaurant(response.data.restaurantName);
+
                 setRestaurantId(response.data.restaurantId);
+                const restaurantResponse = await axios.get(`http://localhost:8081/api/restaurants/${response.data.restaurantId}`);
+                setRestaurant(restaurantResponse.data);
 
                 setTableNumber(response.data.tableNumber);
@@ -45,5 +46,4 @@
             }
         };
-
         fetchReservation();
     }, [reservationId]);
@@ -64,42 +64,4 @@
         }
     }, [table]);
-
-    const generateTimeOptions = (operatingHours) => {
-        const now = new Date();
-        const selectedDateObj = new Date(selectedDate);
-
-        const { startTime, endTime } = parseOperatingHours(operatingHours, selectedDateObj);
-
-        const isToday = selectedDateObj.toDateString() === now.toDateString();
-
-        let currentTime;
-
-        if (isToday) {
-            const roundedNow = roundToNext15Minutes(now);
-
-            if (roundedNow < startTime) {
-                currentTime = startTime;
-            } else if (roundedNow > endTime) {
-                return [];
-            } else {
-                currentTime = roundedNow;
-            }
-        } else {
-            currentTime = startTime;
-        }
-
-        const options = [];
-        while (currentTime <= endTime) {
-            options.push(currentTime.toTimeString().slice(0, 5));
-            currentTime = new Date(currentTime.getTime() + 15 * 60 * 1000);
-        }
-
-        return options;
-    };
-
-    const roundToNext15Minutes = (date) => {
-        const ms = 1000 * 60 * 15;
-        return new Date(Math.ceil(date.getTime() / ms) * ms);
-    };
 
     useEffect(() => {
@@ -178,33 +140,55 @@
     const formattedDate = `${year}-${month}-${day}`;
 
-    const parseOperatingHours = (operatingHours, forDate) => {
-        const [start, end] = operatingHours.split('-');
-
-        const [startHour, startMinute] = start.split(':').map(Number);
-        const [endHour, endMinute] = end.split(':').map(Number);
-
-        const startTime = new Date(forDate);
-        startTime.setHours(startHour, startMinute, 0, 0);
-
-        const endTime = new Date(forDate);
-        endTime.setHours(endHour, endMinute, 0, 0);
-
-        return { startTime, endTime };
-    };
-
-    useEffect(() => {
-        if (formData?.restaurant?.operatingHours && selectedDate) {
-            const options = generateTimeOptions(formData.restaurant.operatingHours);
+    const generateTimeOptions = (operatingHours) => {
+        const now = new Date();
+        const selectedDateObj = new Date(selectedDate);
+        const isToday = selectedDateObj.toDateString() === now.toDateString();
+
+        let options = [];
+        for (const hours of operatingHours.split(',')) {
+            const [start, end] = hours.trim().split('-');
+            const startTime = new Date(selectedDateObj);
+            const endTime = new Date(selectedDateObj);
+            const [startHour, startMinute] = start.split(':').map(Number);
+            const [endHour, endMinute] = end.split(':').map(Number);
+            startTime.setHours(startHour, startMinute, 0);
+            endTime.setHours(endHour, endMinute, 0);
+
+            if (isToday && startTime < now) {
+                startTime.setTime(roundToNext15Minutes(now).getTime());
+            }
+
+            if (endTime <= now) {
+                setNoAvailableMessage('No available time due to closing.');
+                continue;
+            }
+
+            while (startTime <= endTime) {
+                options.push(startTime.toTimeString().slice(0, 5));
+                startTime.setMinutes(startTime.getMinutes() + 15);
+            }
+        }
+
+        return options.length ? options : ['No available time'];
+    };
+
+    const roundToNext15Minutes = (date) => {
+        const ms = 1000 * 60 * 15;
+        const roundedTime = new Date(Math.ceil(date.getTime() / ms) * ms);
+
+        if (roundedTime.getTime() === date.getTime()) {
+            roundedTime.setMinutes(roundedTime.getMinutes() + 15);
+        }
+
+        return roundedTime;
+    };
+
+    useEffect(() => {
+        if (restaurant?.operatingHours && selectedDate) {
+            const options = generateTimeOptions(restaurant.operatingHours);
             setTimeOptions(options);
         }
     }, [restaurant, selectedDate]);
 
-        // useEffect(() => {
-        //     if (checkInTime) {
-        //         const checkInDateObj = new Date(checkInTime);
-        //         setSelectedDate(checkInDateObj.toISOString().split("T")[0]);
-        //         setSelectedTime(checkInDateObj.toTimeString().slice(0, 5));
-        //     }
-        // }, [checkInTime]);
 
     return (
@@ -217,10 +201,10 @@
                     <div className="card-body">
                         <h2 className="card-title">
-                            {formData.restaurant.name} <StarRating key={formData.restaurant.id} rating={formData.restaurant.rating} />
+                            {restaurant?.name}
+                            <StarRating key={restaurant?.id} rating={restaurant?.rating || 0}/>
                         </h2>
-                        <p className="card-text">{formData.restaurant.name}</p>
-                        <p className="card-text">{formData.restaurant.operatingHours}</p>
-                        <p className="card-text">Ul. {formData.restaurant.address}</p>
-                        <br />
+                        <p className="card-text">Operating Hours: {restaurant?.operatingHours}</p>
+                        <p className="card-text">Address: Ul. {restaurant?.address}</p>
+                        <br/>
                     </div>
                     <form onSubmit={handleSubmit}>
Index: my-react-app/src/components/RestaurantDetails.js
===================================================================
--- my-react-app/src/components/RestaurantDetails.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/RestaurantDetails.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -111,6 +111,4 @@
         });
     };
-
-    console.log(preOrderedItems)
 
     const roundToNext15Minutes = (date) => {
Index: my-react-app/src/components/StarRating.js
===================================================================
--- my-react-app/src/components/StarRating.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ my-react-app/src/components/StarRating.js	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -2,9 +2,6 @@
 
 const StarRating = ({ rating }) => {
-    // Convert the rating to a number between 0 and 5
     const normalizedRating = Math.min(Math.max(0, rating), 5);
-    // Calculate the number of filled stars
     const filledStars = Math.floor(normalizedRating);
-    // Calculate the number of half stars
     const hasHalfStar = normalizedRating - filledStars >= 0.5;
 
@@ -12,9 +9,11 @@
         <div>
             {[...Array(filledStars)].map((_, index) => (
-                <span key={index} className="star">&#9733;</span>
+                <span key={`filled-${index}`} className="star">&#9733;</span>
             ))}
-            {hasHalfStar && <span className="star">&#9734;</span>}
+
+            {hasHalfStar && <span className="star half">&#9733;</span>}
+
             {[...Array(5 - filledStars - (hasHalfStar ? 1 : 0))].map((_, index) => (
-                <span key={filledStars + index + 1} className="star">&#9734;</span>
+                <span key={`empty-${index}`} className="star">&#9734;</span>
             ))}
         </div>
@@ -23,2 +22,3 @@
 
 export default StarRating;
+
Index: -react-app/src/components/TimeSlotList.js
===================================================================
--- my-react-app/src/components/TimeSlotList.js	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ 	(revision )
@@ -1,20 +1,0 @@
-import React from 'react';
-
-const TimeSlotList = ({ timeSlots }) => {
-    return (
-        <div>
-            <h3>Available Time Slots</h3>
-            {timeSlots.length > 0 ? (
-                <ul>
-                    {timeSlots.map((slot, index) => (
-                        <li key={index}>{slot}</li>
-                    ))}
-                </ul>
-            ) : (
-                <p>No available time slots.</p>
-            )}
-        </div>
-    );
-};
-
-export default TimeSlotList;
Index: src/main/java/com/example/rezevirajmasa/demo/dto/PreorderedItemDto.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/dto/PreorderedItemDto.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
+++ src/main/java/com/example/rezevirajmasa/demo/dto/PreorderedItemDto.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -0,0 +1,26 @@
+package com.example.rezevirajmasa.demo.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+@Setter
+@Getter
+public class PreorderedItemDto {
+    private String preorderedItemName;
+    private Integer quantity;
+    private BigDecimal price;
+    private Long menuID;
+
+    public PreorderedItemDto() {
+    }
+
+    public PreorderedItemDto(String preorderedItemName, Integer quantity, BigDecimal price, Long menuID) {
+        this.preorderedItemName = preorderedItemName;
+        this.quantity = quantity;
+        this.price = price;
+        this.menuID = menuID;
+    }
+
+}
Index: src/main/java/com/example/rezevirajmasa/demo/dto/ReservationDTO.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/dto/ReservationDTO.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/dto/ReservationDTO.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -4,9 +4,12 @@
 import com.example.rezevirajmasa.demo.model.Reservation;
 import com.example.rezevirajmasa.demo.model.Restaurant;
+import lombok.Setter;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
+import java.util.stream.Collectors;
 
+@Setter
 public class ReservationDTO {
     private Long reservationID;
@@ -21,5 +24,5 @@
     private String specialRequests;
     private String paymentStatus;
-    private List<PreorderedItem> preOrderedItems;
+    private List<PreorderedItemDto> preOrderedItems;
 
     public ReservationDTO() {
@@ -29,5 +32,5 @@
                           LocalDateTime reservationDateTime, LocalDateTime checkInTime, Long restaurantId,
                           int partySize, String reservationStatus, String specialRequests,
-                          String paymentStatus, List<PreorderedItem> preOrderedItems) {
+                          String paymentStatus, List<PreorderedItemDto> preOrderedItems) {
         this.reservationID = reservationID;
         this.userEmail = userEmail;
@@ -56,5 +59,12 @@
         this.specialRequests = reservation.getSpecialRequests();
         this.paymentStatus = reservation.getPaymentStatus();
-        this.preOrderedItems = reservation.getPreOrderedItems();
+
+        this.preOrderedItems = reservation.getPreOrderedItems().stream()
+                .map(preorderedItem -> new PreorderedItemDto(
+                        preorderedItem.getPreorderedItemName(),
+                        preorderedItem.getQuantity(),
+                        preorderedItem.getPrice(),
+                        preorderedItem.getMenu().getMenuID()))
+                .collect(Collectors.toList());
     }
 
@@ -63,14 +73,6 @@
     }
 
-    public void setReservationID(Long reservationID) {
-        this.reservationID = reservationID;
-    }
-
     public String getUserEmail() {
         return userEmail;
-    }
-
-    public void setUserEmail(String userEmail) {
-        this.userEmail = userEmail;
     }
 
@@ -79,14 +81,6 @@
     }
 
-    public void setRating(BigDecimal rating) {
-        this.rating = rating;
-    }
-
     public Long getTableNumber() {
         return tableNumber;
-    }
-
-    public void setTableNumber(Long tableNumber) {
-        this.tableNumber = tableNumber;
     }
 
@@ -95,14 +89,6 @@
     }
 
-    public void setReservationDateTime(LocalDateTime reservationDateTime) {
-        this.reservationDateTime = reservationDateTime;
-    }
-
     public LocalDateTime getCheckInTime() {
         return checkInTime;
-    }
-
-    public void setCheckInTime(LocalDateTime checkInTime) {
-        this.checkInTime = checkInTime;
     }
 
@@ -111,14 +97,6 @@
     }
 
-    public void setRestaurantId(Long restaurantId) {
-        this.restaurantId = restaurantId;
-    }
-
     public int getPartySize() {
         return partySize;
-    }
-
-    public void setPartySize(int partySize) {
-        this.partySize = partySize;
     }
 
@@ -127,14 +105,6 @@
     }
 
-    public void setReservationStatus(String reservationStatus) {
-        this.reservationStatus = reservationStatus;
-    }
-
     public String getSpecialRequests() {
         return specialRequests;
-    }
-
-    public void setSpecialRequests(String specialRequests) {
-        this.specialRequests = specialRequests;
     }
 
@@ -143,14 +113,7 @@
     }
 
-    public void setPaymentStatus(String paymentStatus) {
-        this.paymentStatus = paymentStatus;
-    }
-
-    public List<PreorderedItem> getPreOrderedItems() {
+    public List<PreorderedItemDto> getPreOrderedItems() {
         return preOrderedItems;
     }
 
-    public void setPreOrderedItems(List<PreorderedItem> preOrderedItems) {
-        this.preOrderedItems = preOrderedItems;
-    }
 }
Index: src/main/java/com/example/rezevirajmasa/demo/model/Menu.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/model/Menu.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/model/Menu.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -38,4 +38,7 @@
     private List<MenuTag> tags = new ArrayList<>();
 
+    @OneToMany(mappedBy = "menu", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY)
+    private List<PriceHistory> priceHistoryList = new ArrayList<>();
+
     public Menu() {
     }
Index: src/main/java/com/example/rezevirajmasa/demo/model/PreorderedItem.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/model/PreorderedItem.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/model/PreorderedItem.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -26,4 +26,5 @@
     private Integer quantity;
 
+    @Column(name = "price_at_order", precision = 8, scale = 2, nullable = false)
     private BigDecimal price;
 
@@ -32,3 +33,7 @@
     @JoinColumn(name = "reservation_id", nullable = false)
     private Reservation reservation;
+
+    @ManyToOne
+    @JoinColumn(name = "menu_id", nullable = false)
+    private Menu menu;
 }
Index: src/main/java/com/example/rezevirajmasa/demo/model/PriceHistory.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/model/PriceHistory.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
+++ src/main/java/com/example/rezevirajmasa/demo/model/PriceHistory.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -0,0 +1,35 @@
+package com.example.rezevirajmasa.demo.model;
+
+import jakarta.persistence.*;
+import lombok.Data;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "price_history")
+@Data
+public class PriceHistory {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "price_history_id")
+    private Long priceHistoryID;
+
+    @ManyToOne
+    @JoinColumn(name = "menu_id", nullable = false)
+    private Menu menu;
+
+    @Column(name = "old_price", precision = 8, scale = 2, nullable = false)
+    private BigDecimal oldPrice;
+
+    @Column(name = "change_date", nullable = false)
+    private LocalDateTime changeDate;
+
+    public PriceHistory() {}
+
+    public PriceHistory(Menu menu, BigDecimal oldPrice, LocalDateTime changeDate) {
+        this.menu = menu;
+        this.oldPrice = oldPrice;
+        this.changeDate = changeDate;
+    }
+}
Index: src/main/java/com/example/rezevirajmasa/demo/model/Reservation.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/model/Reservation.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/model/Reservation.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -1,4 +1,5 @@
 package com.example.rezevirajmasa.demo.model;
 
+import com.example.rezevirajmasa.demo.dto.PreorderedItemDto;
 import com.fasterxml.jackson.annotation.JsonBackReference;
 import com.fasterxml.jackson.annotation.JsonManagedReference;
Index: src/main/java/com/example/rezevirajmasa/demo/repository/PriceHistoryRepository.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/repository/PriceHistoryRepository.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
+++ src/main/java/com/example/rezevirajmasa/demo/repository/PriceHistoryRepository.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -0,0 +1,7 @@
+package com.example.rezevirajmasa.demo.repository;
+
+import com.example.rezevirajmasa.demo.model.PriceHistory;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface PriceHistoryRepository extends JpaRepository<PriceHistory, Long> {
+}
Index: src/main/java/com/example/rezevirajmasa/demo/service/MenuService.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/service/MenuService.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/service/MenuService.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -3,7 +3,10 @@
 import com.example.rezevirajmasa.demo.model.Menu;
 
+import java.math.BigDecimal;
 import java.util.List;
 
 public interface MenuService {
     public List<Menu> getMenuByRestaurantId(Long restaurantId);
+    public void updateMenuPrice(Long menuId, BigDecimal newPrice);
+    public Menu getMenuById(Long id);
 }
Index: src/main/java/com/example/rezevirajmasa/demo/service/impl/MenuServiceImpl.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/service/impl/MenuServiceImpl.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/service/impl/MenuServiceImpl.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -2,10 +2,15 @@
 
 import com.example.rezevirajmasa.demo.model.Menu;
+import com.example.rezevirajmasa.demo.model.PriceHistory;
 import com.example.rezevirajmasa.demo.model.Restaurant;
 import com.example.rezevirajmasa.demo.repository.MenuRepository;
+import com.example.rezevirajmasa.demo.repository.PriceHistoryRepository;
 import com.example.rezevirajmasa.demo.service.MenuService;
 import com.example.rezevirajmasa.demo.service.RestaurantService;
+import org.openqa.selenium.InvalidArgumentException;
 import org.springframework.stereotype.Service;
 
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
 import java.util.List;
 
@@ -15,7 +20,10 @@
     private final RestaurantService restaurantService;
 
-    public MenuServiceImpl(MenuRepository menuRepository, RestaurantService restaurantService) {
+    private final PriceHistoryRepository priceHistoryRepository;
+
+    public MenuServiceImpl(MenuRepository menuRepository, RestaurantService restaurantService, PriceHistoryRepository priceHistoryRepository) {
         this.menuRepository = menuRepository;
         this.restaurantService = restaurantService;
+        this.priceHistoryRepository = priceHistoryRepository;
     }
 
@@ -25,3 +33,23 @@
         return menuRepository.findAllByRestaurant(restaurant);
     }
+
+    @Override
+    public void updateMenuPrice(Long menuId, BigDecimal newPrice) {
+        Menu menu = menuRepository.findById(menuId)
+                .orElseThrow(() -> new IllegalArgumentException("Menu not found"));
+
+        if (menu.getPrice() != null && !menu.getPrice().equals(newPrice)) {
+            PriceHistory priceHistory = new PriceHistory(menu, menu.getPrice(), LocalDateTime.now());
+            priceHistoryRepository.save(priceHistory);
+        }
+
+        menu.setPrice(newPrice);
+        menuRepository.save(menu);
+    }
+
+    @Override
+    public Menu getMenuById(Long id) {
+        return menuRepository.findById(id)
+                .orElseThrow(()->new InvalidArgumentException("Invalid id sent: " + id));
+    }
 }
Index: src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/service/impl/ReservationImpl.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -1,4 +1,5 @@
 package com.example.rezevirajmasa.demo.service.impl;
 
+import com.example.rezevirajmasa.demo.dto.PreorderedItemDto;
 import com.example.rezevirajmasa.demo.dto.ReservationDTO;
 import com.example.rezevirajmasa.demo.mappers.UserMapper;
@@ -8,8 +9,10 @@
 import com.example.rezevirajmasa.demo.repository.ReservationRepository;
 import com.example.rezevirajmasa.demo.repository.TableRepository;
+import com.example.rezevirajmasa.demo.service.MenuService;
 import com.example.rezevirajmasa.demo.service.ReservationHistoryService;
 import com.example.rezevirajmasa.demo.service.ReservationService;
 import com.example.rezevirajmasa.demo.service.UserService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
 
@@ -31,4 +34,7 @@
     @Autowired
     private ReservationRepository reservationRepository;
+    @Autowired
+    @Lazy
+    private MenuService menuService;
 
     public ReservationImpl(UserMapper userMapper) {
@@ -82,5 +88,5 @@
             List<PreorderedItem> preOrderedItems = new ArrayList<>();
 
-            for (PreorderedItem dtoItem : reservationDTO.getPreOrderedItems()) {
+            for (PreorderedItemDto dtoItem : reservationDTO.getPreOrderedItems()) {
                 PreorderedItem item = new PreorderedItem();
                 item.setPreorderedItemName(dtoItem.getPreorderedItemName());
@@ -88,4 +94,7 @@
                 item.setPrice(dtoItem.getPrice());
                 item.setReservation(reservation);
+
+                Menu menu = menuService.getMenuById(dtoItem.getMenuID());
+                item.setMenu(menu);
 
                 preOrderedItems.add(item);
Index: src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java
===================================================================
--- src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java	(revision b67dfd3bdf1aa1bd3175c999b9eabd3c15eb7ea0)
+++ src/main/java/com/example/rezevirajmasa/demo/web/rest/testController.java	(revision e48199adf103ea72701a91722bdbf8cfb9732731)
@@ -64,5 +64,6 @@
     @GetMapping("/api/restaurants/{restaurantId}")
     public ResponseEntity<RestaurantDTO> getRestaurantById(@PathVariable Long restaurantId) {
-        return new ResponseEntity<RestaurantDTO>(restaurantService.findById(restaurantId), HttpStatus.OK);
+        RestaurantDTO restaurantDTO = restaurantService.findById(restaurantId);
+        return new ResponseEntity<>(restaurantDTO, HttpStatus.OK);
     }
 
