Filter inactive accounts from default queries
- Updated get_all_accounts() to add include_inactive parameter (default False) - Updated get_accounts_by_type() to add include_inactive parameter (default False) - Modified account_sync to use include_inactive=True (needs to see all accounts) - Default behavior now hides inactive accounts from user-facing API endpoints This ensures inactive accounts are automatically hidden from users while still allowing internal operations (like sync) to access all accounts.
This commit is contained in:
parent
cb62cbb0a2
commit
657e3d54da
2 changed files with 37 additions and 13 deletions
|
|
@ -135,8 +135,8 @@ async def sync_accounts_from_beancount(force_full_sync: bool = False) -> dict:
|
||||||
"errors": [str(e)],
|
"errors": [str(e)],
|
||||||
}
|
}
|
||||||
|
|
||||||
# Get all accounts from Castle DB
|
# Get all accounts from Castle DB (including inactive ones for sync)
|
||||||
castle_accounts = await get_all_accounts()
|
castle_accounts = await get_all_accounts(include_inactive=True)
|
||||||
|
|
||||||
# Build lookup maps
|
# Build lookup maps
|
||||||
beancount_account_names = {acc["account"] for acc in beancount_accounts}
|
beancount_account_names = {acc["account"] for acc in beancount_accounts}
|
||||||
|
|
|
||||||
46
crud.py
46
crud.py
|
|
@ -120,19 +120,43 @@ async def get_account_by_name(name: str) -> Optional[Account]:
|
||||||
return account
|
return account
|
||||||
|
|
||||||
|
|
||||||
async def get_all_accounts() -> list[Account]:
|
async def get_all_accounts(include_inactive: bool = False) -> list[Account]:
|
||||||
return await db.fetchall(
|
"""
|
||||||
"SELECT * FROM accounts ORDER BY account_type, name",
|
Get all accounts, optionally including inactive ones.
|
||||||
model=Account,
|
|
||||||
)
|
Args:
|
||||||
|
include_inactive: If True, include inactive accounts. Default False.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of Account objects
|
||||||
|
"""
|
||||||
|
if include_inactive:
|
||||||
|
query = "SELECT * FROM accounts ORDER BY account_type, name"
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM accounts WHERE is_active = TRUE ORDER BY account_type, name"
|
||||||
|
|
||||||
|
return await db.fetchall(query, model=Account)
|
||||||
|
|
||||||
|
|
||||||
async def get_accounts_by_type(account_type: AccountType) -> list[Account]:
|
async def get_accounts_by_type(
|
||||||
return await db.fetchall(
|
account_type: AccountType, include_inactive: bool = False
|
||||||
"SELECT * FROM accounts WHERE account_type = :type ORDER BY name",
|
) -> list[Account]:
|
||||||
{"type": account_type.value},
|
"""
|
||||||
Account,
|
Get accounts by type, optionally including inactive ones.
|
||||||
)
|
|
||||||
|
Args:
|
||||||
|
account_type: The account type to filter by
|
||||||
|
include_inactive: If True, include inactive accounts. Default False.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
List of Account objects
|
||||||
|
"""
|
||||||
|
if include_inactive:
|
||||||
|
query = "SELECT * FROM accounts WHERE account_type = :type ORDER BY name"
|
||||||
|
else:
|
||||||
|
query = "SELECT * FROM accounts WHERE account_type = :type AND is_active = TRUE ORDER BY name"
|
||||||
|
|
||||||
|
return await db.fetchall(query, {"type": account_type.value}, Account)
|
||||||
|
|
||||||
|
|
||||||
async def update_account_is_active(account_id: str, is_active: bool) -> None:
|
async def update_account_is_active(account_id: str, is_active: bool) -> None:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue