Files
vmall/docs/domains/platform.md
T

1.6 KiB

Domain: Accounts, Content, Shops, Identity

Customer accounts (modules/account/)

Three buckets per customer: available and frozen (monetary, per currency) plus points (no currency). Balances change only through credit/debit/freeze/release, each appending one immutable customer_account_entries row in the same transaction as the business write. The ledger is the audit trail; balances are never set absolutely. Credits in a currency the customer never held lazily create the zero row (ensure_monetary_account).

Planned on this foundation: wallet top-up/withdrawal and merchant settlement (openspec/changes/add-wallet-settlement).

Storefront content (modules/content/)

Four ordered home-content kinds (banners, promos, quick links, floor adverts), platform-managed by whole-list replacement (PUT /admin/content/{kind} reindexes positions atomically). Quick-link glyphs are inline SVG path data.

Shops (modules/shop/)

Platform creates/suspends shops; shop profiles are a side table with bilingual address/notice/after-sale and platform-owned scores. Merchants edit their own profile via PUT /api/shop/profile — scores are platform-only and the merchant upsert never touches them.

Identity (modules/identity/, src/auth.rs)

Email+password register/login, JWT bearer tokens. AuthUser carries id/role/shop_id; require(&[roles]) for RBAC, own_shop() / require_shop() for tenant scoping (cross-shop resources return 404). ensure_accounts runs inside the registration transaction.

Key files

See docs/code_index/platform.md.