from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Request from fastapi.security import HTTPBearer from pydantic import BaseModel from slowapi.util import get_remote_address from slowapi import Limiter from slowapi.errors import RateLimitExceeded from config import ACCESS_RATE from .controller import ( handle_text_analysis, handle_file_upload, handle_sentence_level_analysis, handle_file_sentence, verify_token ) limiter = Limiter(key_func=get_remote_address) router = APIRouter() security = HTTPBearer() class TextInput(BaseModel): text: str @router.post("/analyse") @limiter.limit(ACCESS_RATE) async def analyze(request: Request, data: TextInput, token: str = Depends(verify_token)): return await handle_text_analysis(data.text) @router.post("/upload") @limiter.limit(ACCESS_RATE) async def upload_file(request: Request, file: UploadFile = File(...), token: str = Depends(verify_token)): return await handle_file_upload(file) @router.post("/analyse-sentences") @limiter.limit(ACCESS_RATE) async def analyze_sentences(request: Request, data: TextInput, token: str = Depends(verify_token)): if not data.text: raise HTTPException(status_code=400, detail="Missing 'text' in request body") return await handle_sentence_level_analysis(data.text) @router.post("/analyse-sentance-file") @limiter.limit(ACCESS_RATE) async def analyze_sentance_file(request: Request, file: UploadFile = File(...), token: str = Depends(verify_token)): return await handle_file_sentence(file) @router.get("/health") @limiter.limit(ACCESS_RATE) def health(request: Request): return {"status": "ok"}