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