feat(spec-3): complete section 3.1/3.2/3.3 activity verify settlement, role_flags, and distribution_relations

这个提交包含在:
xcbyy
2026-10-14 11:41:03 +08:00
父节点 8fc4d601c3
当前提交 a14f27d641
共有 5 个文件被更改,包括 255 次插入 和 17 次删除

查看文件

@@ -452,6 +452,42 @@ describe('ClientFeatures (TDD 测试套件: 用户端功能闭环)', () => {
expect(wsContent).toContain('updateCompanionProfile');
expect(wsContent).toContain('completeOrderApi');
});
it('3.1 活动 4 位核销码必须建立 act:verify 缓存索引、执行 CAS 原子防重核销,并在核销后触发发起人费用清算与付费活动二级分润', () => {
const repoPath = path.join(serverSrcDir, 'db', 'repository.ts');
const content = fs.readFileSync(repoPath, 'utf-8');
expect(content).toContain('act:verify:');
expect(content).toContain('WHERE id = ? AND checkin_status = 0');
expect(content).toContain('settleActivityCheckinAndReferral');
expect(content).toContain('活动核销费用清算');
});
it('3.2 双身份架构必须维护 role_flags (1:玩家, 2:大神, 3:双身份) 并在抢单接口拦截未通过实名认证的大神档案', () => {
const mysqlPath = path.join(serverSrcDir, 'db', 'mysql.ts');
const mysqlContent = fs.readFileSync(mysqlPath, 'utf-8');
expect(mysqlContent).toContain('role_flags');
const repoPath = path.join(serverSrcDir, 'db', 'repository.ts');
const repoContent = fs.readFileSync(repoPath, 'utf-8');
expect(repoContent).toContain('roleFlags');
expect(repoContent).toContain('大神档案未通过实名认证审核,无法接单');
});
it('3.3 分销裂变必须建立 distribution_relations 父子终身关联表,并支持小程序扫码/带参进入自动锁粉绑定', () => {
const mysqlPath = path.join(serverSrcDir, 'db', 'mysql.ts');
const mysqlContent = fs.readFileSync(mysqlPath, 'utf-8');
expect(mysqlContent).toContain('CREATE TABLE IF NOT EXISTS distribution_relations');
const repoPath = path.join(serverSrcDir, 'db', 'repository.ts');
const repoContent = fs.readFileSync(repoPath, 'utf-8');
expect(repoContent).toContain('INSERT INTO distribution_relations');
expect(repoContent).toContain('当前账号已终身绑定上级推荐人,不可重复修改绑定');
const indexVuePath = path.join(uniPagesDir, 'index', 'index.vue');
const indexContent = fs.readFileSync(indexVuePath, 'utf-8');
expect(indexContent).toContain('PENDING_INVITER_CODE');
});
});
});