feat(invite-code): one-time invite codes with rewards, usage log, import/export

- 一次性邀请码:批量生成(次数/有效期/备注/四类奖励)、原子消费防超发、
  开启注册验证时奖励延迟发放(账本幂等键)
- Zibll 兼容文本导入(points/balance/vip/vip_time/level_integral,分隔符可自定义,
  第三段标识存为备注)、CSV 全字段导出与可回流文本导出
- 使用记录表 aksrt_invite_code_usage + 后台使用者列;注册表单 400ms 防抖实时校验
- 注册门控三模式(close/open/must)设置链路(PHP schema + admin SPA schema)
- 契约测试覆盖建表/消费竞态/导入导出/备注全链路
This commit is contained in:
2026-09-21 20:53:36 +08:00
parent 20387fdb06
commit 3dd3f71c97
16 changed files with 1285 additions and 1 deletions
+34
View File
@@ -376,6 +376,40 @@ trait DBMigratorPart2 {
) ENGINE=InnoDB {$charset_collate};";
dbDelta($sql_charge_card);
// ── one-time invite codes (registration gate + per-batch rewards) ──
$sql_invite_code = "CREATE TABLE {$prefix}aksrt_invite_code (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
code VARCHAR(32) NOT NULL,
batch_id VARCHAR(32) NOT NULL DEFAULT '',
remark VARCHAR(191) NOT NULL DEFAULT '',
rewards TEXT DEFAULT NULL,
max_uses INT UNSIGNED NOT NULL DEFAULT 1,
used_count INT UNSIGNED NOT NULL DEFAULT 0,
status VARCHAR(20) NOT NULL DEFAULT 'active',
expires_at DATETIME DEFAULT NULL,
created_by BIGINT UNSIGNED NOT NULL DEFAULT 0,
created_at DATETIME NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uniq_invite_code (code),
KEY idx_batch (batch_id),
KEY idx_status (status),
KEY idx_expires (expires_at)
) ENGINE=InnoDB {$charset_collate};";
dbDelta($sql_invite_code);
// ── invite-code usage log (who consumed which code) ──
$sql_invite_code_usage = "CREATE TABLE {$prefix}aksrt_invite_code_usage (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
code_id BIGINT UNSIGNED NOT NULL,
user_id BIGINT UNSIGNED NOT NULL,
used_at DATETIME NOT NULL,
PRIMARY KEY (id),
UNIQUE KEY uniq_invite_usage (code_id, user_id),
KEY idx_usage_user (user_id),
KEY idx_usage_code (code_id)
) ENGINE=InnoDB {$charset_collate};";
dbDelta($sql_invite_code_usage);
// ── canonical Ref attribution and permanent user binding ──
$sql_affiliate_relation = "CREATE TABLE {$prefix}aksrt_affiliate_relation (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,