"""DownloadEvent — log of every gallery-dl run, populated by FC-3.""" from datetime import datetime import sqlalchemy as sa from sqlalchemy import BigInteger, DateTime, ForeignKey, Integer, String, Text, func from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import Mapped, mapped_column from .base import Base class DownloadEvent(Base): __tablename__ = "download_event" id: Mapped[int] = mapped_column(Integer, primary_key=True) source_id: Mapped[int] = mapped_column( ForeignKey("source.id", ondelete="CASCADE"), nullable=False, index=True ) post_id: Mapped[int | None] = mapped_column( ForeignKey("post.id", ondelete="SET NULL"), nullable=True, index=True ) status: Mapped[str] = mapped_column(String(32), nullable=False) # pending|running|ok|error|skipped started_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), nullable=False, server_default=func.now() ) finished_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) bytes_downloaded: Mapped[int] = mapped_column(BigInteger, nullable=False, default=0) files_count: Mapped[int] = mapped_column(Integer, nullable=False, default=0) error: Mapped[str | None] = mapped_column(Text, nullable=True) metadata_: Mapped[dict] = mapped_column( "metadata", JSONB, nullable=False, default=dict, server_default=sa.text("'{}'::jsonb"), )