Files
winninghunter/prisma/bootstrap-admins.ts
T

56 lines
1.4 KiB
TypeScript

import { PrismaClient, SubscriptionStatus, UserRole } from "@prisma/client";
import { getConfiguredAdminEmails } from "../src/lib/admin-emails";
const prisma = new PrismaClient();
async function main() {
const adminEmails = getConfiguredAdminEmails();
if (adminEmails.length === 0) {
console.log("No ADMIN_EMAILS configured. Skipping admin bootstrap.");
return;
}
const premiumPlan = await prisma.plan.findUnique({ where: { code: "PREMIUM" } });
if (!premiumPlan) {
throw new Error("PREMIUM plan is not seeded.");
}
for (const email of adminEmails) {
const user = await prisma.user.findUnique({ where: { email } });
if (!user) {
console.log(`Admin email ${email} is configured but user does not exist yet.`);
continue;
}
await prisma.user.update({
where: { id: user.id },
data: { role: UserRole.ADMIN }
});
await prisma.subscription.upsert({
where: { userId: user.id },
update: {
planId: premiumPlan.id,
status: SubscriptionStatus.ACTIVE,
cancelAtPeriodEnd: false
},
create: {
userId: user.id,
planId: premiumPlan.id,
status: SubscriptionStatus.ACTIVE
}
});
console.log(`Admin access ensured for ${email}.`);
}
}
main()
.catch((error) => {
console.error(error);
process.exit(1);
})
.finally(async () => {
await prisma.$disconnect();
});