hisham-cmd's picture
Full Sync: Explicit Commit Operations (Pure & Optimized)
b2be963 verified
Raw
History Blame Contribute Delete
1.25 kB
from datetime import datetime, timezone
from sqlalchemy import Column, Integer, String, DateTime, Enum as SQLEnum
import enum
from app.db.base import Base
class AuthProvider(str, enum.Enum):
LOCAL = "LOCAL"
GOOGLE = "GOOGLE"
class UserRole(str, enum.Enum):
CUSTOMER = "CUSTOMER"
ADMIN = "ADMIN"
class User(Base):
__tablename__ = "users"
__table_args__ = {'extend_existing': True}
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(255), nullable=False)
email = Column(String(255), unique=True, nullable=False, index=True)
password_hash = Column(String(255), nullable=True) # nullable for Google users
phone = Column(String(50), nullable=True)
role = Column(SQLEnum(UserRole), default=UserRole.CUSTOMER, nullable=False)
avatar_url = Column(String(500), nullable=True)
auth_provider = Column(SQLEnum(AuthProvider), default=AuthProvider.LOCAL, nullable=False)
google_id = Column(String(255), unique=True, nullable=True, index=True)
created_at = Column(DateTime, default=lambda: datetime.now(timezone.utc), nullable=False)
@property
def is_admin(self) -> bool:
return self.role == UserRole.ADMIN