Spaces:
Running
Running
from fastapi import Depends, FastAPI, HTTPException, status | |
from datetime import datetime, timedelta | |
from typing import List, Union, Optional | |
from fastapi import APIRouter | |
from pydantic import BaseModel | |
import json | |
from apps.webui.models.documents import ( | |
Documents, | |
DocumentForm, | |
DocumentUpdateForm, | |
DocumentModel, | |
DocumentResponse, | |
) | |
from utils.utils import get_verified_user, get_admin_user | |
from constants import ERROR_MESSAGES | |
router = APIRouter() | |
############################ | |
# GetDocuments | |
############################ | |
async def get_documents(user=Depends(get_verified_user)): | |
docs = [ | |
DocumentResponse( | |
**{ | |
**doc.model_dump(), | |
"content": json.loads(doc.content if doc.content else "{}"), | |
} | |
) | |
for doc in Documents.get_docs() | |
] | |
return docs | |
############################ | |
# CreateNewDoc | |
############################ | |
async def create_new_doc(form_data: DocumentForm, user=Depends(get_admin_user)): | |
doc = Documents.get_doc_by_name(form_data.name) | |
if doc == None: | |
doc = Documents.insert_new_doc(user.id, form_data) | |
if doc: | |
return DocumentResponse( | |
**{ | |
**doc.model_dump(), | |
"content": json.loads(doc.content if doc.content else "{}"), | |
} | |
) | |
else: | |
raise HTTPException( | |
status_code=status.HTTP_400_BAD_REQUEST, | |
detail=ERROR_MESSAGES.FILE_EXISTS, | |
) | |
else: | |
raise HTTPException( | |
status_code=status.HTTP_400_BAD_REQUEST, | |
detail=ERROR_MESSAGES.NAME_TAG_TAKEN, | |
) | |
############################ | |
# GetDocByName | |
############################ | |
async def get_doc_by_name(name: str, user=Depends(get_verified_user)): | |
doc = Documents.get_doc_by_name(name) | |
if doc: | |
return DocumentResponse( | |
**{ | |
**doc.model_dump(), | |
"content": json.loads(doc.content if doc.content else "{}"), | |
} | |
) | |
else: | |
raise HTTPException( | |
status_code=status.HTTP_401_UNAUTHORIZED, | |
detail=ERROR_MESSAGES.NOT_FOUND, | |
) | |
############################ | |
# TagDocByName | |
############################ | |
class TagItem(BaseModel): | |
name: str | |
class TagDocumentForm(BaseModel): | |
name: str | |
tags: List[dict] | |
async def tag_doc_by_name(form_data: TagDocumentForm, user=Depends(get_verified_user)): | |
doc = Documents.update_doc_content_by_name(form_data.name, {"tags": form_data.tags}) | |
if doc: | |
return DocumentResponse( | |
**{ | |
**doc.model_dump(), | |
"content": json.loads(doc.content if doc.content else "{}"), | |
} | |
) | |
else: | |
raise HTTPException( | |
status_code=status.HTTP_401_UNAUTHORIZED, | |
detail=ERROR_MESSAGES.NOT_FOUND, | |
) | |
############################ | |
# UpdateDocByName | |
############################ | |
async def update_doc_by_name( | |
name: str, | |
form_data: DocumentUpdateForm, | |
user=Depends(get_admin_user), | |
): | |
doc = Documents.update_doc_by_name(name, form_data) | |
if doc: | |
return DocumentResponse( | |
**{ | |
**doc.model_dump(), | |
"content": json.loads(doc.content if doc.content else "{}"), | |
} | |
) | |
else: | |
raise HTTPException( | |
status_code=status.HTTP_400_BAD_REQUEST, | |
detail=ERROR_MESSAGES.NAME_TAG_TAKEN, | |
) | |
############################ | |
# DeleteDocByName | |
############################ | |
async def delete_doc_by_name(name: str, user=Depends(get_admin_user)): | |
result = Documents.delete_doc_by_name(name) | |
return result | |