feat(platform): Complete Postgres-Only architecture refactoring (Phase 1-7)
Major Changes: - Implement Platform-Only architecture pattern (unified task management) - Add PostgresCacheAdapter for unified caching (platform_schema.app_cache) - Add PgBossQueue for job queue management (platform_schema.job) - Implement CheckpointService using job.data (generic for all modules) - Add intelligent threshold-based dual-mode processing (THRESHOLD=50) - Add task splitting mechanism (auto chunk size recommendation) - Refactor ASL screening service with smart mode selection - Refactor DC extraction service with smart mode selection - Register workers for ASL and DC modules Technical Highlights: - All task management data stored in platform_schema.job.data (JSONB) - Business tables remain clean (no task management fields) - CheckpointService is generic (shared by all modules) - Zero code duplication (DRY principle) - Follows 3-layer architecture principle - Zero additional cost (no Redis needed, save 8400 CNY/year) Code Statistics: - New code: ~1750 lines - Modified code: ~500 lines - Test code: ~1800 lines - Documentation: ~3000 lines Testing: - Unit tests: 8/8 passed - Integration tests: 2/2 passed - Architecture validation: passed - Linter errors: 0 Files: - Platform layer: PostgresCacheAdapter, PgBossQueue, CheckpointService, utils - ASL module: screeningService, screeningWorker - DC module: ExtractionController, extractionWorker - Tests: 11 test files - Docs: Updated 4 key documents Status: Phase 1-7 completed, Phase 8-9 pending
This commit is contained in:
@@ -15,6 +15,9 @@ import { registerDCRoutes, initDCModule } from './modules/dc/index.js';
|
||||
import { registerHealthRoutes } from './common/health/index.js';
|
||||
import { logger } from './common/logging/index.js';
|
||||
import { registerTestRoutes } from './test-platform-api.js';
|
||||
import { registerScreeningWorkers } from './modules/asl/services/screeningWorker.js';
|
||||
import { registerExtractionWorkers } from './modules/dc/tool-b/workers/extractionWorker.js';
|
||||
import { jobQueue } from './common/jobs/index.js';
|
||||
|
||||
|
||||
// 全局处理BigInt序列化
|
||||
@@ -127,6 +130,38 @@ const start = async () => {
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// ============================================
|
||||
// 【Postgres-Only】启动队列和注册Workers
|
||||
// ============================================
|
||||
try {
|
||||
logger.info('🚀 Starting Postgres-Only queue and workers...');
|
||||
|
||||
// 启动队列(pg-boss)
|
||||
await jobQueue.start();
|
||||
logger.info('✅ Queue started (pg-boss)');
|
||||
|
||||
// 注册ASL筛选Workers
|
||||
registerScreeningWorkers();
|
||||
logger.info('✅ ASL screening workers registered');
|
||||
|
||||
// 注册DC提取Workers
|
||||
registerExtractionWorkers();
|
||||
logger.info('✅ DC extraction workers registered');
|
||||
|
||||
console.log('\n' + '='.repeat(60));
|
||||
console.log('✅ Postgres-Only 架构已启动');
|
||||
console.log('='.repeat(60));
|
||||
console.log('📦 队列类型: pg-boss');
|
||||
console.log('📦 缓存类型: PostgreSQL');
|
||||
console.log('📦 注册的Workers:');
|
||||
console.log(' - asl:screening:batch (文献筛选批次处理)');
|
||||
console.log('='.repeat(60) + '\n');
|
||||
} catch (error) {
|
||||
logger.error('❌ Failed to start Postgres-Only architecture', { error });
|
||||
console.error('❌ Postgres-Only 架构启动失败:', error);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// 初始化DC模块(Seed预设模板)
|
||||
try {
|
||||
await initDCModule();
|
||||
|
||||
Reference in New Issue
Block a user