44 lines
1.1 KiB
TypeScript
44 lines
1.1 KiB
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
import { parseProductContext } from "../lib/types/product-context";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
const topics = await prisma.topic.findMany({
|
|
where: {
|
|
topicGoal: "placement",
|
|
productContext: { not: null },
|
|
productProfileId: null,
|
|
},
|
|
});
|
|
|
|
for (const topic of topics) {
|
|
const fields = parseProductContext(topic.productContext);
|
|
const label =
|
|
[fields.brand, fields.product].filter(Boolean).join(" · ") || topic.label;
|
|
|
|
const profile = await prisma.productProfile.create({
|
|
data: {
|
|
accountId: topic.accountId,
|
|
label,
|
|
context: topic.productContext!,
|
|
},
|
|
});
|
|
|
|
await prisma.topic.update({
|
|
where: { id: topic.id },
|
|
data: { productProfileId: profile.id },
|
|
});
|
|
|
|
console.log(`Migrated topic "${topic.label}" → profile "${label}"`);
|
|
}
|
|
|
|
console.log(`Done. Migrated ${topics.length} profile(s).`);
|
|
}
|
|
|
|
main()
|
|
.catch((err) => {
|
|
console.error(err);
|
|
process.exit(1);
|
|
})
|
|
.finally(() => prisma.$disconnect()); |