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")