|
from fastapi import APIRouter, Depends, Query |
|
from typing import List, Dict, Any |
|
|
|
from ..services.record_service import RecordService |
|
from ..models.monthly_record import MonthlyRecordCreate, MonthlyRecordUpdate |
|
|
|
router = APIRouter(prefix="/api/v1", tags=["records"]) |
|
|
|
def get_service() -> RecordService: |
|
return RecordService() |
|
|
|
@router.get("/records/{month_key}") |
|
async def get_record(month_key: str, svc: RecordService = Depends(get_service)) -> Dict[str, Any]: |
|
return await svc.get_by_month_key(month_key) |
|
|
|
@router.get("/records") |
|
async def list_records( |
|
limit: int = Query(12, ge=1, le=200), |
|
skip: int = Query(0, ge=0), |
|
svc: RecordService = Depends(get_service), |
|
) -> List[Dict[str, Any]]: |
|
return await svc.list(limit=limit, skip=skip) |
|
|
|
@router.post("/records", status_code=201) |
|
async def create_record(payload: MonthlyRecordCreate, svc: RecordService = Depends(get_service)) -> Dict[str, Any]: |
|
return await svc.create(payload) |
|
|
|
@router.put("/records/{month_key}") |
|
async def update_record(month_key: str, payload: MonthlyRecordUpdate, svc: RecordService = Depends(get_service)) -> Dict[str, Any]: |
|
return await svc.update(month_key, payload) |
|
|
|
@router.delete("/records/{month_key}", status_code=204) |
|
async def delete_record(month_key: str, svc: RecordService = Depends(get_service)) -> None: |
|
await svc.delete(month_key) |
|
|
|
|
|
DEFAULT_CATEGORIES = [ |
|
{"category_id": "housing", "name": "Housing (Rent/Mortgage)", "amount": 0.0, "color": "#4299e1"}, |
|
{"category_id": "utilities", "name": "Utilities (Water/Power/Internet)", "amount": 0.0, "color": "#805ad5"}, |
|
{"category_id": "groceries", "name": "Food & Groceries", "amount": 0.0, "color": "#48bb78"}, |
|
{"category_id": "transport", "name": "Transport (Fuel/Taxi/Transit)", "amount": 0.0, "color": "#ed8936"}, |
|
{"category_id": "health", "name": "Healthcare/Pharmacy", "amount": 0.0, "color": "#f56565"}, |
|
{"category_id": "education", "name": "Education/Books", "amount": 0.0, "color": "#38b2ac"}, |
|
{"category_id": "family", "name": "Family/Children", "amount": 0.0, "color": "#d69e2e"}, |
|
{"category_id": "misc", "name": "Miscellaneous", "amount": 0.0, "color": "#a0aec0"}, |
|
] |
|
|
|
@router.get("/categories/default") |
|
async def default_categories() -> List[dict]: |
|
return DEFAULT_CATEGORIES |
|
|