moodra-api / app /api /endpoints.py
muaazl's picture
first commit
cf4ac41
from fastapi import APIRouter, HTTPException, File, UploadFile, Body
from datetime import datetime
import time
from ..services.coordinator import AnalysisCoordinator
from ..schemas.api_responses import AnalysisRequest, AnalysisSuccessResponse, ErrorResponse
from ..services.scoring.schemas import ScoringResponse
router = APIRouter(prefix="/analyze", tags=["Analysis"])
coordinator = AnalysisCoordinator()
@router.post("/text", response_model=AnalysisSuccessResponse)
async def analyze_text(request: AnalysisRequest = Body(...)):
"""Analyze a pasted excerpt of WhatsApp chat text."""
start_t = time.time()
try:
scoring_result: ScoringResponse = await coordinator.run_full_analysis(request.text)
duration = round(time.time() - start_t, 2)
return AnalysisSuccessResponse(
data=scoring_result,
metadata={
"timestamp": datetime.utcnow().isoformat(),
"processing_time": duration
}
)
except Exception as e:
import traceback
traceback.print_exc()
raise HTTPException(
status_code=500,
detail=f"Analysis failed: {str(e)}"
)
@router.post("/file", response_model=AnalysisSuccessResponse)
async def analyze_file(file: UploadFile = File(...)):
"""Analyze a WhatsApp export .txt file."""
if not file.filename.endswith(".txt"):
raise HTTPException(status_code=400, detail="Only .txt files are supported currently.")
start_t = time.time()
try:
content = await file.read()
scoring_result: ScoringResponse = await coordinator.analyze_file_content(content)
duration = round(time.time() - start_t, 2)
return AnalysisSuccessResponse(
data=scoring_result,
metadata={
"timestamp": datetime.utcnow().isoformat(),
"processing_time": duration
}
)
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"File analysis failed: {str(e)}"
)
finally:
await file.close()