Fix admin import chain and tests
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
from fastapi import APIRouter, HTTPException, Query
|
||||
|
||||
from backend.database import db
|
||||
from backend.schemas import CaseCreate, CaseListResponse, CaseResponse, CaseUpdate
|
||||
|
||||
router = APIRouter(prefix='/api/v1/cases', tags=['cases'])
|
||||
|
||||
|
||||
@router.post('', response_model=CaseResponse)
|
||||
def create_case(payload: CaseCreate) -> dict:
|
||||
data = payload.model_dump(exclude_none=True)
|
||||
gps = data.pop('gps', None) or {}
|
||||
note = data.pop('note', None)
|
||||
if note is not None and 'notes' not in data:
|
||||
data['notes'] = note
|
||||
if gps:
|
||||
data['gps_lat'] = gps.get('lat')
|
||||
data['gps_lon'] = gps.get('lon')
|
||||
case = db.create_case(**data)
|
||||
if data.get('status'):
|
||||
db.update_case(case.id, status=data['status'])
|
||||
return case.to_detail()
|
||||
|
||||
|
||||
@router.get('', response_model=CaseListResponse)
|
||||
def list_cases(page: int = Query(default=1, ge=1), page_size: int = Query(default=20, ge=1, le=100)) -> dict:
|
||||
cases = db.list_cases()
|
||||
start = (page - 1) * page_size
|
||||
end = start + page_size
|
||||
items = [c.to_detail() for c in cases[start:end]]
|
||||
return {'items': items, 'total': len(cases), 'page': page, 'page_size': page_size}
|
||||
|
||||
|
||||
@router.get('/{case_id}', response_model=CaseResponse)
|
||||
def get_case(case_id: str) -> dict:
|
||||
case = db.get_case(case_id)
|
||||
if not case:
|
||||
raise HTTPException(status_code=404, detail='Case not found')
|
||||
return case.to_detail()
|
||||
|
||||
|
||||
@router.patch('/{case_id}', response_model=CaseResponse)
|
||||
def patch_case(case_id: str, payload: CaseUpdate) -> dict:
|
||||
data = payload.model_dump(exclude_none=True)
|
||||
note = data.pop('note', None)
|
||||
if note is not None and 'notes' not in data:
|
||||
data['notes'] = note
|
||||
case = db.update_case(case_id, **data)
|
||||
if not case:
|
||||
raise HTTPException(status_code=404, detail='Case not found')
|
||||
return case.to_detail()
|
||||
|
||||
|
||||
@router.delete('/{case_id}')
|
||||
def delete_case(case_id: str) -> dict[str, bool]:
|
||||
deleted = db.delete_case(case_id)
|
||||
if not deleted:
|
||||
raise HTTPException(status_code=404, detail='Case not found')
|
||||
return {'deleted': True}
|
||||
Reference in New Issue
Block a user