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);
     }
 
