Graph_RAG / backend /app /services /document_service.py
Aigenthix's picture
Upload 2585 files
711f785 verified
Raw
History Blame Contribute Delete
2.28 kB
"""Document processing and management service"""
import os
from pathlib import Path
from typing import Optional, List, Dict, Any
from datetime import datetime
from uuid import uuid4
import logging
logger = logging.getLogger(__name__)
class DocumentService:
"""Service for managing documents"""
def __init__(self, upload_dir: str):
self.upload_dir = Path(upload_dir)
self.upload_dir.mkdir(parents=True, exist_ok=True)
self.documents: Dict[str, Dict[str, Any]] = {}
async def save_document(
self,
file_content: bytes,
filename: str,
document_type: str,
metadata: Optional[Dict[str, Any]] = None,
) -> Dict[str, Any]:
"""Save uploaded document"""
doc_id = str(uuid4())
file_path = self.upload_dir / f"{doc_id}_{filename}"
# Save file
file_path.write_bytes(file_content)
# Store metadata
doc_info = {
"id": doc_id,
"name": filename,
"document_type": document_type,
"upload_date": datetime.now(),
"file_size": len(file_content),
"file_path": str(file_path),
"chunks_count": 0,
"metadata": metadata or {},
}
self.documents[doc_id] = doc_info
logger.info(f"Document saved: {doc_id} ({filename})")
return doc_info
def get_document(self, doc_id: str) -> Optional[Dict[str, Any]]:
"""Get document info"""
return self.documents.get(doc_id)
def list_documents(self) -> List[Dict[str, Any]]:
"""List all documents"""
return list(self.documents.values())
def delete_document(self, doc_id: str) -> bool:
"""Delete document"""
if doc_id in self.documents:
doc = self.documents[doc_id]
file_path = Path(doc["file_path"])
if file_path.exists():
file_path.unlink()
del self.documents[doc_id]
logger.info(f"Document deleted: {doc_id}")
return True
return False
def update_chunks_count(self, doc_id: str, count: int) -> None:
"""Update chunk count for document"""
if doc_id in self.documents:
self.documents[doc_id]["chunks_count"] = count