"""Appeal model for Trust & Safety.""" from datetime import datetime from typing import Optional from sqlalchemy import ( Column, Integer, Text, DateTime, ForeignKey, ) from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship from sqlalchemy.sql import func import enum from app.database import Base class AppealStatus(str, enum.Enum): PENDING = "pending" APPROVED = "approved" REJECTED = "rejected" class Appeal(Base): __tablename__ = "appeals" id = Column(Integer, primary_key=True, autoincrement=True) moderation_action_id = Column( Integer, ForeignKey("moderation_actions.id", ondelete="CASCADE"), nullable=False ) user_id = Column(Integer, ForeignKey("users.id", ondelete="CASCADE"), nullable=False) reason = Column(Text, nullable=False) status = Column( ENUM(AppelStatus, name="appeal_status", create_type=False), default=AppealStatus.PENDING, ) reviewed_by = Column(Integer, ForeignKey("users.id", ondelete="SET NULL"), nullable=True) reviewed_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) # Relationships moderation_action = relationship("ModerationAction", back_populates="appeals") user = relationship("User", foreign_keys=[user_id]) reviewer = relationship("User", foreign_keys=[reviewed_by])