LogicGoInfotechSpaces's picture
Update app/api/routes.py
c7ee8c4 verified
raw
history blame
2.37 kB
import time
from typing import Any
from fastapi import APIRouter, Depends, HTTPException
from app.dependencies import get_api_logger, get_category_service
from app.schemas.categories import CategorizeRequest, CategoryPrediction
from app.services.autocategorizer import AutoCategoryService
from app.services.api_logger import ApiLogger
router = APIRouter()
@router.post("/categorize", response_model=CategoryPrediction, summary="Categorize a transaction note")
async def categorize_transaction(
payload: CategorizeRequest,
service: AutoCategoryService = Depends(get_category_service),
api_logger: ApiLogger = Depends(get_api_logger),
) -> CategoryPrediction:
started_at = time.monotonic()
try:
result = await service.categorize(payload.notes)
await api_logger.log_categorization(
name="Auto Expense Categorization",
status="success",
response_time=time.monotonic() - started_at,
user_id=payload.user_id,
)
return result
except HTTPException as exc:
await api_logger.log_categorization(
name="Auto Expense Categorization",
status="fail",
response_time=time.monotonic() - started_at,
user_id=payload.user_id,
error_message=_normalize_error_detail(exc.detail),
)
raise
except Exception as exc:
await api_logger.log_categorization(
name="Auto Expense Categorization",
status="fail",
response_time=time.monotonic() - started_at,
user_id=payload.user_id,
error_message=str(exc),
)
raise
def _normalize_error_detail(detail: Any) -> str:
if isinstance(detail, str):
return detail
return str(detail)
# from fastapi import APIRouter, Depends
# from app.dependencies import get_category_service
# from app.schemas.categories import CategorizeRequest, CategoryPrediction
# from app.services.autocategorizer import AutoCategoryService
# router = APIRouter()
# @router.post("/categorize", response_model=CategoryPrediction, summary="Categorize a transaction note")
# async def categorize_transaction(
# payload: CategorizeRequest,
# service: AutoCategoryService = Depends(get_category_service),
# ) -> CategoryPrediction:
# return await service.categorize(payload.notes)