File size: 3,425 Bytes
f8b25ce
 
 
 
 
 
 
 
 
 
 
e941a76
f8b25ce
 
 
 
 
e941a76
 
 
 
f8b25ce
 
 
 
 
 
e941a76
 
 
 
f8b25ce
 
 
e941a76
 
 
 
 
 
 
 
 
f8b25ce
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
from fastapi import FastAPI, HTTPException, Depends
from app.core.database import get_database
from app.models.ocrtemplate import OCRTemplate, OCRTemplateInDB
from app.core.security import get_password_hash, verify_password
from bson import ObjectId
from app.core.config import settings
from typing import List, Optional, Union
from pymongo import ReturnDocument



async def create_template(template: OCRTemplate, user_id: str, templateForAll: Optional[bool] = False):
    existing_template = await get_template_by_name_and_user(template.template_name, user_id)
    if existing_template:
        raise HTTPException(status_code=401, detail="Template already exists")

    template_dict = template.dict()
    if templateForAll:
        template_dict["user_id"] = "all"
    else:
        template_dict["user_id"] = user_id
    db = get_database(settings.MongoDB_NAME)
    template = await db["templates"].insert_one(template_dict)
    if template:
        return OCRTemplate(**template_dict)
    return None

async def get_all_templates():
    db = get_database(settings.MongoDB_NAME)
    templates = await db["templates"].find().to_list(1000)
    return [OCRTemplateInDB(**template) for template in templates]

async def get_all_templates_by_user_id(user_id: str, template_name: Optional[bool] = False)->  Union[List[OCRTemplateInDB], List[dict]]:
    db = get_database(settings.MongoDB_NAME)

    # Query to find templates with user_id equal to the given user_id or "all"
    templates = await db["templates"].find({
        "$or": [
            {"user_id": user_id},
            {"user_id": "all"}
        ]
    }).to_list(1000)
    # templates = await db["templates"].find({"user_id": user_id}).to_list(1000)

    if template_name:
        # Return only the template_name field
        return [{"template_name": template["template_name"]} for template in templates]

    return [OCRTemplateInDB(**template) for template in templates]
   
async def get_template_by_name(template_name: str) -> OCRTemplate:
    db = get_database(settings.MongoDB_NAME)
    template = await db["templates"].find_one({"template_name": template_name})
    if template:
        return OCRTemplate(**template)
    return None

async def get_template_by_name_and_user(template_name: str, user_id: Optional[str]) -> OCRTemplate:
    query = {"template_name": template_name, "user_id": user_id}
    print("Query:", query)
    db = get_database(settings.MongoDB_NAME)
    template = await db["templates"].find_one(query)
    print(template)
    if template:
        return OCRTemplate(**template)
    return None

async def update_template(template_name: str, template: OCRTemplate, user_id: str):
    query = {"template_name": template_name, "user_id": user_id}
    print("Query:", query)
    db = get_database(settings.MongoDB_NAME)
    updated_template = await db["templates"].find_one_and_update(
        query, 
        {"$set": template.dict()},
        return_document=ReturnDocument.AFTER
    )
    if updated_template:
        return OCRTemplate(**updated_template)
    return None

async def delete_template(template_name: str, user_id: str):
    query = {"template_name": template_name, "user_id": user_id}
    print("Query:", query)
    db = get_database(settings.MongoDB_NAME)
    deleted_template = await db["templates"].find_one_and_delete(query)
    if deleted_template:
        return OCRTemplate(**deleted_template)
    return None