mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-06-04 20:05:16 +02:00
feat(file-storage): add document_files model and enum
This commit is contained in:
parent
1bb1022d35
commit
72174c780a
3 changed files with 88 additions and 0 deletions
11
surfsense_backend/app/file_storage/persistence/__init__.py
Normal file
11
surfsense_backend/app/file_storage/persistence/__init__.py
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"""Models and enums for the document file-storage tables."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from .enums import DocumentFileKind
|
||||
from .models import DocumentFile
|
||||
|
||||
__all__ = [
|
||||
"DocumentFile",
|
||||
"DocumentFileKind",
|
||||
]
|
||||
11
surfsense_backend/app/file_storage/persistence/enums.py
Normal file
11
surfsense_backend/app/file_storage/persistence/enums.py
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
"""DocumentFile kinds: the original upload plus future derived artifacts."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from enum import StrEnum
|
||||
|
||||
|
||||
class DocumentFileKind(StrEnum):
|
||||
ORIGINAL = "ORIGINAL"
|
||||
REDACTED = "REDACTED"
|
||||
FILLED_FORM = "FILLED_FORM"
|
||||
66
surfsense_backend/app/file_storage/persistence/models.py
Normal file
66
surfsense_backend/app/file_storage/persistence/models.py
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
"""``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")
|
||||
Loading…
Add table
Add a link
Reference in a new issue