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), }, )