import datetime from fastapi import APIRouter, Depends from fooder.command.create_diary import create_diary from fooder.context import AuthContextDependency, Context from fooder.controller.diary import DiaryController from fooder.model.diary import DiaryCreateModel, DiaryModel, DiaryUpdateModel router = APIRouter(tags=["diary"]) _auth_ctx = AuthContextDependency() @router.get("/{date}", response_model=DiaryModel) async def get_diary(date: datetime.date, ctx: Context = Depends(_auth_ctx)): return await ctx.repo.diary.get_by_user_and_date(ctx.user.id, date) @router.patch("/{date}", response_model=DiaryModel) async def update_diary( date: datetime.date, data: DiaryUpdateModel, ctx: Context = Depends(_auth_ctx), ): async with ctx.repo.transaction(): diary = await ctx.repo.diary.get_by_user_and_date(ctx.user.id, date) await DiaryController(ctx, diary).update(data) return diary @router.post("", response_model=DiaryModel, status_code=201) async def create_diary_route(data: DiaryCreateModel, ctx: Context = Depends(_auth_ctx)): async with ctx.repo.transaction(): diary = await create_diary(ctx, date=data.date) return diary