diff --git a/app/backend/models/models.py b/app/backend/models/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..8397f9f6a4dc9c51166c40ef9d6584c58dffaadc
--- /dev/null
+++ b/app/backend/models/models.py
@@ -0,0 +1,79 @@
+from sqlmodel import SQLModel, Field, Relationship
+from typing import Optional, List
+from datetime import datetime
+
+
+class User(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    username: str
+    email: str = Field(unique=True, index=True)
+    password: str
+    role: str = Field(default="customer")  # Roles: customer, shop_owner, admin
+    created_at: datetime = Field(default_factory=datetime.utcnow)
+
+    shops: List["Shop"] = Relationship(back_populates="owner")
+    orders: List["Order"] = Relationship(back_populates="user")
+
+
+class Shop(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    owner_id: int = Field(foreign_key="user.id")
+    name: str = Field(unique=True, index=True)
+    description: Optional[str] = None
+    image_url: Optional[str] = None  # Image URL for shop
+    created_at: datetime = Field(default_factory=datetime.utcnow)
+
+    owner: User = Relationship(back_populates="shops")
+    products: List["Product"] = Relationship(back_populates="shop")
+
+
+class Category(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    name: str = Field(unique=True, index=True)
+
+    products: List["Product"] = Relationship(back_populates="category")
+
+
+class Product(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    shop_id: int = Field(foreign_key="shop.id")
+    category_id: int = Field(foreign_key="category.id", nullable=True)
+    name: str
+    description: Optional[str] = None
+    price: float
+    stock: int
+    created_at: datetime = Field(default_factory=datetime.utcnow)
+
+    shop: "Shop" = Relationship(back_populates="products")
+    category: Optional["Category"] = Relationship(back_populates="products")
+    images: List["ProductImage"] = Relationship(back_populates="product")
+
+
+class ProductImage(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    product_id: int = Field(foreign_key="product.id")
+    image_url: str = Field(nullable=False)  # Store each image URL separately
+
+    product: Product = Relationship(back_populates="images")
+
+
+class Order(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    user_id: int = Field(foreign_key="user.id")
+    shop_id: int = Field(foreign_key="shop.id")
+    total_price: float
+    status: str = Field(default="pending")
+    created_at: datetime = Field(default_factory=datetime.utcnow)
+
+    user: User = Relationship(back_populates="orders")
+    order_items: List["OrderItem"] = Relationship(back_populates="order")
+
+
+class OrderItem(SQLModel, table=True):
+    id: Optional[int] = Field(default=None, primary_key=True)
+    order_id: int = Field(foreign_key="order.id")
+    product_id: int = Field(foreign_key="product.id")
+    quantity: int
+    price: float
+
+    order: Order = Relationship(back_populates="order_items")
diff --git a/app/backend/models/product.py b/app/backend/models/product.py
deleted file mode 100644
index 96a79bd0ad1ba327b0e34c59d20c41da2d45cbd0..0000000000000000000000000000000000000000
--- a/app/backend/models/product.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from sqlmodel import SQLModel, Field
-from typing import Optional
-
-
-class Product(SQLModel, table=True):
-    id: Optional[int] = Field(default=None, primary_key=True)
-    name: str
-    description: str
-    price: float
-    stock: int
-    image_url: Optional[str] = None
diff --git a/app/backend/models/user.py b/app/backend/models/user.py
deleted file mode 100644
index 34945afd753e38f90729effb754ee19da741e74a..0000000000000000000000000000000000000000
--- a/app/backend/models/user.py
+++ /dev/null
@@ -1,11 +0,0 @@
-from sqlmodel import SQLModel, Field
-from typing import Optional
-
-
-class User(SQLModel, table=True):
-    id: Optional[int] = Field(default=None, primary_key=True)
-    username: str
-    email: str = Field(unique=True, index=True)
-    phone_number: str
-    password: str
-    role: str  # "buyer" or "shop_owner"
diff --git a/app/backend/routes/auth.py b/app/backend/routes/auth.py
index 2d835ce683e5f35038bd2a692ccb9ca58efe9667..c073e7c56f7d784c6eb9cf8af603a1971500fb97 100644
--- a/app/backend/routes/auth.py
+++ b/app/backend/routes/auth.py
@@ -1,5 +1,5 @@
 from fastapi import APIRouter, Depends, HTTPException
-from backend.models.user import User
+from backend.models.models import User
 from backend.schemas.user import UserCreate, UserLogin
 from backend.database import get_session
 from sqlmodel import Session, select