Skip to content
Open
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.example.restaurantManager.model;

public enum CourseType {
STARTER,
MAIN,
DESSERT
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ public class EatInOrderRestaurant extends OrderRestaurant {


public EatInOrderRestaurant(String id, Date date, String waiter, int peopleQty,
double totalPayment, boolean paid, ArrayList<MenuRestaurant> menus,
double totalPayment, boolean paid, ArrayList<OrderMenuQty> orderMenuQties,
ArrayList<TableRestaurant> tableRestaurants) {
super(id, date, waiter, peopleQty, totalPayment, paid, menus);
super(id, date, waiter, peopleQty, totalPayment, paid, orderMenuQties);
this.tableRestaurants = tableRestaurants;
}

Expand Down
60 changes: 60 additions & 0 deletions src/main/java/dev/example/restaurantManager/model/MenuItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package dev.example.restaurantManager.model;

import jakarta.persistence.*;
import lombok.Data;
import lombok.Getter;
import org.hibernate.annotations.GenericGenerator;

import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;

@Entity
@Data
public class MenuItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;
private String description;
private boolean isSpicy;
private boolean hasGluten;
private boolean isAvailable;

@Enumerated(EnumType.STRING)
private CourseType courseType;

@ManyToMany(mappedBy = "menuItems", fetch = FetchType.LAZY)
private List<MenuRestaurant> menus = new ArrayList<>();

// Constructor
public MenuItem(String name, String description, boolean isSpicy, boolean hasGluten, boolean isAvailable, CourseType courseType) {
this.name = name;
this.description = description;
this.isSpicy = isSpicy;
this.hasGluten = hasGluten;
this.isAvailable = isAvailable;
this.courseType = courseType;
}


// Constructors, getters, and setters
@Override
public String toString() {
return "MenuItem{" +
"id=" + id +
", name='" + name + '\'' +
", description='" + description + '\'' +
", isSpicy=" + isSpicy +
", hasGluten=" + hasGluten +
", isAvailable=" + isAvailable +
", courseType=" + courseType +
// ", menus=" + menus +
'}';
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,21 @@
import jakarta.persistence.Id;
import jakarta.persistence.ManyToMany;
import lombok.*;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

@Data
@AllArgsConstructor
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class MenuRestaurant {
public class MenuRestaurant {

@Id
private String id;
Expand All @@ -24,9 +30,23 @@ public class MenuRestaurant {
private boolean active;
private boolean water;

@JsonIgnore
/*@JsonIgnore
@ManyToMany(mappedBy = "menus", fetch = FetchType.LAZY)
private List<OrderRestaurant> orders = new ArrayList<>();
private List<OrderRestaurant> orders = new ArrayList<>();*/

@Getter
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "menu_restaurant_menu_item",
joinColumns = @JoinColumn(name = "menu_restaurant_id"),
inverseJoinColumns = @JoinColumn(name = "menu_item_id")
)
private List<MenuItem> menuItems;

//PRA04 relationship
@OneToMany(mappedBy = "menuRestaurantMapped", cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private List<OrderMenuQty> orderMenuQty = new ArrayList<>();

public MenuRestaurant(String id, String name, Double price, String content, boolean active, boolean water) {
this.id = id;
Expand All @@ -35,10 +55,20 @@ public MenuRestaurant(String id, String name, Double price, String content, bool
this.content = content;
this.active = active;
this.water = water;
this.orderMenuQty = new ArrayList<>();
this.menuItems = new ArrayList<>();
}

public void addMenuItem(MenuItem menuItem) {
this.menuItems.add(menuItem);
menuItem.getMenus().add(this);
}

public void addOrderMenuQty(OrderMenuQty orderMenuQty) {
this.orderMenuQty.add(orderMenuQty);
orderMenuQty.setMenuRestaurantMapped(this);
}

//We might want to exclude 'orders' from toString()
// to avoid circular references
@Override
public String toString() {
return "MenuRestaurant{" +
Expand All @@ -48,6 +78,9 @@ public String toString() {
", content='" + content + '\'' +
", active=" + active +
", water=" + water +
", orderMenuQtyCount=" + (orderMenuQty != null ? orderMenuQty.size() : 0) +
", menuItemsCount=" + + (menuItems != null ? menuItems.size() : 0) +
// ", menuItems=" + menuItems +
'}';
}

Expand All @@ -73,4 +106,3 @@ public int hashCode() {
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package dev.example.restaurantManager.model;

import jakarta.persistence.*;
import lombok.*;
import jakarta.persistence.criteria.Order;
import org.hibernate.annotations.GenericGenerator;

import java.awt.*;
import java.util.Objects;

@Data
@Entity
@NoArgsConstructor
@AllArgsConstructor
public class OrderMenuQty {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
private String id;

@ManyToOne
@JoinColumn(name = "order_id")
private OrderRestaurant orderRestaurantMapped;

@ManyToOne
@JoinColumn(name = "menu_id")
private MenuRestaurant menuRestaurantMapped;

private int quantity;

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof OrderMenuQty)) return false;
OrderMenuQty that = (OrderMenuQty) o;
return quantity == that.quantity &&
Objects.equals(id, that.id) &&
Objects.equals(orderRestaurantMapped, that.orderRestaurantMapped) &&
Objects.equals(menuRestaurantMapped, that.menuRestaurantMapped);
}

@Override
public int hashCode() {
return Objects.hash(id, orderRestaurantMapped, menuRestaurantMapped, quantity);
}

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.example.restaurantManager.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonIgnore;
Expand All @@ -24,26 +25,28 @@ public class OrderRestaurant {
private double totalPayment;
private boolean paid;

@JsonIgnore
/*@JsonIgnore
@ManyToMany(fetch = FetchType.LAZY
, cascade = {CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(
name = "ORDER_RESTAURANT_MENU",
joinColumns = @JoinColumn(name = "ORDER_RESTAURANT_FK_ID"),
inverseJoinColumns = @JoinColumn(name = "MENU_RESTAURANT_FK_ID")
)
private List<MenuRestaurant> menus = new ArrayList<>();
private List<MenuRestaurant> menus = new ArrayList<>();*/

public List<MenuRestaurant> addMenu(MenuRestaurant menu) {
this.menus.add(menu);
menu.getOrders().add(this);
return this.menus;
@OneToMany(mappedBy = "orderRestaurantMapped", cascade = CascadeType.ALL,
fetch = FetchType.LAZY)
private ArrayList<OrderMenuQty> orderMenuQty;

public void addOrderMenuQty(OrderMenuQty orderMenuQty) {
this.orderMenuQty.add(orderMenuQty);
orderMenuQty.setOrderRestaurantMapped(this); // Set the back reference
}

public List<MenuRestaurant> removeMenu(MenuRestaurant menu) {
this.menus.remove(menu);
menu.getOrders().remove(this);
return this.menus;
public void removeOrderMenuQty(OrderMenuQty orderMenuQty) {
this.orderMenuQty.remove(orderMenuQty);
orderMenuQty.setOrderRestaurantMapped(null); // Clear the back reference
}

@Override
Expand All @@ -55,9 +58,12 @@ public String toString() {
", peopleQty=" + peopleQty +
", totalPayment=" + totalPayment +
", paid=" + paid +
", menusCount=" + (menus != null ? menus.size() : 0) +
", menus=" + menus +
", orderMenuQtyCount=" + (orderMenuQty != null ? orderMenuQty.size() : 0) +
", orderMenuQty=" + orderMenuQty +
'}';
}

public Collection<Object> getOrderMenuQtyList() {
return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ public class ShippingOrderRestaurant extends OrderRestaurant {
private String riderName;

public ShippingOrderRestaurant(String id, Date date, String waiter, int peopleQty,
double totalPayment, boolean paid, ArrayList<MenuRestaurant> menus,
double totalPayment, boolean paid, ArrayList<OrderMenuQty> orderMenuQties,
String address, String city, String riderName) {
super(id, date, waiter, peopleQty, totalPayment, paid, menus);
super(id, date, waiter, peopleQty, totalPayment, paid, orderMenuQties);
this.address = address;
this.city = city;
this.riderName = riderName;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ public class TakeAwayOrder extends OrderRestaurant {

// Constructor for TakeAwayOrder with the WHOLE DATA fields
public TakeAwayOrder(String id, Date date, String waiter, int peopleQty,
double totalPayment, boolean paid, ArrayList<MenuRestaurant> menus,
double totalPayment, boolean paid, ArrayList<OrderMenuQty> orderMenuQties,
Customer customerTakeAway) {

// THIS PART is SUPERCLASS
super(id, date, waiter, peopleQty, totalPayment, paid, menus);
super(id, date, waiter, peopleQty, totalPayment, paid, orderMenuQties);
// THIS PART is SUBCLASS
this.customerTakeAway = customerTakeAway;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.example.restaurantManager.repository;

import dev.example.restaurantManager.model.MenuItem;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MenuItemRepository extends JpaRepository<MenuItem, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package dev.example.restaurantManager.repository;

import dev.example.restaurantManager.model.OrderMenuQty;
import org.springframework.data.jpa.repository.JpaRepository;

public interface OrderMenuQtyRepository extends JpaRepository<OrderMenuQty, String> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.example.restaurantManager.service;

import dev.example.restaurantManager.model.MenuItem;

import java.util.List;
import java.util.Optional;

public interface MenuItemService {
MenuItem createMenuItem(MenuItem menuItem);

Optional<MenuItem> getMenuItemById(String id);

List<MenuItem> getAllMenuItems();

MenuItem updateMenuItem(MenuItem menuItem);

void deleteMenuItem(String id);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package dev.example.restaurantManager.service;

import dev.example.restaurantManager.model.MenuItem;
import dev.example.restaurantManager.repository.MenuItemRepository;
import dev.example.restaurantManager.service.MenuItemService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;

@Service
public class MenuItemServiceImpl implements MenuItemService {

@Autowired
private MenuItemRepository menuItemRepository;

@Override
public MenuItem createMenuItem(MenuItem menuItem) {
return menuItemRepository.save(menuItem);
}

@Override
public Optional<MenuItem> getMenuItemById(String id) {
return menuItemRepository.findById(id);
}

@Override
public List<MenuItem> getAllMenuItems() {
return menuItemRepository.findAll();
}

@Override
public MenuItem updateMenuItem(MenuItem menuItem) {
return menuItemRepository.save(menuItem);
}

@Override
public void deleteMenuItem(String id) {
menuItemRepository.deleteById(id);
}
}
Loading