from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, func from sqlalchemy.orm import Mapped, mapped_column, relationship from app.db.base import Base class Report(Base): __tablename__ = "reports" id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) reporter_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id"), nullable=False) target_type: Mapped[str] = mapped_column(String(50), nullable=False, index=True) target_id: Mapped[int] = mapped_column(Integer, nullable=False) reason: Mapped[str] = mapped_column(Text, nullable=False) status: Mapped[str] = mapped_column(String(20), default="pending") handler_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("users.id"), nullable=True) conclusion: Mapped[str | None] = mapped_column(Text) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) resolved_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) reporter = relationship("User", foreign_keys=[reporter_id], lazy="selectin") handler = relationship("User", foreign_keys=[handler_id], lazy="selectin") def __repr__(self) -> str: return f""