36 lines
1.2 KiB
Python
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
|