castle/services.py
padreug 992a8fe554 Creates default user accounts on wallet setup
Ensures consistent user account structure by proactively
creating core liability and asset accounts when a user
configures their wallet settings.
2025-11-08 23:41:17 +01:00

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