Spaces:
Sleeping
Sleeping
| from fastapi import HTTPException, status | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from externals.databases.pg_crud import ( | |
| get_file_by_filename, | |
| delete_file_by_filename, | |
| ) | |
| from externals.storages.azure_blob import delete_blob_by_filename | |
| from utils.logger import get_logger | |
| logger = get_logger("knowledge-delete") | |
| class KnowledgeDeleteService: | |
| def __init__(self, db: AsyncSession, user): | |
| self.db = db | |
| self.user = user | |
| async def delete(self, filename: str) -> None: | |
| logger.info( | |
| "knowledge.delete.requested", | |
| extra={ | |
| "cv_filename": filename, | |
| "user_id": str(self.user.user_id), | |
| "tenant_id": str(self.user.tenant_id), | |
| }, | |
| ) | |
| # 1️⃣ Check DB record | |
| cv_file = await get_file_by_filename(self.db, | |
| filename=filename, | |
| user_id=self.user.user_id) | |
| if not cv_file: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail=f"File '{filename}' not found", | |
| ) | |
| # 2️⃣ Delete blob | |
| blob_deleted = await delete_blob_by_filename(filename=filename, | |
| tenant_id=self.user.tenant_id, | |
| user_id=self.user.user_id) | |
| if not blob_deleted: | |
| raise HTTPException( | |
| status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, | |
| detail="Failed to delete blob file", | |
| ) | |
| # 3️⃣ Delete DB record | |
| await delete_file_by_filename(self.db, filename) | |
| logger.info( | |
| "knowledge.delete.success", | |
| extra={ | |
| "cv_filename": filename, | |
| "user_id": str(self.user.user_id), | |
| }, | |
| ) | |