Files
vmall/docs/domains/platform.md
T

40 lines
1.6 KiB
Markdown

# 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`.