60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import 'dotenv/config';
|
|
import { Prisma, PrismaClient } from '@prisma/client';
|
|
import { migrateDescriptionToPeriodEntries } from '../src/lib/milestonePeriods';
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
const milestones = await prisma.milestone.findMany({
|
|
where: {
|
|
description: { not: null },
|
|
NOT: { description: '' },
|
|
},
|
|
select: {
|
|
id: true,
|
|
title: true,
|
|
description: true,
|
|
startDate: true,
|
|
dueDate: true,
|
|
periodEntries: true,
|
|
},
|
|
});
|
|
|
|
let migrated = 0;
|
|
let skipped = 0;
|
|
|
|
for (const m of milestones) {
|
|
const { periodEntries, migrated: didMigrate } = migrateDescriptionToPeriodEntries({
|
|
id: m.id,
|
|
periodEntries: m.periodEntries,
|
|
startDate: m.startDate,
|
|
dueDate: m.dueDate,
|
|
description: m.description,
|
|
});
|
|
|
|
if (!didMigrate || !periodEntries) {
|
|
skipped += 1;
|
|
continue;
|
|
}
|
|
|
|
await prisma.milestone.update({
|
|
where: { id: m.id },
|
|
data: {
|
|
periodEntries: periodEntries as Prisma.InputJsonValue,
|
|
description: null,
|
|
},
|
|
});
|
|
migrated += 1;
|
|
console.log(` ✓ ${m.title} → 기간1 note (${periodEntries.length}건)`);
|
|
}
|
|
|
|
console.log(`\nDone. migrated=${migrated}, skipped=${skipped}, scanned=${milestones.length}`);
|
|
}
|
|
|
|
main()
|
|
.catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
})
|
|
.finally(() => prisma.$disconnect());
|