from datetime import datetime from typing import Optional from sqlalchemy import Column, Enum, ForeignKey, Integer, String, Text, DateTime from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.database import Base class ModerationAction(Base): __tablename__ = "moderation_actions" id = Column(Integer, primary_key=True) moderator_id = Column(Integer, ForeignKey("users.id"), nullable=False) target_user_id = Column(Integer, ForeignKey("users.id"), nullable=False) target_type = Column( Enum("user", "world", "asset", "chat_message", name="target_type_enum"), nullable=False, ) target_id = Column(String(64), nullable=False) action = Column( Enum("warn", "suspend", "ban", "restrict", "remove", "restore", name="action_enum"), nullable=False, ) reason = Column(Text, nullable=True) report_id = Column(Integer, ForeignKey("reports.id"), nullable=True) expires_at = Column(DateTime(timezone=True), nullable=True) revoked_at = Column(DateTime(timezone=True), nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) # Relationships moderator = relationship("User", foreign_keys=[moderator_id]) target_user = relationship("User", foreign_keys=[target_user_id]) report = relationship("Report", back_populates="moderation_actions")