fooder-api/fooder/controller/meal.py

24 lines
905 B
Python

from typing import AsyncIterator
from fastapi import HTTPException
from ..model.meal import Meal, CreateMealPayload
from ..domain.meal import Meal as DBMeal
from ..domain.diary import Diary as DBDiary
from .base import AuthorizedController
class CreateMeal(AuthorizedController):
async def call(self, content: CreateMealPayload) -> Meal:
async with self.async_session.begin() as session:
if not await DBDiary.has_permission(
session, self.user.id, content.diary_id
):
raise HTTPException(status_code=404, detail="not found")
try:
meal = await DBMeal.create(
session, content.diary_id, content.order, content.name
)
return Meal.from_orm(meal)
except AssertionError as e:
raise HTTPException(status_code=400, detail=e.args[0])