78 lines
3.4 KiB
Python
78 lines
3.4 KiB
Python
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
from typing import List, Optional
|
||
|
|
import datetime
|
||
|
|
|
||
|
|
import aiosqlite
|
||
|
|
from fastapi import APIRouter, Depends, Query, Request
|
||
|
|
|
||
|
|
import meals
|
||
|
|
import persons
|
||
|
|
import shopping
|
||
|
|
from common import ProblemDetails
|
||
|
|
from main import get_db, cookie_person # temporary imports during extraction
|
||
|
|
|
||
|
|
router = APIRouter(prefix="/meals", tags=["meals"])
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/upcoming", operation_id="getUpcomingMeals", summary="List upcoming meals in a date range")
|
||
|
|
async def get_upcoming_meals(
|
||
|
|
date_from: datetime.datetime = Query(..., alias="from"),
|
||
|
|
to: datetime.datetime = Query(...),
|
||
|
|
conn: aiosqlite.Connection = Depends(get_db),
|
||
|
|
) -> List[meals.Meal]:
|
||
|
|
raise NotImplementedError("get_upcoming_meals extraction pending")
|
||
|
|
|
||
|
|
|
||
|
|
@router.get("/{meal_id}", response_model=meals.Meal, operation_id="getMeal", summary="Get a meal by id",
|
||
|
|
responses={404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}}})
|
||
|
|
async def get_meal(
|
||
|
|
meal_id: int, conn: aiosqlite.Connection = Depends(get_db), request: Request | None = None
|
||
|
|
) -> meals.Meal:
|
||
|
|
raise NotImplementedError("get_meal extraction pending")
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("", response_model=meals.Meal, operation_id="createMeal", summary="Create a new meal",
|
||
|
|
responses={400: {"model": ProblemDetails, "description": "Validation error", "content": {"application/problem+json": {}}}})
|
||
|
|
async def create_meal(
|
||
|
|
meal: meals.Meal, conn: aiosqlite.Connection = Depends(get_db), request: Request | None = None
|
||
|
|
) -> meals.Meal:
|
||
|
|
raise NotImplementedError("create_meal extraction pending")
|
||
|
|
|
||
|
|
|
||
|
|
@router.put("/{meal_id}", response_model=meals.Meal, operation_id="updateMeal", summary="Update an existing meal",
|
||
|
|
responses={
|
||
|
|
400: {"model": ProblemDetails, "description": "Validation error", "content": {"application/problem+json": {}}},
|
||
|
|
404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}},
|
||
|
|
})
|
||
|
|
async def update_meal(
|
||
|
|
meal_id: int, meal: meals.Meal, conn: aiosqlite.Connection = Depends(get_db), request: Request | None = None
|
||
|
|
) -> meals.Meal:
|
||
|
|
raise NotImplementedError("update_meal extraction pending")
|
||
|
|
|
||
|
|
|
||
|
|
@router.post("/{meal_id}/consumed", response_model=meals.Meal, operation_id="markMealConsumed", summary="Mark a meal as consumed",
|
||
|
|
responses={
|
||
|
|
400: {"model": ProblemDetails, "description": "Validation error", "content": {"application/problem+json": {}}},
|
||
|
|
404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}},
|
||
|
|
})
|
||
|
|
async def mark_consumed(
|
||
|
|
meal_id: int,
|
||
|
|
consumed_date: Optional[datetime.datetime] = None,
|
||
|
|
conn: aiosqlite.Connection = Depends(get_db),
|
||
|
|
person: persons.Person = Depends(cookie_person),
|
||
|
|
request: Request | None = None,
|
||
|
|
) -> meals.Meal:
|
||
|
|
raise NotImplementedError("mark_consumed extraction pending")
|
||
|
|
|
||
|
|
|
||
|
|
@router.delete("/{meal_id}", response_model=meals.Meal, operation_id="deleteMeal", summary="Delete a meal",
|
||
|
|
responses={404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}}})
|
||
|
|
async def delete_meal(
|
||
|
|
meal_id: int,
|
||
|
|
conn: aiosqlite.Connection = Depends(get_db),
|
||
|
|
person: persons.Person = Depends(cookie_person),
|
||
|
|
request: Request | None = None,
|
||
|
|
) -> meals.Meal:
|
||
|
|
raise NotImplementedError("delete_meal extraction pending")
|