From 6b477adcc25cd6f982b6adb2cb220ed031207617 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Wed, 8 Jul 2026 20:21:40 +0330 Subject: [PATCH] update seeder --- src/seeders/data/roles.data.ts | 8 ++++-- src/seeders/roles.seeder.ts | 46 +++++++++++++++++++++++++--------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/src/seeders/data/roles.data.ts b/src/seeders/data/roles.data.ts index 90f31d7..1695c09 100644 --- a/src/seeders/data/roles.data.ts +++ b/src/seeders/data/roles.data.ts @@ -28,14 +28,18 @@ export const rolesData: RoleConfig[] = [ isSystem: true, permissionFilter: (name: PermissionEnum) => name === PermissionEnum.MANAGE_PAYMENTS || - name === PermissionEnum.NEW_PAYMENT_NOTIFICATION, + name === PermissionEnum.NEW_PAYMENT_NOTIFICATION || + name === PermissionEnum.VIEW_ORDERS|| + name === PermissionEnum.CHANGE_ORDER_STATUS_FROM_FINISHED_TO_INVOICED }, { name: 'designer', title: 'طراح', isSystem: true, - permissionFilter: (name: PermissionEnum) => [PermissionEnum.VIEW_ASSIGNED_ORDERS].includes(name) + permissionFilter: (name: PermissionEnum) => + name === PermissionEnum.VIEW_ASSIGNED_ORDERS || + name === PermissionEnum.CHANGE_ORDER_STATUS_FROM_IN_PROGRESS_TO_FINISHED }, ]; diff --git a/src/seeders/roles.seeder.ts b/src/seeders/roles.seeder.ts index b5c7f94..4617e83 100644 --- a/src/seeders/roles.seeder.ts +++ b/src/seeders/roles.seeder.ts @@ -9,24 +9,46 @@ export class RolesSeeder { const rolesMap = new Map(); for (const roleConfig of rolesData) { - let role = await em.findOne(Role, { name: roleConfig.name }); - if (!role) { + const existingRole = await em.findOne(Role, { name: roleConfig.name }); + let role: Role; + + if (!existingRole) { role = em.create(Role, { name: roleConfig.name, - title: '', - isSystem: true, + title: roleConfig.title, + isSystem: roleConfig.isSystem, }); + } else { + role = existingRole; + await role.permissions.init(); - // Add permissions based on role configuration - // TypeScript knows role is not null here because we just created it - const newRole = role; - // Use the permission filter for all roles - const filteredPermissions = permissions.filter(p => roleConfig.permissionFilter(p.name as PermissionEnum)); - filteredPermissions.forEach(p => newRole.permissions.add(p)); + if (role.title !== roleConfig.title) { + role.title = roleConfig.title; + } - em.persist(newRole); + if (role.isSystem !== roleConfig.isSystem) { + role.isSystem = roleConfig.isSystem; + } } - // Always add to map, whether existing or newly created + + const filteredPermissions = permissions.filter((p) => + roleConfig.permissionFilter(p.name as PermissionEnum), + ); + const filteredPermissionNames = new Set(filteredPermissions.map((p) => p.name)); + + for (const existingPermission of role.permissions.getItems()) { + if (!filteredPermissionNames.has(existingPermission.name)) { + role.permissions.remove(existingPermission); + } + } + + for (const permission of filteredPermissions) { + if (!role.permissions.contains(permission, false)) { + role.permissions.add(permission); + } + } + + em.persist(role); rolesMap.set(roleConfig.name, role); }