51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
import datetime
|
|
|
|
from fastapi import APIRouter, Depends
|
|
|
|
from fooder.command.create_entry import create_entry
|
|
from fooder.context import AuthContextDependency, Context
|
|
from fooder.controller.entry import EntryController
|
|
from fooder.model.entry import EntryCreateModel, EntryModel, EntryUpdateModel
|
|
|
|
router = APIRouter(tags=["entry"])
|
|
|
|
_auth_ctx = AuthContextDependency()
|
|
|
|
|
|
@router.post("", response_model=EntryModel, status_code=201)
|
|
async def create_entry_route(
|
|
date: datetime.date,
|
|
meal_id: int,
|
|
data: EntryCreateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
meal = await ctx.repo.meal.get_by_id_and_user(meal_id, ctx.user.id)
|
|
entry = await create_entry(ctx, meal=meal, data=data)
|
|
return entry
|
|
|
|
|
|
@router.patch("/{entry_id}", response_model=EntryModel)
|
|
async def update_entry(
|
|
date: datetime.date,
|
|
meal_id: int,
|
|
entry_id: int,
|
|
data: EntryUpdateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
entry = await ctx.repo.entry.get_by_id_and_user(entry_id, ctx.user.id)
|
|
await EntryController(ctx, entry).update(data)
|
|
return entry
|
|
|
|
|
|
@router.delete("/{entry_id}", status_code=204)
|
|
async def delete_entry(
|
|
date: datetime.date,
|
|
meal_id: int,
|
|
entry_id: int,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
entry = await ctx.repo.entry.get_by_id_and_user(entry_id, ctx.user.id)
|
|
await ctx.repo.entry.delete(entry)
|