Index: src/main/java/mk/ukim/finki/easyfood/model/Address.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Address.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Address.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,31 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "address")
+public class Address {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "address_id")
+    private Long id;
+
+    @Column(name = "city", length = 100)
+    private String city;
+
+    @Column(name = "street", length = 200)
+    private String street;
+
+    @Column(name = "postal_code", length = 20)
+    private String postalCode;
+
+    @OneToMany(mappedBy = "address")
+    private List<Order> orders;
+
+    @ManyToMany(mappedBy = "addresses")
+    private List<AppUser> users;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Administrator.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Administrator.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Administrator.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,18 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "administrator")
+@PrimaryKeyJoinColumn(name = "user_id")
+public class Administrator extends AppUser {
+
+    @Column(name = "authorized_from")
+    private LocalDate authorizedFrom;
+
+    @Column(name = "authorized_to")
+    private LocalDate authorizedTo;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/AppUser.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/AppUser.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/AppUser.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,40 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "app_user")
+@Inheritance(strategy = InheritanceType.JOINED)
+public class AppUser {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "user_id")
+    private Long id;
+
+    @Column(name = "first_name", nullable = false, length = 100)
+    private String firstName;
+
+    @Column(name = "last_name", nullable = false, length = 100)
+    private String lastName;
+
+    @Column(name = "email", nullable = false, unique = true, length = 150)
+    private String email;
+
+    @Column(name = "password", nullable = false, length = 255)
+    private String password;
+
+    @Column(name = "phone", length = 50)
+    private String phone;
+
+    @ManyToMany
+    @JoinTable(
+            name = "user_addresses",
+            joinColumns = @JoinColumn(name = "user_id"),
+            inverseJoinColumns = @JoinColumn(name = "address_id")
+    )
+    private List<Address> addresses;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/CartItems.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/CartItems.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/CartItems.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,24 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "cart_items")
+@IdClass(CartItemsId.class)
+public class CartItems {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "cart_id")
+    private ShoppingCart cart;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "item_id")
+    private Item item;
+
+    @Column(name = "quantity", nullable = false)
+    private Integer quantity;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/CartItemsId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/CartItemsId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/CartItemsId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,29 @@
+package mk.ukim.finki.easyfood.model;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class CartItemsId implements Serializable {
+    private Long cart;
+    private Long item;
+
+    public CartItemsId() {}
+
+    public CartItemsId(Long cart, Long item) {
+        this.cart = cart;
+        this.item = item;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof CartItemsId)) return false;
+        CartItemsId that = (CartItemsId) o;
+        return Objects.equals(cart, that.cart) && Objects.equals(item, that.item);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(cart, item);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Category.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Category.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Category.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,23 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.util.List;
+
+@Entity
+@Table(name = "category")
+public class Category {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "category_id")
+    private Long id;
+
+    @Column(name = "name", length = 100)
+    private String name;
+
+    @Column(name = "description", columnDefinition = "TEXT")
+    private String description;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/Costs.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Costs.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Costs.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,32 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "costs")
+public class Costs {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "cost_id")
+    private Long id;
+
+    @ManyToOne
+    @JoinColumn(name = "restaurant_id")
+    private Restaurant restaurant;
+
+    @Column(name = "date")
+    private LocalDate date;
+
+    @Column(name = "amount")
+    private BigDecimal amount;
+
+    @Column(name = "type", length = 100)
+    private String type;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/Customer.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Customer.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Customer.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,22 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+
+import java.util.List;
+
+
+@Entity
+@Table(name = "customer")
+@PrimaryKeyJoinColumn(name = "user_id")  // links PK to AppUser
+public class Customer extends AppUser{
+
+
+    @OneToMany(mappedBy = "customer")
+    private List<Order> orders;
+
+    @OneToOne(mappedBy = "customer", cascade = CascadeType.ALL)
+    private ShoppingCart shoppingCart;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignment.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignment.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignment.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,32 @@
+package mk.ukim.finki.easyfood.model;
+
+
+
+import jakarta.persistence.*;
+
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "delivery_assignment")
+@IdClass(DeliveryAssignmentId.class)
+public class DeliveryAssignment {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "deliveryfirm_id")
+    private DeliveryFirm deliveryFirm;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "user_id")
+    private DeliveryMan deliveryMan;
+
+
+    @Column(name = "start_date")
+    private LocalDate startDate;
+
+    @Column(name = "end_date")
+    private LocalDate endDate;
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignmentId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignmentId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/DeliveryAssignmentId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,31 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class DeliveryAssignmentId implements Serializable {
+    private Long deliveryFirm;
+    private Long deliveryMan;
+
+    public DeliveryAssignmentId() {}
+
+    public DeliveryAssignmentId(Long deliveryFirm, Long deliveryMan) {
+        this.deliveryFirm = deliveryFirm;
+        this.deliveryMan = deliveryMan;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof DeliveryAssignmentId)) return false;
+        DeliveryAssignmentId that = (DeliveryAssignmentId) o;
+        return Objects.equals(deliveryFirm, that.deliveryFirm) && Objects.equals(deliveryMan, that.deliveryMan);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(deliveryFirm, deliveryMan);
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/DeliveryFirm.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/DeliveryFirm.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/DeliveryFirm.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,20 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "delivery_firm")
+public class DeliveryFirm {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "deliveryfirm_id")
+    private Long id;
+
+    @Column(name = "name", nullable = false, length = 150)
+    private String name;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/DeliveryMan.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,11 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "delivery_man")
+@PrimaryKeyJoinColumn(name = "user_id")
+public class DeliveryMan extends AppUser {
+
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/Earnings.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Earnings.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Earnings.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,31 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Entity
+@Table(name = "earnings")
+public class Earnings {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "earning_id")
+    private Long id;
+
+    @ManyToOne
+    @JoinColumn(name = "restaurant_id")
+    private Restaurant restaurant;
+
+    @Column(name = "date")
+    private LocalDate date;
+
+    @Column(name = "amount")
+    private BigDecimal amount;
+
+    @Column(name = "source", length = 100)
+    private String source;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Ingredient.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Ingredient.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Ingredient.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,19 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "ingredient")
+public class Ingredient {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "ingredient_id")
+    private Long id;
+
+    @Column(name = "name", nullable = false, length = 100)
+    private String name;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Item.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Item.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,31 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.math.BigDecimal;
+import java.util.List;
+
+@Entity
+@Table(name = "item")
+public class Item {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "item_id")
+    private Long id;
+
+    @Column(name = "image_url", length = 255)
+    private String imageUrl;
+
+    @Column(name = "name", nullable = false, length = 100)
+    private String name;
+
+    @Column(name = "price", nullable = false)
+    private BigDecimal price;
+
+    @Column(name = "description", columnDefinition = "TEXT")
+    private String description;
+
+    // Relationships (e.g., OrderItems, ItemIngredients) can be added later
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/ItemCategory.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ItemCategory.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/ItemCategory.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,22 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "item_category")
+@IdClass(ItemCategoryId.class)
+public class ItemCategory {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "category_id")
+    private Category category;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "item_id")
+    private Item item;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/ItemCategoryId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ItemCategoryId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/ItemCategoryId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,30 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class ItemCategoryId implements Serializable {
+    private Long category;
+    private Long item;
+
+    public ItemCategoryId() {}
+
+    public ItemCategoryId(Long category, Long item) {
+        this.category = category;
+        this.item = item;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ItemCategoryId)) return false;
+        ItemCategoryId that = (ItemCategoryId) o;
+        return Objects.equals(category, that.category) && Objects.equals(item, that.item);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(category, item);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/ItemIngredient.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ItemIngredient.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/ItemIngredient.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,25 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "item_ingredient")
+@IdClass(ItemIngredientId.class)
+public class ItemIngredient {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "item_id")
+    private Item item;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "ingredient_id")
+    private Ingredient ingredient;
+
+    @Column(name = "quantity", length = 50)
+    private String quantity;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/ItemIngredientId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ItemIngredientId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/ItemIngredientId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,29 @@
+package mk.ukim.finki.easyfood.model;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class ItemIngredientId implements Serializable {
+    private Long item;
+    private Long ingredient;
+
+    public ItemIngredientId() {}
+
+    public ItemIngredientId(Long item, Long ingredient) {
+        this.item = item;
+        this.ingredient = ingredient;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ItemIngredientId)) return false;
+        ItemIngredientId that = (ItemIngredientId) o;
+        return Objects.equals(item, that.item) && Objects.equals(ingredient, that.ingredient);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(item, ingredient);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Menu.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Menu.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Menu.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,29 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.time.LocalDateTime;
+
+@Entity
+@Table(name = "menu")
+public class Menu {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "menu_id")
+    private Long id;
+
+    @OneToOne
+    @JoinColumn(name = "restaurant_id")
+    private Restaurant restaurant;
+
+    @Column(name = "created_at")
+    private LocalDateTime createdAt;
+
+    @Column(name = "updated_at")
+    private LocalDateTime updatedAt;
+
+    @Column(name = "name", length = 150)
+    private String name;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/MenuItem.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,23 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "menu_item")
+@IdClass(MenuItemId.class)
+public class MenuItem {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "menu_id")
+    private Menu menu;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "item_id")
+    private Item item;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/MenuItemId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/MenuItemId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/MenuItemId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,29 @@
+package mk.ukim.finki.easyfood.model;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class MenuItemId implements Serializable {
+    private Long menu;
+    private Long item;
+
+    public MenuItemId() {}
+
+    public MenuItemId(Long menu, Long item) {
+        this.menu = menu;
+        this.item = item;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof MenuItemId)) return false;
+        MenuItemId that = (MenuItemId) o;
+        return Objects.equals(menu, that.menu) && Objects.equals(item, that.item);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(menu, item);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/Order.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Order.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Order.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,48 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Entity
+@Table(name = "orders")
+public class Order {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "order_id")
+    private Long id;
+
+    @ManyToOne
+    @JoinColumn(name = "address_id")
+    private Address address;
+
+    @ManyToOne
+    @JoinColumn(name = "restaurant_id")
+    private Restaurant restaurant;
+
+    @ManyToOne
+    @JoinColumn(name = "deliveryman_id")
+    private DeliveryMan deliveryMan;
+
+    @ManyToOne
+    @JoinColumn(name = "user_id")
+    private Customer customer;
+
+    @Column(name = "order_date")
+    private LocalDateTime orderDate;
+
+    @Column(name = "comment", columnDefinition = "TEXT")
+    private String comment;
+
+    @Column(name = "order_status", length = 50)
+    private String orderStatus;
+
+    @Column(name = "total_amount")
+    private BigDecimal totalAmount;
+
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/OrderItems.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/OrderItems.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/OrderItems.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,30 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+import java.math.BigDecimal;
+
+@Entity
+@Table(name = "order_items")
+@IdClass(OrderItemsId.class)
+public class OrderItems {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "order_id")
+    private Order order;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "item_id")
+    private Item item;
+
+    @Column(name = "quantity", nullable = false)
+    private Integer quantity;
+
+    @Column(name = "total_price")
+    private BigDecimal totalPrice;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/OrderItemsId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/OrderItemsId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/OrderItemsId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,31 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class OrderItemsId implements Serializable {
+    private Long order;
+    private Long item;
+
+    public OrderItemsId() {}
+
+    public OrderItemsId(Long order, Long item) {
+        this.order = order;
+        this.item = item;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof OrderItemsId)) return false;
+        OrderItemsId that = (OrderItemsId) o;
+        return Objects.equals(order, that.order) && Objects.equals(item, that.item);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(order, item);
+    }
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/Restaurant.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,43 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+import java.time.LocalTime;
+import java.util.List;
+
+@Entity
+@Table(name = "restaurant")
+public class Restaurant {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "restaurant_id")
+    private Long id;
+
+    @OneToOne
+    @JoinColumn(name = "address_id")
+    private Address address;
+
+    @ManyToMany(mappedBy = "restaurants")
+    private List<RestaurantOwner> owners;
+
+    @Column(name = "name", nullable = false, length = 150)
+    private String name;
+
+    @Column(name = "website_url", length = 255)
+    private String websiteUrl;
+
+    @Column(name = "opening_time")
+    private LocalTime openingTime;
+
+    @Column(name = "closing_time")
+    private LocalTime closingTime;
+
+    @Column(name = "email", length = 150)
+    private String email;
+
+    @Column(name = "phone_number", length = 50)
+    private String phoneNumber;
+
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategory.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategory.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategory.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,22 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "restaurant_category")
+@IdClass(RestaurantCategoryId.class)
+public class RestaurantCategory {
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "category_id")
+    private Category category;
+
+    @Id
+    @ManyToOne
+    @JoinColumn(name = "restaurant_id")
+    private Restaurant restaurant;
+
+    // getters and setters
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategoryId.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategoryId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/RestaurantCategoryId.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,29 @@
+package mk.ukim.finki.easyfood.model;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class RestaurantCategoryId implements Serializable {
+    private Long category;
+    private Long restaurant;
+
+    public RestaurantCategoryId() {}
+
+    public RestaurantCategoryId(Long category, Long restaurant) {
+        this.category = category;
+        this.restaurant = restaurant;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof RestaurantCategoryId)) return false;
+        RestaurantCategoryId that = (RestaurantCategoryId) o;
+        return Objects.equals(category, that.category) && Objects.equals(restaurant, that.restaurant);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(category, restaurant);
+    }
+}
Index: src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/RestaurantOwner.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,23 @@
+package mk.ukim.finki.easyfood.model;
+
+
+import jakarta.persistence.*;
+
+import java.util.List;
+
+@Entity
+@Table(name = "restaurant_owner")
+@PrimaryKeyJoinColumn(name = "user_id")
+public class RestaurantOwner extends AppUser {
+
+
+    @ManyToMany
+    @JoinTable(
+            name = "restaurant_owners",
+            joinColumns = @JoinColumn(name = "user_id"),
+            inverseJoinColumns = @JoinColumn(name = "restaurant_id")
+    )
+    private List<Restaurant> restaurants;
+    // getters and setters
+}
+
Index: src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java
===================================================================
--- src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
+++ src/main/java/mk/ukim/finki/easyfood/model/ShoppingCart.java	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -0,0 +1,19 @@
+package mk.ukim.finki.easyfood.model;
+
+import jakarta.persistence.*;
+
+@Entity
+@Table(name = "shopping_cart")
+public class ShoppingCart {
+
+    @Id
+    @GeneratedValue(strategy = GenerationType.IDENTITY)
+    @Column(name = "cart_id")
+    private Long id;
+
+    @ManyToOne
+    @JoinColumn(name = "user_id", nullable = false)
+    private AppUser user;
+
+    // getters and setters
+}
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 09b63e81ec991605e64a859b841de94e18103044)
+++ src/main/resources/application.properties	(revision e008ccd94b4563ac78f4a701b2818c7b1f20fe54)
@@ -1,1 +1,9 @@
 spring.application.name=easyFood
+spring.datasource.url=jdbc:postgresql://localhost:9999/db_202425z_va_prj_easyfood
+spring.datasource.username=db_202425z_va_prj_easyfood_owner
+spring.datasource.password=152aa5c9dd3c
+spring.datasource.driver-class-name=org.postgresql.Driver
+
+# Optional but recommended
+spring.jpa.hibernate.ddl-auto=update
+spring.jpa.show-sql=true
