fix(accounts): 409 when admin-adding an account that already exists
add_account no-ops if the Open directive is already present but returned
a normal-looking dict, so the admin endpoint reported success ('created
(sync pending)') for a duplicate. Return an already_existed flag and
raise 409 from the endpoint. Also anchor the existence check on the Open
directive with a trailing-boundary match so a prefix (Expenses:Gas)
doesn't match a longer sibling (Expenses:GasStation). The flag is
additive, so the idempotent user-account path keeps no-opping silently.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7456574f65
commit
caef3cf5e8
2 changed files with 23 additions and 5 deletions
|
|
@ -3695,13 +3695,19 @@ async def api_admin_add_chart_account(
|
|||
if payload.description:
|
||||
metadata["description"] = payload.description
|
||||
|
||||
await fava.add_account(
|
||||
result = await fava.add_account(
|
||||
account_name=payload.name,
|
||||
currencies=payload.currencies,
|
||||
target_file="accounts/chart.beancount",
|
||||
metadata=metadata,
|
||||
)
|
||||
|
||||
if result.get("already_existed"):
|
||||
raise HTTPException(
|
||||
status_code=HTTPStatus.CONFLICT,
|
||||
detail=f"Account {payload.name} already exists",
|
||||
)
|
||||
|
||||
# Mirror into libra DB so permissions / metadata layer sees it.
|
||||
from .account_sync import sync_single_account_from_beancount
|
||||
synced = await sync_single_account_from_beancount(payload.name)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue