
- Create base model with timestamp mixin - Add user model with roles - Add restaurant model - Add menu item model with categories - Add order and order item models - Add delivery model - Fix import issues and linting errors
35 lines
1.0 KiB
Python
35 lines
1.0 KiB
Python
from enum import Enum
|
|
|
|
from sqlalchemy import Boolean, Column, Enum as SQLEnum, String
|
|
|
|
from app.models.base import BaseModel, TimestampMixin
|
|
|
|
|
|
class UserRole(str, Enum):
|
|
"""Enum for user roles."""
|
|
|
|
ADMIN = "admin"
|
|
CUSTOMER = "customer"
|
|
RESTAURANT_OWNER = "restaurant_owner"
|
|
DELIVERY_DRIVER = "delivery_driver"
|
|
|
|
|
|
class User(BaseModel, TimestampMixin):
|
|
"""User model."""
|
|
|
|
email = Column(String, unique=True, index=True, nullable=False)
|
|
hashed_password = Column(String, nullable=False)
|
|
first_name = Column(String, nullable=False)
|
|
last_name = Column(String, nullable=False)
|
|
phone = Column(String, nullable=True)
|
|
address = Column(String, nullable=True)
|
|
role = Column(SQLEnum(UserRole), default=UserRole.CUSTOMER, nullable=False)
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
|
|
@property
|
|
def full_name(self) -> str:
|
|
"""Return the user's full name."""
|
|
return f"{self.first_name} {self.last_name}"
|
|
|
|
def __repr__(self) -> str:
|
|
return f"<User {self.email}>" |