Skip to content
Snippets Groups Projects
Commit 95876917 authored by duyanhehe's avatar duyanhehe
Browse files

finished database models

parent 7187e42c
Branches
No related tags found
No related merge requests found
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")
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
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"
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment