Some checks failed
Python lint and test / linttest (push) Failing after 8s
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
from fastapi import APIRouter, Depends
|
|
|
|
from fooder.context import AuthContextDependency, Context
|
|
from fooder.controller.preset import PresetController
|
|
from fooder.controller.preset_entry import PresetEntryController
|
|
from fooder.model.entry import EntryCreateModel, EntryUpdateModel
|
|
from fooder.model.preset import PresetCreateModel, PresetModel, PresetUpdateModel
|
|
from fooder.model.preset_entry import PresetEntryModel
|
|
|
|
router = APIRouter()
|
|
|
|
_auth_ctx = AuthContextDependency()
|
|
|
|
|
|
@router.get("", response_model=list[PresetModel])
|
|
async def list_presets(
|
|
ctx: Context = Depends(_auth_ctx),
|
|
limit: int = 10,
|
|
offset: int = 0,
|
|
):
|
|
return await ctx.repo.preset.list_by_user(
|
|
user_id=ctx.user.id, limit=limit, offset=offset
|
|
)
|
|
|
|
|
|
@router.post("/", response_model=PresetModel, status_code=201)
|
|
async def create_preset(
|
|
data: PresetCreateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
ctrl = await PresetController.create(ctx, data.name)
|
|
return ctrl.obj
|
|
|
|
|
|
@router.patch("/{preset_id}", response_model=PresetModel)
|
|
async def update_preset(
|
|
preset_id: int,
|
|
data: PresetUpdateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
preset = await ctx.repo.preset.get_by_id_and_user(preset_id, ctx.user.id)
|
|
await PresetController(ctx, preset).update(data)
|
|
return preset
|
|
|
|
|
|
@router.delete("/{preset_id}", status_code=204)
|
|
async def delete_preset(
|
|
preset_id: int,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
preset = await ctx.repo.preset.get_by_id_and_user(preset_id, ctx.user.id)
|
|
await ctx.repo.preset.delete(preset)
|
|
|
|
|
|
@router.post("/{preset_id}/entry", response_model=PresetEntryModel, status_code=201)
|
|
async def create_preset_entry(
|
|
preset_id: int,
|
|
data: EntryCreateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
preset = await ctx.repo.preset.get_by_id_and_user(preset_id, ctx.user.id)
|
|
ctrl = await PresetEntryController.create(ctx, preset=preset, data=data)
|
|
return ctrl.obj
|
|
|
|
|
|
@router.patch("/{preset_id}/entry/{entry_id}", response_model=PresetEntryModel)
|
|
async def update_preset_entry(
|
|
preset_id: int,
|
|
entry_id: int,
|
|
data: EntryUpdateModel,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
entry = await ctx.repo.preset_entry.get_by_id_and_user(entry_id, ctx.user.id)
|
|
await PresetEntryController(ctx, entry).update(data)
|
|
return entry
|
|
|
|
|
|
@router.delete("/{preset_id}/entry/{entry_id}", status_code=204)
|
|
async def delete_preset_entry(
|
|
preset_id: int,
|
|
entry_id: int,
|
|
ctx: Context = Depends(_auth_ctx),
|
|
):
|
|
async with ctx.repo.transaction():
|
|
entry = await ctx.repo.preset_entry.get_by_id_and_user(entry_id, ctx.user.id)
|
|
await ctx.repo.preset_entry.delete(entry)
|