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"; const permissionTitles: Record = { [PermissionEnum.SERVICES]: "سرویس‌ها", [PermissionEnum.CUSTOMERS]: "مشتریان", [PermissionEnum.AGENTS]: "نمایندگان", [PermissionEnum.DEVELOPERS]: "توسعه‌دهندگان", [PermissionEnum.INVOICES]: "صورتحساب‌ها", [PermissionEnum.TRANSACTIONS]: "تراکنش‌ها", [PermissionEnum.DISCOUNTS]: "تخفیف‌ها", [PermissionEnum.ADMINS]: "ادمین‌ها", [PermissionEnum.TICKETS]: "تیکت‌ها", [PermissionEnum.CRITICISMS]: "انتقادات", [PermissionEnum.CONTACTS_US]: "تماس با ما", [PermissionEnum.ADVERTISEMENTS]: "تبلیغات", [PermissionEnum.ANNOUNCEMENTS]: "اطلاعیه‌ها", [PermissionEnum.BLOGS]: "بلاگ‌ها", [PermissionEnum.LEARNINGS]: "آموزش‌ها", [PermissionEnum.LOGS]: "لاگ‌ها", [PermissionEnum.SETTINGS]: "تنظیمات", [PermissionEnum.BANK_ACCOUNTS]: "حساب‌های بانکی", [PermissionEnum.PAYMENTS]: "پرداخت‌ها", [PermissionEnum.MANAGE_SSO_CLIENTS]: "مدیریت کلاینت‌های SSO", [PermissionEnum.SUPPORT_PLAN]: "پلن پشتیبانی", [PermissionEnum.DMENU]: "دی‌منو", [PermissionEnum.DKALA]: "دی‌کالا", [PermissionEnum.DPAGE]: "دی‌پیج", [PermissionEnum.DMAIL]: "دی‌میل", [PermissionEnum.RESELLER]: "نمایندگی فروش", [PermissionEnum.WORKSPACE]: "فضای کار", [PermissionEnum.VIEW_ALL_WORKSPACES]: "مشاهده همه فضاهای کار", [PermissionEnum.PROJECT]: "پروژه", [PermissionEnum.VIEW_ALL_PROJECTS]: "مشاهده همه پروژه‌ها", [PermissionEnum.TASK]: "وظیفه", [PermissionEnum.TASK_PHASE]: "فاز وظیفه", }; // Define permissions const permissions = Object.values(PermissionEnum).map((perm) => ({ name: perm, title: permissionTitles[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); } else if (!existingPerm.title || existingPerm.title !== perm.title) { existingPerm.title = perm.title; await permissionRepo.save(existingPerm); } } 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); } };