feat: create db seed for initialization

This commit is contained in:
Rafi Arrafif
2026-01-21 10:26:31 +07:00
parent 20b371dbf6
commit e33c0264fa
7 changed files with 97 additions and 1147 deletions

View File

@ -230,6 +230,7 @@ Table user_preferences {
Table user_roles {
id String [pk]
name String [unique, not null]
description String
primaryColor String
secondaryColor String
pictureImage String

View File

@ -268,6 +268,7 @@ model UserPreference {
model UserRole {
id String @id @default(uuid())
name String @db.VarChar(255) @unique
description String? @db.Text
primaryColor String? @db.VarChar(10)
secondaryColor String? @db.VarChar(10)
pictureImage String? @db.Text

25
prisma/seed/index.ts Normal file
View 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();
});

View 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,
}),
),
);
};

View 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 },
});
};