mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-04 20:05:16 +02:00
66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
"""``document_files`` table: durable blobs associated with a document."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from sqlalchemy import (
|
|
BigInteger,
|
|
Column,
|
|
Enum as SQLAlchemyEnum,
|
|
ForeignKey,
|
|
Integer,
|
|
String,
|
|
)
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import relationship
|
|
|
|
from app.db import BaseModel, TimestampMixin
|
|
|
|
from .enums import DocumentFileKind
|
|
|
|
|
|
class DocumentFile(BaseModel, TimestampMixin):
|
|
"""One stored file for a document (its original upload, or a derived copy)."""
|
|
|
|
__tablename__ = "document_files"
|
|
|
|
document_id = Column(
|
|
Integer,
|
|
ForeignKey("documents.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
search_space_id = Column(
|
|
Integer,
|
|
ForeignKey("searchspaces.id", ondelete="CASCADE"),
|
|
nullable=False,
|
|
index=True,
|
|
)
|
|
kind = Column(
|
|
SQLAlchemyEnum(
|
|
DocumentFileKind,
|
|
name="document_file_kind",
|
|
values_callable=lambda x: [e.value for e in x],
|
|
),
|
|
nullable=False,
|
|
default=DocumentFileKind.ORIGINAL,
|
|
server_default=DocumentFileKind.ORIGINAL.value,
|
|
index=True,
|
|
)
|
|
|
|
# Where the bytes live: the backend that stored them and its object key.
|
|
storage_backend = Column(String(32), nullable=False)
|
|
storage_key = Column(String, nullable=False)
|
|
|
|
original_filename = Column(String, nullable=False)
|
|
mime_type = Column(String, nullable=True)
|
|
size_bytes = Column(BigInteger, nullable=False)
|
|
checksum_sha256 = Column(String(64), nullable=True)
|
|
|
|
created_by_id = Column(
|
|
UUID(as_uuid=True),
|
|
ForeignKey("user.id", ondelete="SET NULL"),
|
|
nullable=True,
|
|
index=True,
|
|
)
|
|
|
|
document = relationship("Document", back_populates="files")
|