Skip to content

Commit 89dfd07

Browse files
authored
Merge pull request #1128 from rocket-admin/backend_additional_users_in_company_info
Enhance user retrieval and membership information in company use case
2 parents 7f5af4b + e602a63 commit 89dfd07

File tree

4 files changed

+82
-12
lines changed

4 files changed

+82
-12
lines changed

backend/src/entities/company-info/use-cases/get-all-users-in-company.use.case.ts

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,24 +30,42 @@ export class GetAllUsersInCompanyUseCase
3030
HttpStatus.NOT_FOUND,
3131
);
3232
}
33+
const foundUsers = foundCompany.users;
3334

34-
const foundUsers: SimpleFoundUserInCompanyInfoDs[] = foundCompany.users
35-
.map((user) => {
36-
const simpleUserInfoDs = buildSimpleUserInfoDs(user);
37-
return { ...simpleUserInfoDs, has_groups: false };
38-
})
39-
.filter((user) => user !== null);
35+
const responseObjects: Array<SimpleFoundUserInCompanyInfoDs> = [];
4036

4137
const queue = new PQueue({ concurrency: 3 });
42-
4338
await Promise.all(
4439
foundUsers.map(async (user) => {
4540
await queue.add(async () => {
46-
const userGroupsCount = await this._dbContext.groupRepository.countAllUserGroups(user.id);
47-
user.has_groups = userGroupsCount > 0;
41+
if (!user) {
42+
return;
43+
}
44+
const usersConnectionsWithGroups = await this._dbContext.connectionRepository.findAllUserNonTestsConnections(
45+
user.id,
46+
);
47+
const userInfo = buildSimpleUserInfoDs(user);
48+
const userRO: SimpleFoundUserInCompanyInfoDs = {
49+
...userInfo,
50+
user_membership: usersConnectionsWithGroups.map((connection) => {
51+
return {
52+
id: connection.id,
53+
title: connection.title,
54+
database: connection.database,
55+
groups: connection.groups.map((group) => {
56+
return {
57+
id: group.id,
58+
title: group.title,
59+
};
60+
}),
61+
};
62+
}),
63+
has_groups: usersConnectionsWithGroups.length > 0,
64+
};
65+
responseObjects.push(userRO);
4866
});
4967
}),
5068
);
51-
return foundUsers;
69+
return responseObjects;
5270
}
5371
}

backend/src/entities/user/dto/found-user.dto.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,32 @@ export class SimpleFoundUserInfoDs {
7474
externalRegistrationProvider: ExternalRegistrationProviderEnum;
7575
}
7676

77+
export class UserGroupMembershipDto {
78+
@ApiProperty()
79+
id: string;
80+
81+
@ApiProperty()
82+
title: string;
83+
}
84+
85+
export class UserConnectionMembershipDto {
86+
@ApiProperty()
87+
id: string;
88+
89+
@ApiProperty()
90+
title: string;
91+
92+
@ApiProperty()
93+
database: string;
94+
95+
@ApiProperty({ type: UserConnectionMembershipDto, isArray: true })
96+
groups: Array<UserGroupMembershipDto>;
97+
}
98+
7799
export class SimpleFoundUserInCompanyInfoDs extends SimpleFoundUserInfoDs {
78100
@ApiProperty()
79101
has_groups: boolean;
102+
103+
@ApiProperty({ type: UserConnectionMembershipDto, isArray: true })
104+
user_membership: Array<UserConnectionMembershipDto>;
80105
}

backend/src/entities/user/utils/build-created-user.ds.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { UserEntity } from '../user.entity.js';
21
import { CreatedUserDs } from '../application/data-structures/created-user.ds.js';
32
import { SimpleFoundUserInfoDs } from '../dto/found-user.dto.js';
3+
import { UserEntity } from '../user.entity.js';
44

55
export function buildCreatedUserDs(user: UserEntity): CreatedUserDs {
66
return {
@@ -26,4 +26,4 @@ export function buildSimpleUserInfoDs(user: UserEntity): SimpleFoundUserInfoDs {
2626
role: user.role,
2727
externalRegistrationProvider: user.externalRegistrationProvider,
2828
};
29-
}
29+
}

backend/test/ava-tests/saas-tests/company-info-e2e.test.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,33 @@ test.serial(`${currentTest} should return users in company`, async (t) => {
595595
t.is(usersInCompany.status, 200);
596596
const usersInCompanyRO = JSON.parse(usersInCompany.text);
597597
t.is(usersInCompanyRO.length, 2);
598+
599+
usersInCompanyRO.forEach((user) => {
600+
t.true('id' in user);
601+
t.true('isActive' in user);
602+
t.true('email' in user);
603+
t.true('createdAt' in user);
604+
t.true('suspended' in user);
605+
t.true('name' in user);
606+
t.true('is_2fa_enabled' in user);
607+
t.true('role' in user);
608+
t.true('externalRegistrationProvider' in user);
609+
t.true('user_membership' in user);
610+
t.true('has_groups' in user);
611+
612+
t.true(Array.isArray(user.user_membership));
613+
user.user_membership.forEach((user_membership) => {
614+
t.true('id' in user_membership);
615+
t.true('title' in user_membership);
616+
t.true('database' in user_membership);
617+
t.true(Array.isArray(user_membership.groups));
618+
user_membership.groups.forEach((group) => {
619+
t.true('id' in group);
620+
t.true('title' in group);
621+
t.is(Object.keys(group).length, 2);
622+
});
623+
});
624+
});
598625
});
599626

600627
currentTest = `PUT company/users/roles/:companyId`;

0 commit comments

Comments
 (0)