from sqlalchemy import ForeignKey, Index, String from sqlalchemy.orm import Mapped, mapped_column from app.models.base import Base, TimestampMixin class TeamJoinRequest(Base, TimestampMixin): __tablename__ = "team_join_requests" __table_args__ = ( Index("ix_tjr_team_status", "team_id", "status"), ) id: Mapped[str] = mapped_column(String(32), primary_key=True) team_id: Mapped[str] = mapped_column(String(32), ForeignKey("teams.id"), index=True, nullable=False) user_id: Mapped[str] = mapped_column(String(32), ForeignKey("users.id"), index=True, nullable=False) invitation_id: Mapped[str | None] = mapped_column(String(32), ForeignKey("team_invitations.id"), nullable=True) status: Mapped[str] = mapped_column(String(16), default="pending", server_default="pending", nullable=False) note: Mapped[str | None] = mapped_column(String(256), nullable=True) handled_by: Mapped[str | None] = mapped_column(String(32), nullable=True)