67 lines
1.8 KiB
TypeScript
67 lines
1.8 KiB
TypeScript
/**
|
|
* 전산관리·운영지원 → 운영관리 부문 통합 (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());
|