| 123456789101112131415161718192021222324252627282930313233343536373839 |
- from __future__ import annotations
- from datetime import datetime
- from sqlalchemy import DateTime, ForeignKey, Index, Integer, String, func
- from sqlalchemy.orm import Mapped, mapped_column
- from supply_infra.db.base import Base
- class AuthSession(Base):
- """Server-side browser session. Only a SHA-256 token hash is persisted."""
- __tablename__ = "auth_session"
- __table_args__ = (
- Index("idx_auth_session_user", "user_id", "expires_at"),
- Index("idx_auth_session_expiry", "expires_at"),
- )
- id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
- token_hash: Mapped[str] = mapped_column(
- String(64),
- nullable=False,
- unique=True,
- index=True,
- )
- user_id: Mapped[int] = mapped_column(
- Integer,
- ForeignKey("auth_user.id", ondelete="CASCADE"),
- nullable=False,
- )
- expires_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
- ip_address: Mapped[str | None] = mapped_column(String(64), nullable=True)
- user_agent: Mapped[str | None] = mapped_column(String(512), nullable=True)
- created_at: Mapped[datetime] = mapped_column(
- DateTime,
- nullable=False,
- server_default=func.now(),
- )
|