Files
dsc-api/database/seeders/role.seeder.ts
T
2025-02-17 14:07:27 +03:30

61 lines
2.1 KiB
TypeScript

import { Logger } from "@nestjs/common";
import { DataSource } from "typeorm";
import { Permission } from "../../src/modules/users/entities/permission.entity";
import { Role } from "../../src/modules/users/entities/role.entity";
import { PermissionEnum } from "../../src/modules/users/enums/permission.enum";
import { RoleEnum } from "../../src/modules/users/enums/role.enum";
// Define permissions
const permissions = Object.values(PermissionEnum).map((perm) => ({ name: perm }));
// Define roles with their default permissions
const rolesWithPermissions: { name: RoleEnum; permissions: PermissionEnum[] }[] = [
{
name: RoleEnum.SUPER_ADMIN,
permissions: Object.values(PermissionEnum),
},
{
name: RoleEnum.USER,
permissions: [],
},
];
export const seedPermissionsAndRoles = async (dataSource: DataSource, logger: Logger) => {
try {
const permissionRepo = dataSource.getRepository(Permission);
const roleRepo = dataSource.getRepository(Role);
// Seed Permissions
logger.log("Seeding Permissions...");
for (const perm of permissions) {
const existingPerm = await permissionRepo.findOne({ where: { name: perm.name } });
if (!existingPerm) {
const newPerm = permissionRepo.create(perm);
await permissionRepo.save(newPerm);
}
}
logger.log("Permissions seeded successfully");
// Fetch all saved permissions
const allPermissions = await permissionRepo.find();
// Seed Roles with permissions
logger.log("Seeding Roles with Permissions...");
for (const roleData of rolesWithPermissions) {
let role = await roleRepo.findOne({ where: { name: roleData.name }, relations: ["permissions"] });
if (!role) {
role = roleRepo.create({ name: roleData.name, permissions: [], isAdmin: roleData.name === RoleEnum.SUPER_ADMIN });
}
role.permissions = allPermissions.filter((perm) => roleData.permissions.includes(perm.name as PermissionEnum));
await roleRepo.save(role);
}
logger.log("Roles and Permissions seeded successfully");
} catch (error) {
logger.error("Error in seeding roles and permissions", error);
process.exit(1);
}
};