Initial commit

This commit is contained in:
2026-02-21 09:44:18 -03:00
commit 5dfc2cbd85
65 changed files with 11989 additions and 0 deletions

View File

@@ -0,0 +1,92 @@
"""Pydantic schema definitions for document API payloads."""
from datetime import datetime
from uuid import UUID
from pydantic import BaseModel, Field
from app.models.document import DocumentStatus
class DocumentResponse(BaseModel):
"""Represents a document record returned by API endpoints."""
id: UUID
original_filename: str
source_relative_path: str
mime_type: str
extension: str
size_bytes: int
sha256: str
logical_path: str
suggested_path: str | None
image_text_type: str | None
handwriting_style_id: str | None
tags: list[str] = Field(default_factory=list)
suggested_tags: list[str] = Field(default_factory=list)
status: DocumentStatus
preview_available: bool
is_archive_member: bool
archived_member_path: str | None
parent_document_id: UUID | None
replaces_document_id: UUID | None
created_at: datetime
processed_at: datetime | None
class Config:
"""Enables ORM object parsing for SQLAlchemy model instances."""
from_attributes = True
class DocumentDetailResponse(DocumentResponse):
"""Represents a full document payload including extracted text content."""
extracted_text: str
metadata_json: dict
class DocumentsListResponse(BaseModel):
"""Represents a paginated document list response payload."""
total: int
items: list[DocumentResponse]
class UploadConflict(BaseModel):
"""Describes an upload conflict where a matching checksum already exists."""
original_filename: str
sha256: str
existing_document_id: UUID
class UploadResponse(BaseModel):
"""Represents the result of a batch upload request."""
uploaded: list[DocumentResponse] = Field(default_factory=list)
conflicts: list[UploadConflict] = Field(default_factory=list)
class DocumentUpdateRequest(BaseModel):
"""Captures document metadata changes."""
original_filename: str | None = None
logical_path: str | None = None
tags: list[str] | None = None
class SearchResponse(BaseModel):
"""Represents the result of a search query."""
total: int
items: list[DocumentResponse]
class ContentExportRequest(BaseModel):
"""Describes filters used to export extracted document contents as Markdown files."""
document_ids: list[UUID] = Field(default_factory=list)
path_prefix: str | None = None
include_trashed: bool = False
only_trashed: bool = False