Spaces:
Sleeping
Sleeping
from fastapi import APIRouter, Depends, Request, UploadFile | |
from src.config.databaseConfig import DATABASE | |
from src.config.appConfig import ENV_VAR | |
from src.helpers.pagination import * | |
from src.helpers.response import ResponseHandler | |
from src.helpers.upload_file_cloudinary import upload_file | |
from src.middleware.verifyToken import verify_token | |
router = APIRouter() | |
# Your route definitions | |
from typing import Dict, List | |
def convert_form_data_to_dict(form_data) -> Dict[str, List[str]]: | |
data_dict = {} | |
for key, value in form_data.items(): | |
if isinstance(value, str): | |
if key in data_dict: | |
if isinstance(data_dict[key], list): | |
data_dict[key].append(value) | |
else: | |
data_dict[key] = [data_dict[key], value] | |
else: | |
data_dict[key] = value | |
elif isinstance(value, UploadFile): | |
# Handle UploadFile separately if needed | |
pass | |
else: | |
# Handle other types of values if needed | |
pass | |
# Convert keys with multiple values to lists | |
for key in data_dict: | |
if isinstance(data_dict[key], list) and len(data_dict[key]) > 1: | |
continue # Skip if it's already a list with multiple values | |
elif key in form_data.getlist(): | |
data_dict[key] = form_data.getlist(key) | |
return data_dict | |
async def create_chat( | |
req: Request, icon: UploadFile = None, tokenData=Depends(verify_token) | |
): | |
try: | |
username = tokenData["username"] | |
form_data = await req.form() | |
# payload = {key: form_data[key] for key in form_data if key != "picPath"} | |
# dt = {} | |
# print(convert_form_data_to_dict(form_data)) | |
if icon is None: | |
return ResponseHandler.error(3007, None, 400) | |
file_data = await upload_file( | |
icon, form_data["collectionName"] + "_icon", "ChatIcons/" | |
) | |
icon_public_id = file_data["public_id"] | |
# print(icon_public_id) | |
# print(form_data["title"]) | |
# print(form_data["templateContext"]) | |
# print(form_data["collectionName"]) | |
# print(form_data["sampleQuetions"]) | |
# print(form_data) | |
# print(ENV_VAR.MONGO_DB_NAME_CHATS) | |
chat = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS]["chats"].insert_one( | |
{ | |
"username": username, | |
"title": form_data["title"], | |
"templateContext": form_data["templateContext"], | |
"collectionName": form_data["collectionName"], | |
"sampleQuetions": ( | |
(form_data["sampleQuetions"]) | |
if form_data["sampleQuetions"] is not None | |
else [] | |
), | |
"buttonIcon": icon_public_id, | |
} | |
) | |
return ResponseHandler.success(3000, chat.acknowledged) | |
except Exception as error: | |
print(error) | |
return ResponseHandler.error(9999, error, 500) | |
async def get_paginated_chats(req: Request): | |
try: | |
page = int(req.query_params.get("page", 1)) | |
limit = int(req.query_params.get("limit", 10)) | |
total_count = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS][ | |
"chats" | |
].estimated_document_count() | |
chats = ( | |
DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS]["chats"] | |
.find() | |
.skip((page - 1) * limit) | |
.limit(limit) | |
) | |
paginated_response = get_paginated_response( | |
list(chats), page, limit, total_count | |
) | |
# print(paginated_response) | |
return ResponseHandler.success(3001, paginated_response) | |
except Exception as error: | |
return ResponseHandler.error(9000, 500, error) | |
async def get_chat_by_collection_name(req: Request, collection_name: str): | |
try: | |
chat = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS]["chats"].find_one( | |
{"collectionName": collection_name} | |
) | |
if not chat: | |
return ResponseHandler.error(3003, 404) | |
return ResponseHandler.success(3002, chat) | |
except Exception as error: | |
return ResponseHandler.error(9000, 500, error) | |
async def update_chat( | |
req: Request, | |
collection_name: str, | |
icon: UploadFile = None, | |
tokenData=Depends(verify_token), | |
): | |
try: | |
username = tokenData["username"] | |
form_data = await req.form() | |
chat = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS]["chats"].find_one( | |
{"collectionName": collection_name, "username": username} | |
) | |
if not chat: | |
return ResponseHandler.error(3003, 404) | |
icon_public_id = None | |
if icon is not None: | |
file_data = await upload_file( | |
icon, form_data["collectionName"] + "_icon", "ChatIcons/" | |
) | |
icon_public_id = file_data["public_id"] | |
updated_chat = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS][ | |
"chats" | |
].find_one_and_update( | |
{"collectionName": collection_name}, | |
{ | |
"$set": { | |
"title": form_data["title"], | |
"templateContext": form_data["templateContext"], | |
"buttonIcon": icon_public_id or chat.get("buttonIcon"), | |
} | |
}, | |
) | |
if not updated_chat: | |
return ResponseHandler.error(3003, 404) | |
return ResponseHandler.success(3004) | |
except Exception as error: | |
return ResponseHandler.error(9000, 500, error) | |
async def delete_chat(collection_name: str, tokenData=Depends(verify_token)): | |
try: | |
username = tokenData["username"] | |
deleted_chat = DATABASE.client[ENV_VAR.MONGO_DB_NAME_CHATS][ | |
"chats" | |
].find_one_and_delete({"collectionName": collection_name, "username": username}) | |
if not deleted_chat: | |
return ResponseHandler.error(3003, 404) | |
return ResponseHandler.success(3005) | |
except Exception as error: | |
return ResponseHandler.error(9000, 500, error) | |