pending_upload.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. """Pending upload model for virtual printer queue mode."""
  2. from datetime import datetime
  3. from sqlalchemy import DateTime, ForeignKey, Integer, String, Text, func
  4. from sqlalchemy.orm import Mapped, mapped_column, relationship
  5. from backend.app.core.database import Base
  6. class PendingUpload(Base):
  7. """Pending upload from virtual printer awaiting user review."""
  8. __tablename__ = "pending_uploads"
  9. id: Mapped[int] = mapped_column(primary_key=True)
  10. # File info
  11. filename: Mapped[str] = mapped_column(String(255))
  12. file_path: Mapped[str] = mapped_column(String(500)) # Temp storage path
  13. file_size: Mapped[int] = mapped_column(Integer)
  14. # Source info
  15. source_ip: Mapped[str | None] = mapped_column(String(45), nullable=True)
  16. # Status: pending, archived, discarded
  17. status: Mapped[str] = mapped_column(String(20), default="pending")
  18. # User additions (before archiving)
  19. tags: Mapped[str | None] = mapped_column(Text, nullable=True)
  20. notes: Mapped[str | None] = mapped_column(Text, nullable=True)
  21. project_id: Mapped[int | None] = mapped_column(ForeignKey("projects.id", ondelete="SET NULL"), nullable=True)
  22. # After archiving - link to created archive
  23. archived_id: Mapped[int | None] = mapped_column(ForeignKey("print_archives.id", ondelete="SET NULL"), nullable=True)
  24. # Timestamps
  25. uploaded_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
  26. archived_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
  27. # Relationships
  28. project: Mapped["Project | None"] = relationship()
  29. archive: Mapped["PrintArchive | None"] = relationship()
  30. from backend.app.models.archive import PrintArchive # noqa: E402
  31. from backend.app.models.project import Project # noqa: E402