112 lines
3.8 KiB
Python
112 lines
3.8 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, HTTPException, Request
|
|
|
|
from app.models import (
|
|
ExerciseTemplateCreate,
|
|
MeasurementEntryCreate,
|
|
ProfileUpdate,
|
|
RoutineCreate,
|
|
WeightEntryCreate,
|
|
WorkoutCreate,
|
|
)
|
|
|
|
router = APIRouter(prefix='/api')
|
|
|
|
|
|
@router.get('/health')
|
|
def health() -> dict[str, str]:
|
|
return {'status': 'ok'}
|
|
|
|
|
|
@router.get('/dashboard/summary')
|
|
def dashboard_summary(request: Request) -> dict:
|
|
return request.app.state.store.dashboard_summary()
|
|
|
|
|
|
@router.put('/profile/{user_id}')
|
|
def update_profile(user_id: str, payload: ProfileUpdate, request: Request) -> dict:
|
|
try:
|
|
return request.app.state.store.update_profile(user_id, payload.model_dump())
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.post('/profile/{user_id}/weight', status_code=201)
|
|
def add_weight_entry(user_id: str, payload: WeightEntryCreate, request: Request) -> dict:
|
|
try:
|
|
return request.app.state.store.add_weight_entry(user_id, payload.model_dump())
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.get('/history/{user_id}/weights')
|
|
def weight_history(user_id: str, request: Request) -> list[dict]:
|
|
try:
|
|
return request.app.state.store.weight_history(user_id)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.post('/profile/{user_id}/measurements', status_code=201)
|
|
def add_measurement_entry(user_id: str, payload: MeasurementEntryCreate, request: Request) -> dict:
|
|
try:
|
|
return request.app.state.store.add_measurement_entry(user_id, payload.model_dump())
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.get('/history/{user_id}/measurements')
|
|
def measurement_history(user_id: str, request: Request) -> list[dict]:
|
|
try:
|
|
return request.app.state.store.measurement_history(user_id)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.post('/exercises/templates', status_code=201)
|
|
def create_exercise_template(payload: ExerciseTemplateCreate, request: Request) -> dict:
|
|
return request.app.state.store.add_exercise_template(payload.model_dump())
|
|
|
|
|
|
@router.get('/exercises/templates')
|
|
def list_exercise_templates(request: Request) -> list[dict]:
|
|
return request.app.state.store.list_exercise_templates()
|
|
|
|
|
|
@router.post('/routines', status_code=201)
|
|
def create_routine(payload: RoutineCreate, request: Request) -> dict:
|
|
try:
|
|
return request.app.state.store.add_routine(payload.model_dump())
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.get('/routines')
|
|
def list_routines(request: Request) -> list[dict]:
|
|
return request.app.state.store.list_routines()
|
|
|
|
|
|
@router.post('/workouts', status_code=201)
|
|
def add_workout(payload: WorkoutCreate, request: Request) -> dict:
|
|
try:
|
|
return request.app.state.store.add_workout(payload.model_dump())
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.get('/history/{user_id}/workouts')
|
|
def workout_history(user_id: str, request: Request) -> list[dict]:
|
|
try:
|
|
return request.app.state.store.workout_history(user_id)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|
|
|
|
|
|
@router.get('/progression/{user_id}/exercises')
|
|
def exercise_progression(user_id: str, request: Request) -> list[dict]:
|
|
try:
|
|
return request.app.state.store.exercise_progression(user_id)
|
|
except KeyError as exc:
|
|
raise HTTPException(status_code=404, detail='Unknown user') from exc
|