File size: 1,931 Bytes
478dec6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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),
            },
        )