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 Comment(Base): __tablename__ = "comments" id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) spot_id: Mapped[int] = mapped_column(Integer, ForeignKey("spots.id"), nullable=False, index=True) user_id: Mapped[int] = mapped_column(Integer, ForeignKey("users.id"), nullable=False) parent_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("comments.id"), nullable=True) content: Mapped[str] = mapped_column(Text, nullable=False) audit_status: Mapped[str] = mapped_column(String(20), default="approved") created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) user = relationship("User", lazy="selectin") replies = relationship( "Comment", back_populates="parent", lazy="noload", foreign_keys=[parent_id], ) parent = relationship( "Comment", remote_side=[id], back_populates="replies", lazy="noload", ) def __repr__(self) -> str: return f""