import uuid import enum from datetime import datetime, timezone from sqlalchemy import String, Boolean, DateTime, Enum as SAEnum, ForeignKey, Text from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base class UserRole(str, enum.Enum): super_admin = "super_admin" school_admin = "school_admin" class HubUser(Base): __tablename__ = "hub_users" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) email: Mapped[str] = mapped_column(String(255), unique=True, nullable=False, index=True) full_name: Mapped[str] = mapped_column(String(255), nullable=False) hashed_password: Mapped[str] = mapped_column(String(255), nullable=False) role: Mapped[UserRole] = mapped_column(SAEnum(UserRole), nullable=False, default=UserRole.school_admin) is_active: Mapped[bool] = mapped_column(Boolean, default=True, nullable=False) school_id: Mapped[str | None] = mapped_column(String(36), ForeignKey("schools.id", ondelete="SET NULL"), nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)) last_login_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) school: Mapped["School | None"] = relationship("School", back_populates="admins")