muhammadnoman76's picture
Initial deploy
a317be6
from datetime import datetime
from typing import Optional, List
from bson import ObjectId
class PDFFile:
"""PDF file model for MongoDB."""
collection_name = "files"
def __init__(
self,
user_id: str,
filename: str,
original_filename: str,
file_path: str,
file_size: int,
file_type: str = "application/pdf",
created_at: Optional[datetime] = None,
_id: Optional[ObjectId] = None
):
self._id = _id or ObjectId()
self.user_id = user_id
self.filename = filename
self.original_filename = original_filename
self.file_path = file_path
self.file_size = file_size
self.file_type = file_type
self.created_at = created_at or datetime.utcnow()
def to_dict(self) -> dict:
"""Convert file to dictionary for MongoDB insertion."""
return {
"_id": self._id,
"user_id": self.user_id,
"filename": self.filename,
"original_filename": self.original_filename,
"file_path": self.file_path,
"file_size": self.file_size,
"file_type": self.file_type,
"created_at": self.created_at
}
@classmethod
def from_dict(cls, data: dict) -> "PDFFile":
"""Create PDFFile instance from MongoDB document."""
return cls(
_id=data.get("_id"),
user_id=data.get("user_id"),
filename=data.get("filename"),
original_filename=data.get("original_filename"),
file_path=data.get("file_path"),
file_size=data.get("file_size"),
file_type=data.get("file_type"),
created_at=data.get("created_at")
)
@property
def id(self) -> str:
"""Get string representation of file ID."""
return str(self._id)
class MergedPDF:
"""Merged PDF file model for MongoDB."""
collection_name = "merged_files"
def __init__(
self,
user_id: str,
filename: str,
file_path: str,
file_size: int,
source_file_ids: List[str],
created_at: Optional[datetime] = None,
_id: Optional[ObjectId] = None
):
self._id = _id or ObjectId()
self.user_id = user_id
self.filename = filename
self.file_path = file_path
self.file_size = file_size
self.source_file_ids = source_file_ids
self.created_at = created_at or datetime.utcnow()
def to_dict(self) -> dict:
"""Convert merged file to dictionary for MongoDB insertion."""
return {
"_id": self._id,
"user_id": self.user_id,
"filename": self.filename,
"file_path": self.file_path,
"file_size": self.file_size,
"source_file_ids": self.source_file_ids,
"created_at": self.created_at
}
@classmethod
def from_dict(cls, data: dict) -> "MergedPDF":
"""Create MergedPDF instance from MongoDB document."""
return cls(
_id=data.get("_id"),
user_id=data.get("user_id"),
filename=data.get("filename"),
file_path=data.get("file_path"),
file_size=data.get("file_size"),
source_file_ids=data.get("source_file_ids"),
created_at=data.get("created_at")
)
@property
def id(self) -> str:
"""Get string representation of merged file ID."""
return str(self._id)