diff --git a/backend/src/services/identity-project/identity-project-dal.ts b/backend/src/services/identity-project/identity-project-dal.ts index 3c8bc5d37..4928fd178 100644 --- a/backend/src/services/identity-project/identity-project-dal.ts +++ b/backend/src/services/identity-project/identity-project-dal.ts @@ -412,7 +412,15 @@ export const identityProjectDALFactory = (db: TDbClient) => { } ] }); - return members; + + return members.map((el) => ({ + ...el, + roles: el.roles.sort((a, b) => { + const roleA = (a.customRoleName || a.role).toLowerCase(); + const roleB = (b.customRoleName || b.role).toLowerCase(); + return roleA.localeCompare(roleB); + }) + })); } catch (error) { throw new DatabaseError({ error, name: "FindByProjectId" }); } diff --git a/backend/src/services/project-membership/project-membership-dal.ts b/backend/src/services/project-membership/project-membership-dal.ts index 1e71f4605..8315ed429 100644 --- a/backend/src/services/project-membership/project-membership-dal.ts +++ b/backend/src/services/project-membership/project-membership-dal.ts @@ -92,7 +92,8 @@ export const projectMembershipDALFactory = (db: TDbClient) => { db.ref("temporaryAccessEndTime").withSchema(TableName.ProjectUserMembershipRole), db.ref("name").as("projectName").withSchema(TableName.Project) ) - .where({ isGhost: false }); + .where({ isGhost: false }) + .orderBy(`${TableName.Users}.username` as "username"); const members = sqlNestRelationships({ data: docs, @@ -149,7 +150,14 @@ export const projectMembershipDALFactory = (db: TDbClient) => { } ] }); - return members; + return members.map((el) => ({ + ...el, + roles: el.roles.sort((a, b) => { + const roleA = (a.customRoleName || a.role).toLowerCase(); + const roleB = (b.customRoleName || b.role).toLowerCase(); + return roleA.localeCompare(roleB); + }) + })); } catch (error) { throw new DatabaseError({ error, name: "Find all project members" }); }