fooder-api/fooder/view/diary.py

36 lines
1.2 KiB
Python

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