Files
AIclinicalresearch/backend/prisma/manual-migrations/run-migration-002.ts
HaHafeng bdfca32305 docs(iit): REDCap对接技术方案完成与模块状态更新
- 新增《REDCap对接技术方案与实施指南》(1070行)
  - 确定DET+REST API技术方案(不使用External Module)
  - 完整RedcapAdapter/WebhookController/SyncManager代码设计
  - Day 2详细实施步骤与验收标准
- 更新《IIT Manager Agent模块当前状态与开发指南》
  - 记录REDCap本地环境部署完成(15.8.0)
  - 记录对接方案确定过程与技术决策
  - 更新Day 2工作计划(6个阶段详细清单)
  - 整体进度18%(Day 1完成+REDCap环境就绪)
- REDCap环境准备完成
  - 测试项目test0102(PID 16)创建成功
  - DET功能源码验证通过
  - 本地Docker环境稳定运行

技术方案:
- 实时触发: Data Entry Trigger (0秒延迟)
- 数据拉取: REST API exportRecords (增量同步)
- 轮询补充: pg-boss定时任务 (每30分钟)
- 可靠性: Webhook幂等性 + 轮询补充机制
2026-01-02 14:30:38 +08:00

107 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 执行回滚迁移脚本
*
* 删除业务表中的任务管理字段,统一由 platform_schema.job 管理
*/
import { PrismaClient } from '@prisma/client';
import * as fs from 'fs';
import * as path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const prisma = new PrismaClient();
async function runMigration() {
console.log('🚀 开始执行回滚迁移...\n');
try {
// 读取 SQL 文件
const sqlPath = path.join(__dirname, '002_rollback_to_platform_only.sql');
const sql = fs.readFileSync(sqlPath, 'utf-8');
console.log('📄 SQL 文件已读取\n');
// 分段执行(按 -- ========== 分割)
const sections = sql.split(/-- ={40,}/);
for (let i = 0; i < sections.length; i++) {
const section = sections[i].trim();
if (!section || section.startsWith('/**')) continue;
console.log(`📦 执行第 ${i} 段...\n`);
// 分行执行(按分号分割)
const statements = section
.split(';')
.map(s => s.trim())
.filter(s => s && !s.startsWith('--'));
for (const statement of statements) {
if (statement.length > 10) {
try {
await prisma.$executeRawUnsafe(statement);
console.log(` ✅ 执行成功: ${statement.substring(0, 60)}...`);
} catch (error: any) {
// 忽略某些非致命错误
if (error.message.includes('does not exist')) {
console.log(` ⚠️ 字段不存在(已是正确状态): ${error.message}`);
} else if (error.message.includes('✅')) {
console.log(` ${error.message}`);
} else {
throw error;
}
}
}
}
}
console.log('\n🎉 回滚迁移执行成功!');
console.log('\n📊 验证结果:');
console.log(' ✅ ASL 业务表:已删除 6 个任务管理字段');
console.log(' ✅ DC 业务表:保持原状(无需添加)');
console.log(' ✅ Platform 层job 表统一管理所有任务');
} catch (error) {
console.error('\n❌ 迁移失败:', error);
throw error;
} finally {
await prisma.$disconnect();
}
}
runMigration()
.then(() => {
console.log('\n✅ 完成');
process.exit(0);
})
.catch((error) => {
console.error('\n❌ 错误:', error);
process.exit(1);
});