from datetime import datetime from sqlalchemy import DateTime, Integer, String, func from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base from app.utils.ids import prefixed_id class User(Base): __tablename__ = "users" id: Mapped[str] = mapped_column( String(40), primary_key=True, default=lambda: prefixed_id("usr"), ) name: Mapped[str] = mapped_column(String(120), nullable=False) email: Mapped[str] = mapped_column(String(255), unique=True, index=True, nullable=False) password_hash: Mapped[str | None] = mapped_column(String(255), nullable=True) auth_version: Mapped[int] = mapped_column(Integer, default=1, nullable=False) role: Mapped[str] = mapped_column(String(20), default="student", nullable=False) class_level: Mapped[str | None] = mapped_column(String(80), nullable=True) syllabus: Mapped[str | None] = mapped_column(String(120), nullable=True) preferred_language: Mapped[str] = mapped_column( String(50), default="Malayalam + English", nullable=False, ) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, )