from fastapi import APIRouter, Body, Request, status, HTTPException from typing import List from datetime import date import sys from ..operations import calls as calls from ..models.calls import UserCaptions, UserCall, UpdateCall from ..endpoints.users import get_collection_users router = APIRouter(prefix="/call", tags=["Calls"]) def get_collection_calls(request: Request): try: return request.app.database["call_records"] except: raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail=f"Unable to find call records Database.") @router.post("/create-call", response_description="Create a new user call record", status_code=status.HTTP_201_CREATED, response_model=UserCall) async def create_calls(request: Request, user_calls: UserCall = Body(...)): collection = get_collection_calls(request) return calls.create_calls(collection, user_calls) @router.get("/find-call/{call_id}", response_description="Find user's calls based on User ID", response_model=UserCall) async def find_call(request: Request, call_id: str): collection = get_collection_calls(request) return calls.find_call(collection, call_id) @router.get("/find-user-calls/{user_id}", response_description="Find user's calls based on User ID", response_model=List[UserCall]) async def find_user_calls(request: Request, user_id: str): collection = get_collection_calls(request) return calls.find_user_calls(collection, user_id) @router.get("/get-captions/{call_id}/{user_id}", response_description="Find user's calls based on User ID") async def get_caption_text(request: Request, call_id: str, user_id: str): collection = get_collection_calls(request) return calls.get_caption_text(collection, call_id, user_id) @router.get("/find-duration/{min_len}/{max_len}", response_description="Find calls based on call duration in minutes", response_model=List[UserCall]) async def list_transcripts_by_duration(request: Request, min_len: int, max_len: int): collection = get_collection_calls(request) return calls.list_transcripts_by_duration(collection, min_len, max_len) @router.put("/update-call/{call_id}", response_description="Update an existing call", response_model=UpdateCall) async def update_calls(request: Request, call_id: str, user_calls: UpdateCall = Body(...)): collection = get_collection_calls(request) return calls.update_calls(collection, call_id, user_calls) @router.put("/update-captions/{call_id}", response_description="Update an existing call", response_model=UpdateCall) async def update_captions(request: Request, call_id: str, user_calls: UserCaptions = Body(...)): call_collection = get_collection_calls(request) user_collection = get_collection_users(request) return calls.update_captions(call_collection, user_collection, call_id, user_calls) @router.delete("/delete-call/{call_id}", response_description="Delete a call by its id") async def delete_call(request: Request, call_id: str): collection = get_collection_calls(request) return calls.delete_calls(collection, call_id) @router.get("/fuzzy-search/{user_id}/{query}", response_description="Perform fuzzy text search on caption fields", response_model=List[UserCall]) async def fuzzy_search(request: Request, user_id: str, query: str): collection = get_collection_calls(request) return calls.fuzzy_search(collection, user_id, query) @router.get("/summarise/{call_id}/{user_id}/{target_language}", response_description="Perform gpt-3.5 summarisation on call_id") async def summarise(request: Request, call_id: str, user_id: str, target_language: str): collection = get_collection_calls(request) return calls.summarise(collection, call_id, user_id, target_language) @router.get("/term-extraction/{call_id}/{user_id}/{target_language}", response_description="Perform key term extraction on call record") async def term_extraction(request: Request, call_id: str, user_id: str, target_language: str): collection = get_collection_calls(request) return calls.term_extraction(collection, call_id, user_id, target_language)