File size: 2,313 Bytes
fade1d6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
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