- 启动建表后幂等补索引:orders/finance_records/users/reports/companions/payment_intents/payment_refunds 等高频查询列 - 管理端订单/财务流水/用户列表 LIMIT 500,友圈/评价列表 LIMIT 200,防止无界查询 - expert_services 懒建表后补 expert_id 索引 - 新增回归护栏 list-pagination-index.spec.ts(84 套件/625 用例全绿)
38 行
1.6 KiB
TypeScript
38 行
1.6 KiB
TypeScript
// 已读取AGENTS.md
|
|
import * as fs from 'fs';
|
|
import * as path from 'path';
|
|
|
|
/**
|
|
* 第六十八批回归闸门:列表有界 + 高频查询索引
|
|
*/
|
|
describe('第六十八批分页与索引闸门', () => {
|
|
const rootDir = path.resolve(__dirname, '../../');
|
|
const repoCode = fs.readFileSync(path.join(rootDir, 'server/src/db/repository.ts'), 'utf-8');
|
|
const mysqlCode = fs.readFileSync(path.join(rootDir, 'server/src/db/mysql.ts'), 'utf-8');
|
|
|
|
it('大列表查询必须有上限(避免全表下发)', () => {
|
|
expect(repoCode).toContain("sql += ' ORDER BY id ASC LIMIT 500'");
|
|
expect(repoCode).toContain("sql += ' ORDER BY is_top DESC, created_at DESC LIMIT 200'");
|
|
expect(repoCode).toContain("sql += ' ORDER BY created_at DESC LIMIT 200'");
|
|
// 管理端财务流水
|
|
expect(repoCode).toContain('LIMIT 500');
|
|
});
|
|
|
|
it('提供高频查询索引(幂等)', () => {
|
|
expect(mysqlCode).toContain('idx_orders_buyer');
|
|
expect(mysqlCode).toContain('idx_orders_status_created');
|
|
expect(mysqlCode).toContain('idx_fin_user');
|
|
expect(mysqlCode).toContain('idx_users_phone');
|
|
expect(mysqlCode).toContain('idx_pr_order');
|
|
// 索引创建必须在所有建表之后,避免表不存在
|
|
const createIdx = mysqlCode.indexOf('const indexDefs');
|
|
const seedCall = mysqlCode.indexOf('await seedInitialDataIfEmpty(conn)');
|
|
expect(createIdx).toBeGreaterThan(-1);
|
|
expect(seedCall).toBeGreaterThan(createIdx);
|
|
});
|
|
|
|
it('expert_services 懒建表后补索引', () => {
|
|
expect(repoCode).toContain('ALTER TABLE expert_services ADD INDEX idx_srv_expert');
|
|
});
|
|
});
|