53 lines
1.2 KiB
TypeScript
53 lines
1.2 KiB
TypeScript
import crypto from "crypto";
|
|
import { GlobalRole, MembershipRole } from "@prisma/client";
|
|
|
|
import db from "~/utils/db.server";
|
|
import { hashPassword } from "~/utils/auth.server";
|
|
|
|
async function seed() {
|
|
const email = "remixtape@admin.local";
|
|
const password = crypto.randomBytes(8).toString("hex");
|
|
|
|
// cleanup the existing database
|
|
await db.user.delete({ where: { email } }).catch(() => {});
|
|
|
|
await db.organization.deleteMany({
|
|
where: {
|
|
memberships: {
|
|
some: { user: { email } },
|
|
},
|
|
},
|
|
}).catch(() => {});
|
|
|
|
await db.user.create({
|
|
data: {
|
|
email,
|
|
fullName: "Admin",
|
|
hashedPassword: await hashPassword(password),
|
|
role: GlobalRole.SUPERADMIN,
|
|
memberships: {
|
|
create: {
|
|
role: MembershipRole.OWNER,
|
|
organization: {
|
|
create: {},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
console.log("\nDatabase has been seeded. 🌱");
|
|
console.log("You can log into the newly-seeded admin account with the following credentials:");
|
|
console.log(`\x1B[1m\x1B[4memail\x1B[0m: ${email}`);
|
|
console.log(`\x1B[1m\x1B[4mpassword:\x1B[0m ${password}`);
|
|
}
|
|
|
|
seed()
|
|
.catch((error) => {
|
|
console.error(error);
|
|
process.exit(1);
|
|
})
|
|
.finally(async () => {
|
|
await db.$disconnect();
|
|
});
|