from __future__ import annotations from typing import Dict, List import aiosqlite from fastapi import APIRouter, Depends, Request import ingredients import meals import persons import recipes import shopping from common import ProblemDetails from main import get_db, cookie_person # temporary during extraction router = APIRouter(prefix="/shopping", tags=["shopping"]) @router.get("/current", operation_id="getCurrentShoppingList", summary="Get the current aggregated shopping list") async def get_current_shopping_list( conn: aiosqlite.Connection = Depends(get_db), ): raise NotImplementedError("get_current_shopping_list extraction pending") @router.get("/{list_id}", operation_id="getShoppingList", summary="Get a purchased shopping list by id", responses={404: {"model": ProblemDetails, "description": "Shopping list not found", "content": {"application/problem+json": {}}}}) async def get_shopping_list( list_id: int, conn: aiosqlite.Connection = Depends(get_db), request: Request | None = None ): raise NotImplementedError("get_shopping_list extraction pending") @router.post("", operation_id="purchaseIngredients", summary="Purchase ingredients for a shopping list") async def purchase_ingredients( shopping_list: shopping.ShoppingList, conn: aiosqlite.Connection = Depends(get_db), person: persons.Person = Depends(cookie_person), ): raise NotImplementedError("purchase_ingredients extraction pending") @router.get("/current/me/ingredients", operation_id="getMyShoppingList", summary="Get my outstanding ingredient requests") async def get_my_shopping_list( conn: aiosqlite.Connection = Depends(get_db), person: persons.Person = Depends(cookie_person) ) -> List[ingredients.Ingredient]: raise NotImplementedError("get_my_shopping_list extraction pending") @router.post("/current/me/ingredients", operation_id="syncMyShoppingList", summary="Sync my outstanding ingredient requests") async def sync_my_shopping_list( requests: List[ingredients.Ingredient], conn: aiosqlite.Connection = Depends(get_db), person: persons.Person = Depends(cookie_person), ) -> List[ingredients.Ingredient]: raise NotImplementedError("sync_my_shopping_list extraction pending") @router.post("/current/meals/{meal_id}", operation_id="requestMeal", summary="Request a meal for shopping", responses={404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}}}) async def request_meal( meal_id: int, conn: aiosqlite.Connection = Depends(get_db), person: persons.Person = Depends(cookie_person), request: Request | None = None, ): raise NotImplementedError("request_meal extraction pending") @router.delete("/current/meals/{meal_id}", operation_id="unrequestMeal", summary="Remove a meal request", responses={404: {"model": ProblemDetails, "description": "Meal not found", "content": {"application/problem+json": {}}}}) async def unrequest_meal( meal_id: int, conn: aiosqlite.Connection = Depends(get_db), person: persons.Person = Depends(cookie_person), request: Request | None = None, ): raise NotImplementedError("unrequest_meal extraction pending")