Spaces:
Sleeping
Sleeping
File size: 1,252 Bytes
b2be963 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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
|