Ensures consistent user account structure by proactively creating core liability and asset accounts when a user configures their wallet settings.
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from .crud import (
|
|
create_castle_settings,
|
|
create_user_wallet_settings,
|
|
get_castle_settings,
|
|
get_or_create_user_account,
|
|
get_user_wallet_settings,
|
|
update_castle_settings,
|
|
update_user_wallet_settings,
|
|
)
|
|
from .models import AccountType, CastleSettings, UserWalletSettings
|
|
|
|
|
|
async def get_settings(user_id: str) -> CastleSettings:
|
|
settings = await get_castle_settings(user_id)
|
|
if not settings:
|
|
settings = await create_castle_settings(user_id, CastleSettings())
|
|
return settings
|
|
|
|
|
|
async def update_settings(user_id: str, data: CastleSettings) -> CastleSettings:
|
|
settings = await get_castle_settings(user_id)
|
|
if not settings:
|
|
settings = await create_castle_settings(user_id, data)
|
|
else:
|
|
settings = await update_castle_settings(user_id, data)
|
|
|
|
return settings
|
|
|
|
|
|
async def get_user_wallet(user_id: str) -> UserWalletSettings:
|
|
settings = await get_user_wallet_settings(user_id)
|
|
if not settings:
|
|
settings = await create_user_wallet_settings(user_id, UserWalletSettings())
|
|
return settings
|
|
|
|
|
|
async def update_user_wallet(
|
|
user_id: str, data: UserWalletSettings
|
|
) -> UserWalletSettings:
|
|
settings = await get_user_wallet_settings(user_id)
|
|
if not settings:
|
|
settings = await create_user_wallet_settings(user_id, data)
|
|
else:
|
|
settings = await update_user_wallet_settings(user_id, data)
|
|
|
|
# Proactively create core user accounts when wallet is configured
|
|
# This ensures all users have a consistent account structure from the start
|
|
await get_or_create_user_account(
|
|
user_id, AccountType.LIABILITY, "Accounts Payable"
|
|
)
|
|
await get_or_create_user_account(
|
|
user_id, AccountType.ASSET, "Accounts Receivable"
|
|
)
|
|
|
|
return settings
|