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.ADMIN, permissions: Object.values(PermissionEnum), }, { name: RoleEnum.AGENT, permissions: [PermissionEnum.CUSTOMERS, PermissionEnum.TICKETS, PermissionEnum.TRANSACTIONS], }, { name: RoleEnum.DEVELOPER, permissions: [PermissionEnum.SERVICES, PermissionEnum.LOGS, PermissionEnum.LEARNINGS], }, { 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: [] }); } 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); } };