import datetime from fastapi import APIRouter, Depends from fooder.context import AuthContextDependency, Context from fooder.controller.meal import MealController from fooder.model.meal import MealCreateModel, MealModel, MealUpdateModel router = APIRouter(tags=["meal"]) _auth_ctx = AuthContextDependency() @router.post("", response_model=MealModel, status_code=201) async def create_meal( date: datetime.date, data: MealCreateModel, ctx: Context = Depends(_auth_ctx), ): async with ctx.repo.transaction(): diary = await ctx.repo.diary.get_by_user_and_date(ctx.user.id, date) ctrl = await MealController.create(ctx, diary_id=diary.id, data=data) return ctrl.obj @router.patch("/{meal_id}", response_model=MealModel) async def update_meal( date: datetime.date, meal_id: int, data: MealUpdateModel, ctx: Context = Depends(_auth_ctx), ): async with ctx.repo.transaction(): diary = await ctx.repo.diary.get_by_user_and_date(ctx.user.id, date) meal = await ctx.repo.meal.get_by_id_and_diary(meal_id, diary.id) await MealController(ctx, meal).update(data) return meal @router.delete("/{meal_id}", status_code=204) async def delete_meal( date: datetime.date, meal_id: int, ctx: Context = Depends(_auth_ctx), ): async with ctx.repo.transaction(): diary = await ctx.repo.diary.get_by_user_and_date(ctx.user.id, date) meal = await ctx.repo.meal.get_by_id_and_diary(meal_id, diary.id) await ctx.repo.meal.delete(meal)