Files
2026-07-01 17:35:27 +08:00

74 lines
1.7 KiB
TypeScript

import { Prisma, PrismaClient } from '@prisma/client';
import {
DEFAULT_PRODUCT_ID,
DEFAULT_PRODUCT_NAME,
buildAppDataSeed,
buildDefaultProjects,
} from './seed-data';
const prisma = new PrismaClient();
async function clearRelationalBusinessData() {
await prisma.$transaction([
prisma.comment.deleteMany(),
prisma.taskWatcher.deleteMany(),
prisma.task.deleteMany(),
prisma.sprint.deleteMany(),
prisma.projectMember.deleteMany(),
prisma.requirement.deleteMany(),
prisma.version.deleteMany(),
prisma.project.deleteMany(),
prisma.product.deleteMany(),
]);
}
async function seedAppData() {
const entries = buildAppDataSeed();
for (const entry of entries) {
const value = entry.value as Prisma.InputJsonValue;
await prisma.appData.upsert({
where: { key: entry.key },
update: { value },
create: { key: entry.key, value },
});
}
return entries.length;
}
async function seedRelationalBusinessData() {
await prisma.product.create({
data: {
id: DEFAULT_PRODUCT_ID,
name: DEFAULT_PRODUCT_NAME,
description: '',
},
});
await prisma.project.createMany({
data: buildDefaultProjects().map((project) => ({
id: project.id,
productId: DEFAULT_PRODUCT_ID,
name: project.name,
description: project.description,
})),
});
}
async function main() {
await clearRelationalBusinessData();
await seedRelationalBusinessData();
const count = await seedAppData();
console.log(`Seeded ${count} app_data keys with clean branch data.`);
}
main()
.catch((error) => {
console.error(error);
process.exitCode = 1;
})
.finally(async () => {
await prisma.$disconnect();
});