✨ feat: create db seed for initialization
This commit is contained in:
25
prisma/seed/index.ts
Normal file
25
prisma/seed/index.ts
Normal file
@ -0,0 +1,25 @@
|
||||
import { prisma } from "../../src/utils/databases/prisma/connection";
|
||||
import { userRoleSeed } from "./userRole.seed";
|
||||
import { userSystemSeed } from "./userSystem.seed";
|
||||
|
||||
async function main() {
|
||||
console.log("🌱 Running all seeds...");
|
||||
console.log("🔌 Connecting to database...");
|
||||
|
||||
const systemUserId = await userSystemSeed();
|
||||
await userRoleSeed(systemUserId.id);
|
||||
|
||||
console.log("🌳 All seeds completed");
|
||||
}
|
||||
|
||||
main()
|
||||
.catch((e) => {
|
||||
console.error(e);
|
||||
process.exit(1);
|
||||
})
|
||||
.finally(async () => {
|
||||
console.log(
|
||||
"🔌 Disconnecting from database (this may take a few seconds)...",
|
||||
);
|
||||
await prisma.$disconnect();
|
||||
});
|
||||
48
prisma/seed/userRole.seed.ts
Normal file
48
prisma/seed/userRole.seed.ts
Normal file
@ -0,0 +1,48 @@
|
||||
import { prisma } from "../../src/utils/databases/prisma/connection";
|
||||
|
||||
export const userRoleSeed = async (systemId: string) => {
|
||||
const roles = [
|
||||
{
|
||||
name: "ADMIN",
|
||||
description: "Administrator with full access",
|
||||
isSuperadmin: true,
|
||||
canEditMedia: true,
|
||||
canManageMedia: true,
|
||||
canEditEpisodes: true,
|
||||
canManageEpisodes: true,
|
||||
canEditComment: true,
|
||||
canManageComment: true,
|
||||
canEditUser: true,
|
||||
canManageUser: true,
|
||||
canEditSystem: true,
|
||||
canManageSystem: true,
|
||||
createdBy: systemId,
|
||||
},
|
||||
{
|
||||
name: "USER",
|
||||
description: "Regular user with limited access",
|
||||
isSuperadmin: false,
|
||||
canEditMedia: false,
|
||||
canManageMedia: false,
|
||||
canEditEpisodes: false,
|
||||
canManageEpisodes: false,
|
||||
canEditComment: false,
|
||||
canManageComment: false,
|
||||
canEditUser: false,
|
||||
canManageUser: false,
|
||||
canEditSystem: false,
|
||||
canManageSystem: false,
|
||||
createdBy: systemId,
|
||||
},
|
||||
];
|
||||
|
||||
await prisma.$transaction(
|
||||
roles.map((role) =>
|
||||
prisma.userRole.upsert({
|
||||
where: { name: role.name },
|
||||
update: {},
|
||||
create: role,
|
||||
}),
|
||||
),
|
||||
);
|
||||
};
|
||||
19
prisma/seed/userSystem.seed.ts
Normal file
19
prisma/seed/userSystem.seed.ts
Normal file
@ -0,0 +1,19 @@
|
||||
import { prisma } from "../../src/utils/databases/prisma/connection";
|
||||
|
||||
export const userSystemSeed = async () => {
|
||||
const payload = {
|
||||
name: "SYSTEM",
|
||||
username: process.env.DEFAULT_ADMIN_USERNAME || "system",
|
||||
email: process.env.DEFAULT_ADMIN_EMAIL || "system@example.com",
|
||||
password:
|
||||
process.env.DEFAULT_ADMIN_PASSWORD ||
|
||||
"$2a$12$ynOrzVCvRdejGp/7KJW4lOAwRzFYhSHDE.Dp3Fqh3sXAq1BIwfwc6",
|
||||
};
|
||||
|
||||
return await prisma.user.upsert({
|
||||
where: { username: payload.username },
|
||||
update: {},
|
||||
create: payload,
|
||||
select: { id: true },
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user