Spaces:
Sleeping
Sleeping
| 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) | |
| def is_admin(self) -> bool: | |
| return self.role == UserRole.ADMIN | |