feat(p1): complete P1 foundation stage
Some checks failed
CI Go / test (push) Has been cancelled
CI Proto / lint (push) Has been cancelled
CI Python / test (push) Has been cancelled
CI TypeScript / test (push) Has been cancelled

- monorepo: pnpm workspace + go.work + pyproject.toml + commitlint/husky
- infra: docker-compose (minimal + full profiles) + init-sql + prometheus
- arch-scan: multi-language scanner skeleton (TS/Go/Python/Proto)
- shared-proto: buf v2 + classes.proto (ClassService CRUD contract)
- api-gateway: Go/Gin + JWT HS256 auth + reverse proxy + request ID
- classes: NestJS golden template (error system + observability + middleware + CRUD + tests)
- teacher-portal: Next.js + paper-feel UI design system
- CI/CD: 4 workflows (go/ts/py/proto)
- docs: migration guide + project_rules + coding-standards + git-workflow + ui-design-system + 004 + 9 module READMEs + known-issues + spec/plan migration + roadmap
This commit is contained in:
SpecialX
2026-07-07 23:39:37 +08:00
commit 2ba4250165
100 changed files with 15242 additions and 0 deletions

View File

@@ -0,0 +1,93 @@
#!/usr/bin/env tsx
import { createDb } from './schema.js';
const args = process.argv.slice(2);
const command = args[0];
function main(): void {
const db = createDb('arch.db');
switch (command) {
case 'stats':
printStats(db);
break;
case 'modules':
printModules(db);
break;
case 'symbols':
printSymbols(db, args[1]);
break;
case 'deps':
printDependencies(db, args[1]);
break;
case 'violations':
printViolations(db);
break;
case 'sql':
printSql(db, args[1]);
break;
default:
console.log(`Usage: arch-query <command> [args]
Commands:
stats 显示统计信息
modules 列出所有模块
symbols <name> 查询符号
deps <module> 查模块依赖
violations 查架构违规
sql <SQL> 自定义 SQL 查询`);
}
db.close();
}
function printStats(db: ReturnType<typeof createDb>): void {
const modules = (db.prepare('SELECT COUNT(*) as c FROM modules').get() as { c: number }).c;
const symbols = (db.prepare('SELECT COUNT(*) as c FROM symbols').get() as { c: number }).c;
const calls = (db.prepare('SELECT COUNT(*) as c FROM calls').get() as { c: number }).c;
const deps = (db.prepare('SELECT COUNT(*) as c FROM dependencies').get() as { c: number }).c;
console.log(`模块: ${modules}\n符号: ${symbols}\n调用: ${calls}\n依赖: ${deps}`);
}
function printModules(db: ReturnType<typeof createDb>): void {
const rows = db.prepare('SELECT name, language, service, type FROM modules ORDER BY name').all();
rows.forEach((r) => console.log(r));
}
function printSymbols(db: ReturnType<typeof createDb>, name: string | undefined): void {
if (!name) {
console.log('Usage: arch-query symbols <name>');
return;
}
const rows = db.prepare('SELECT * FROM symbols WHERE name LIKE ?').all(`%${name}%`);
rows.forEach((r) => console.log(r));
}
function printDependencies(db: ReturnType<typeof createDb>, module: string | undefined): void {
if (!module) {
console.log('Usage: arch-query deps <module>');
return;
}
const rows = db.prepare(`
SELECT m2.name as depends_on FROM dependencies d
JOIN modules m1 ON d.source_module_id = m1.id
JOIN modules m2 ON d.target_module_id = m2.id
WHERE m1.name = ?
`).all(module);
rows.forEach((r) => console.log(r));
}
function printViolations(db: ReturnType<typeof createDb>): void {
// 骨架:检查长文件、未校验权限的 Action 等
console.log('骨架实现P1 后期补全违规检测');
}
function printSql(db: ReturnType<typeof createDb>, sql: string | undefined): void {
if (!sql) {
console.log('Usage: arch-query sql "<SQL>"');
return;
}
const rows = db.prepare(sql).all();
rows.forEach((r) => console.log(r));
}
main();