1.5 KiB
Domain: Marketing (coupons, flash sales, group buying, points)
Four activity systems, all shop-scoped where merchant-facing, all resolved server-side at checkout.
Coupons (modules/coupon/)
Merchant templates (amount/threshold/window/stock) → customers claim → redeem at checkout. Locked in id order during checkout; the discount is computed server-side in the order currency. Coupons never combine with activity pricing (flash sale / group buying) on the same shop order.
Flash sales (modules/flash_sale/)
Merchant sessions with per-SKU items (activity price + reserved stock). Checkout splits a line into activity-priced and normal-priced units; activity stock is consumed via guarded decrement. A SKU rejects overlapping flash-sale and group-buying activities.
Group buying (modules/group_buying/)
Merchant activity (required members, window, group lifetime). Checkout with a
group intent takes exactly one unit at the activity price; a seat is claimed
at payment (paid_member_count guarded), groups open/succeed/expire.
Points mall (modules/points/)
Platform-curated catalog; customers redeem with the points account (append-only ledger, guarded points decrement), fulfillment/cancellation by platform admins.
Shared rules
- All money integer minor units; activity prices convert to the order currency server-side.
- All stock/seat counters use guarded
UPDATE … AND col >= $q. - Mall exposes each domain as a mock-adapter-backed live domain
(
LIVE_PICKS); consoles are live-only.
Key files
See docs/code_index/marketing.md.