update seeder
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
2026-07-08 20:21:40 +03:30
parent ee5bc314b5
commit 6b477adcc2
2 changed files with 40 additions and 14 deletions
+6 -2
View File
@@ -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
},
];
+34 -12
View File
@@ -9,24 +9,46 @@ export class RolesSeeder {
const rolesMap = new Map<string, Role>();
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);
}