RAG_Backend / backend /app /models /document.py
Madhesh4124's picture
chore: sync project updates
39f90be
Raw
History Blame Contribute Delete
1.62 kB
import uuid
from datetime import datetime, timezone
from typing import Optional
from sqlalchemy import Column, String, Text, Integer, DateTime, Uuid, ForeignKey
from pydantic import BaseModel, ConfigDict
from app.database import Base
# --- SQLAlchemy Model ---
class Document(Base):
__tablename__ = "documents"
id = Column(Uuid(as_uuid=True), primary_key=True, default=uuid.uuid4, index=True)
user_id = Column(Uuid(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
filename = Column(String(255), nullable=False)
content = Column(Text, nullable=False)
file_type = Column(String(50), nullable=False)
upload_date = Column(DateTime, default=lambda: datetime.now(timezone.utc))
file_size = Column(Integer, nullable=False)
# P3.2: SHA-256 of raw file bytes for content-level deduplication.
# Nullable for backward-compatibility with rows uploaded before this column was added.
content_sha256 = Column(String(64), nullable=True, index=True)
# --- Pydantic Schemas ---
class DocumentCreate(BaseModel):
filename: str
content: str
file_type: str
file_size: int
class DocumentResponse(BaseModel):
id: uuid.UUID
user_id: uuid.UUID
filename: str
content: str
file_type: str
upload_date: datetime
file_size: int
content_sha256: Optional[str] = None
model_config = ConfigDict(from_attributes=True)
class DocumentListItemResponse(BaseModel):
id: uuid.UUID
filename: str
file_type: str
upload_date: datetime
file_size: int
model_config = ConfigDict(from_attributes=True)