feat: 3-section dashboard, reference dual-monitor layout, and detail dock
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
66
backend/scripts/migrate-sections.ts
Normal file
66
backend/scripts/migrate-sections.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
/**
|
||||
* 전산관리·운영지원 → 운영관리 부문 통합 (1회 실행)
|
||||
* 사용: npm run db:migrate-sections
|
||||
*/
|
||||
import 'dotenv/config';
|
||||
import { PrismaClient } from '@prisma/client';
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
const MERGE_INTO = '운영관리';
|
||||
const FROM = ['전산관리', '운영지원'] as const;
|
||||
|
||||
async function mergeCardOrder(intoKey: string, fromKeys: readonly string[]) {
|
||||
const target = await prisma.columnConfig.findUnique({ where: { key: intoKey } });
|
||||
const orders: string[] = [];
|
||||
if (target?.cardOrder) {
|
||||
try {
|
||||
orders.push(...JSON.parse(target.cardOrder));
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
for (const from of fromKeys) {
|
||||
const src = await prisma.columnConfig.findUnique({ where: { key: from } });
|
||||
if (!src?.cardOrder) continue;
|
||||
try {
|
||||
const ids = JSON.parse(src.cardOrder) as string[];
|
||||
for (const id of ids) {
|
||||
if (!orders.includes(id)) orders.push(id);
|
||||
}
|
||||
} catch {
|
||||
/* ignore */
|
||||
}
|
||||
}
|
||||
if (orders.length === 0 && !target) return;
|
||||
await prisma.columnConfig.upsert({
|
||||
where: { key: intoKey },
|
||||
update: { cardOrder: JSON.stringify(orders) },
|
||||
create: {
|
||||
key: intoKey,
|
||||
title: '운영관리',
|
||||
titleEn: 'GA',
|
||||
subtitle: '',
|
||||
cardOrder: JSON.stringify(orders),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function main() {
|
||||
for (const from of FROM) {
|
||||
const { count } = await prisma.task.updateMany({
|
||||
where: { section: from },
|
||||
data: { section: MERGE_INTO },
|
||||
});
|
||||
if (count > 0) console.log(` ✓ ${from} → ${MERGE_INTO}: ${count} tasks`);
|
||||
}
|
||||
await mergeCardOrder(MERGE_INTO, FROM);
|
||||
console.log('✅ Section migration done.');
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(() => prisma.$disconnect());
|
||||
Reference in New Issue
Block a user