"""User — a person with login. Identity is internal so one user can link multiple auth providers later (the provider-link table arrives with the auth slice). ``hashed_password`` is nullable: external/OIDC users have none. """ from datetime import datetime from sqlalchemy import DateTime, String from sqlalchemy.orm import Mapped, mapped_column from app.models.base import Base from app.models.mixins import SoftDelete, Timestamps, UUIDPrimaryKey class User(Base, UUIDPrimaryKey, Timestamps, SoftDelete): __tablename__ = "users" email: Mapped[str] = mapped_column(String(320), unique=True, index=True) email_verified_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) display_name: Mapped[str | None] = mapped_column(String(255)) hashed_password: Mapped[str | None] = mapped_column(String(255))