@forklaunch/implementation-iam-base 0.1.4 → 0.1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/lib/__test__/schemaEquality.test.js +6 -6
  2. package/lib/eject/schemas/index.ts +4 -0
  3. package/lib/eject/schemas/organization.schema.ts +14 -12
  4. package/lib/eject/schemas/permission.schema.ts +7 -1
  5. package/lib/eject/schemas/role.schema.ts +17 -16
  6. package/lib/eject/schemas/user.schema.ts +21 -20
  7. package/lib/eject/services/index.ts +4 -0
  8. package/lib/eject/services/organization.service.ts +6 -6
  9. package/lib/eject/services/permission.service.ts +9 -6
  10. package/lib/eject/services/role.service.ts +6 -6
  11. package/lib/eject/services/user.service.ts +11 -9
  12. package/lib/schemas/index.d.ts +5 -0
  13. package/lib/schemas/index.d.ts.map +1 -0
  14. package/lib/schemas/index.js +4 -0
  15. package/lib/schemas/organization.schema.d.ts +140 -6
  16. package/lib/schemas/organization.schema.d.ts.map +1 -1
  17. package/lib/schemas/organization.schema.js +2 -12
  18. package/lib/schemas/permission.schema.d.ts.map +1 -1
  19. package/lib/schemas/permission.schema.js +2 -12
  20. package/lib/schemas/role.schema.d.ts +28 -4
  21. package/lib/schemas/role.schema.d.ts.map +1 -1
  22. package/lib/schemas/role.schema.js +2 -12
  23. package/lib/schemas/typebox/organization.schema.d.ts +81 -5
  24. package/lib/schemas/typebox/organization.schema.d.ts.map +1 -1
  25. package/lib/schemas/typebox/organization.schema.js +9 -3
  26. package/lib/schemas/typebox/permission.schema.d.ts +21 -0
  27. package/lib/schemas/typebox/permission.schema.d.ts.map +1 -1
  28. package/lib/schemas/typebox/permission.schema.js +5 -0
  29. package/lib/schemas/typebox/role.schema.d.ts +35 -4
  30. package/lib/schemas/typebox/role.schema.d.ts.map +1 -1
  31. package/lib/schemas/typebox/role.schema.js +8 -2
  32. package/lib/schemas/typebox/user.schema.d.ts +64 -4
  33. package/lib/schemas/typebox/user.schema.d.ts.map +1 -1
  34. package/lib/schemas/typebox/user.schema.js +8 -2
  35. package/lib/schemas/user.schema.d.ts +68 -4
  36. package/lib/schemas/user.schema.d.ts.map +1 -1
  37. package/lib/schemas/user.schema.js +2 -12
  38. package/lib/schemas/zod/organization.schema.d.ts +253 -5
  39. package/lib/schemas/zod/organization.schema.d.ts.map +1 -1
  40. package/lib/schemas/zod/organization.schema.js +9 -3
  41. package/lib/schemas/zod/permission.schema.d.ts +21 -0
  42. package/lib/schemas/zod/permission.schema.d.ts.map +1 -1
  43. package/lib/schemas/zod/permission.schema.js +5 -0
  44. package/lib/schemas/zod/role.schema.d.ts +59 -4
  45. package/lib/schemas/zod/role.schema.d.ts.map +1 -1
  46. package/lib/schemas/zod/role.schema.js +8 -2
  47. package/lib/schemas/zod/user.schema.d.ts +140 -4
  48. package/lib/schemas/zod/user.schema.d.ts.map +1 -1
  49. package/lib/schemas/zod/user.schema.js +8 -2
  50. package/lib/services/index.d.ts +5 -0
  51. package/lib/services/index.d.ts.map +1 -0
  52. package/lib/services/index.js +4 -0
  53. package/lib/services/organization.service.d.ts +2 -1
  54. package/lib/services/organization.service.d.ts.map +1 -1
  55. package/lib/services/permission.service.d.ts +2 -1
  56. package/lib/services/permission.service.d.ts.map +1 -1
  57. package/lib/services/role.service.d.ts +2 -1
  58. package/lib/services/role.service.d.ts.map +1 -1
  59. package/lib/services/user.service.d.ts +3 -3
  60. package/lib/services/user.service.d.ts.map +1 -1
  61. package/lib/tsconfig.tsbuildinfo +1 -1
  62. package/package.json +19 -8
  63. package/lib/eject/schemas/zod/organization.schema.ts +0 -49
  64. package/lib/eject/schemas/zod/permission.schema.ts +0 -30
  65. package/lib/eject/schemas/zod/role.schema.ts +0 -36
  66. package/lib/eject/schemas/zod/user.schema.ts +0 -52
  67. package/lib/eject/services/services/organization.service.ts +0 -146
  68. package/lib/eject/services/services/permission.service.ts +0 -349
  69. package/lib/eject/services/services/role.service.ts +0 -182
  70. package/lib/eject/services/services/user.service.ts +0 -225
  71. package/lib/index.d.ts +0 -9
  72. package/lib/index.d.ts.map +0 -1
  73. package/lib/index.js +0 -8
@@ -1,349 +0,0 @@
1
- import {
2
- CreatePermissionDto,
3
- PermissionDto,
4
- PermissionService,
5
- RoleDto,
6
- RoleService,
7
- UpdatePermissionDto
8
- } from '@forklaunch/interfaces-iam';
9
- import { IdDto, IdsDto, InstanceTypeRecord } from '@forklaunch/common';
10
- import {
11
- InternalDtoMapper,
12
- RequestDtoMapperConstructor,
13
- ResponseDtoMapperConstructor,
14
- transformIntoInternalDtoMapper
15
- } from '@forklaunch/core/dtoMapper';
16
- import {
17
- MetricsDefinition,
18
- OpenTelemetryCollector
19
- } from '@forklaunch/core/http';
20
- import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
21
- import { AnySchemaValidator } from '@forklaunch/validator';
22
- import { EntityManager } from '@mikro-orm/core';
23
-
24
- export class BasePermissionService<
25
- SchemaValidator extends AnySchemaValidator,
26
- Metrics extends MetricsDefinition = MetricsDefinition,
27
- Dto extends {
28
- PermissionDtoMapper: PermissionDto;
29
- CreatePermissionDtoMapper: CreatePermissionDto;
30
- UpdatePermissionDtoMapper: UpdatePermissionDto;
31
- RoleDtoMapper: RoleDto;
32
- } = {
33
- PermissionDtoMapper: PermissionDto;
34
- CreatePermissionDtoMapper: CreatePermissionDto;
35
- UpdatePermissionDtoMapper: UpdatePermissionDto;
36
- RoleDtoMapper: RoleDto;
37
- },
38
- Entities extends {
39
- PermissionDtoMapper: PermissionDto;
40
- CreatePermissionDtoMapper: PermissionDto;
41
- UpdatePermissionDtoMapper: PermissionDto;
42
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
43
- } = {
44
- PermissionDtoMapper: PermissionDto;
45
- CreatePermissionDtoMapper: PermissionDto;
46
- UpdatePermissionDtoMapper: PermissionDto;
47
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
48
- }
49
- > implements PermissionService
50
- {
51
- #dtoMappers: InternalDtoMapper<
52
- InstanceTypeRecord<typeof this.dtoMappers>,
53
- Entities,
54
- Dto
55
- >;
56
-
57
- constructor(
58
- public em: EntityManager,
59
- protected roleServiceFactory: () => RoleService,
60
- protected openTelemetryCollector: OpenTelemetryCollector<Metrics>,
61
- protected schemaValidator: SchemaValidator,
62
- protected dtoMappers: {
63
- PermissionDtoMapper: ResponseDtoMapperConstructor<
64
- SchemaValidator,
65
- Dto['PermissionDtoMapper'],
66
- Entities['PermissionDtoMapper']
67
- >;
68
- CreatePermissionDtoMapper: RequestDtoMapperConstructor<
69
- SchemaValidator,
70
- Dto['CreatePermissionDtoMapper'],
71
- Entities['CreatePermissionDtoMapper']
72
- >;
73
- UpdatePermissionDtoMapper: RequestDtoMapperConstructor<
74
- SchemaValidator,
75
- Dto['UpdatePermissionDtoMapper'],
76
- Entities['UpdatePermissionDtoMapper']
77
- >;
78
- RoleDtoMapper: RequestDtoMapperConstructor<
79
- SchemaValidator,
80
- Dto['RoleDtoMapper'],
81
- Entities['RoleDtoMapper']
82
- >;
83
- }
84
- ) {
85
- this.#dtoMappers = transformIntoInternalDtoMapper(
86
- dtoMappers,
87
- schemaValidator
88
- );
89
- }
90
-
91
- // start: global helper functions
92
- private async updateRolesWithPermissions(
93
- roles: Entities['RoleDtoMapper'][],
94
- permissions: Entities['PermissionDtoMapper'][]
95
- ): Promise<Entities['RoleDtoMapper'][]> {
96
- return await Promise.all(
97
- roles.map(async (role) => {
98
- permissions.forEach((permission) => role.permissions.add(permission));
99
- return role;
100
- })
101
- );
102
- }
103
-
104
- private async removePermissionsFromRoles(
105
- roles: Entities['RoleDtoMapper'][],
106
- permissions: Entities['PermissionDtoMapper'][]
107
- ): Promise<Entities['RoleDtoMapper'][]> {
108
- return await Promise.all(
109
- roles.map(async (role) => {
110
- permissions.forEach((permission) =>
111
- role.permissions.remove(permission)
112
- );
113
- return role;
114
- })
115
- );
116
- }
117
-
118
- private async getBatchRoles(
119
- roleIds?: IdsDto,
120
- em?: EntityManager
121
- ): Promise<Entities['RoleDtoMapper'][]> {
122
- return roleIds
123
- ? (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
124
- (role) => {
125
- return (em ?? this.em).merge(
126
- this.#dtoMappers.RoleDtoMapper.deserializeDtoToEntity(role)
127
- );
128
- }
129
- )
130
- : [];
131
- }
132
- // end: global helper functions
133
-
134
- // start: createPermission helper functions
135
- private async createPermissionDto({
136
- permission,
137
- addToRoles
138
- }: {
139
- permission: Entities['PermissionDtoMapper'];
140
- addToRoles: Entities['RoleDtoMapper'][];
141
- }): Promise<{
142
- permission: Entities['PermissionDtoMapper'];
143
- roles: Entities['RoleDtoMapper'][];
144
- }> {
145
- let roles: Entities['RoleDtoMapper'][] = [];
146
- if (addToRoles) {
147
- roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
148
- }
149
-
150
- return { permission, roles };
151
- }
152
-
153
- private async extractCreatePermissionDtoToEntityData(
154
- permissionDto: Dto['CreatePermissionDtoMapper'],
155
- em?: EntityManager
156
- ): Promise<{
157
- permission: Entities['PermissionDtoMapper'];
158
- addToRoles: Entities['RoleDtoMapper'][];
159
- }> {
160
- return {
161
- permission: (em ?? this.em).merge(
162
- this.#dtoMappers.CreatePermissionDtoMapper.deserializeDtoToEntity(
163
- permissionDto
164
- )
165
- ),
166
- addToRoles: permissionDto.addToRolesIds
167
- ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
168
- : []
169
- };
170
- }
171
- // end: createPermission helper functions
172
-
173
- async createPermission(
174
- createPermissionDto: Dto['CreatePermissionDtoMapper'],
175
- em?: EntityManager
176
- ): Promise<Dto['PermissionDtoMapper']> {
177
- const { permission, roles } = await this.createPermissionDto(
178
- await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em)
179
- );
180
- await (em ?? this.em).transactional(async (innerEm) => {
181
- await innerEm.persist([permission, ...roles]);
182
- });
183
- return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(
184
- permission
185
- );
186
- }
187
-
188
- async createBatchPermissions(
189
- permissionDtos: Dto['CreatePermissionDtoMapper'][],
190
- em?: EntityManager
191
- ): Promise<Dto['PermissionDtoMapper'][]> {
192
- const rolesCache: Record<string, Entities['RoleDtoMapper']> = {};
193
- const permissions: Entities['PermissionDtoMapper'][] = [];
194
- await (em ?? this.em).transactional(async (em) => {
195
- permissionDtos.map(async (createPermissionDto) => {
196
- const { permission, roles } = await this.createPermissionDto(
197
- await this.extractCreatePermissionDtoToEntityData(
198
- createPermissionDto,
199
- em
200
- )
201
- );
202
- roles.forEach((role) => {
203
- if (
204
- rolesCache[role.id] &&
205
- role.permissions !== rolesCache[role.id].permissions
206
- ) {
207
- role.permissions.getItems().forEach((permission) => {
208
- if (!rolesCache[role.id].permissions.contains(permission)) {
209
- rolesCache[role.id].permissions.add(permission);
210
- }
211
- });
212
- } else {
213
- rolesCache[role.id] = role;
214
- }
215
- });
216
- permissions.push(permission);
217
- });
218
- await (em ?? this.em).persist([
219
- ...permissions,
220
- ...Object.values(rolesCache)
221
- ]);
222
- });
223
-
224
- return permissions.map((permission) =>
225
- this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission)
226
- );
227
- }
228
-
229
- async getPermission(
230
- idDto: IdDto,
231
- em?: EntityManager
232
- ): Promise<Dto['PermissionDtoMapper']> {
233
- const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
234
- return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(
235
- permission as Entities['PermissionDtoMapper']
236
- );
237
- }
238
-
239
- async getBatchPermissions(
240
- idsDto: IdsDto,
241
- em?: EntityManager
242
- ): Promise<Dto['PermissionDtoMapper'][]> {
243
- return (await (em ?? this.em).find('Permission', idsDto)).map(
244
- (permission) =>
245
- this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(
246
- permission as Entities['PermissionDtoMapper']
247
- )
248
- );
249
- }
250
-
251
- // start: updatePermission helper functions
252
- private updatePermissionDto = async (
253
- permissionDto: Dto['UpdatePermissionDtoMapper'],
254
- em?: EntityManager
255
- ): Promise<{
256
- permission: Entities['PermissionDtoMapper'];
257
- roles: Entities['RoleDtoMapper'][];
258
- }> => {
259
- const permission =
260
- this.#dtoMappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(
261
- permissionDto
262
- );
263
- const addToRoles = permissionDto.addToRolesIds
264
- ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
265
- : [];
266
- const removeFromRoles = permissionDto.removeFromRolesIds
267
- ? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
268
- : [];
269
-
270
- let roles: Entities['RoleDtoMapper'][] = [];
271
-
272
- roles = roles.concat(
273
- await this.updateRolesWithPermissions(addToRoles, [permission])
274
- );
275
- roles = roles.concat(
276
- await this.removePermissionsFromRoles(removeFromRoles, [permission])
277
- );
278
-
279
- return {
280
- permission,
281
- roles
282
- };
283
- };
284
- // end: updatePermission helper functions
285
-
286
- async updatePermission(
287
- permissionDto: Dto['UpdatePermissionDtoMapper'],
288
- em?: EntityManager
289
- ): Promise<Dto['PermissionDtoMapper']> {
290
- const { permission, roles } = await this.updatePermissionDto(permissionDto);
291
- await (em ?? this.em).upsertMany([permission, ...roles]);
292
- if (!em) {
293
- this.em.flush();
294
- }
295
- return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(
296
- permission
297
- );
298
- }
299
-
300
- async updateBatchPermissions(
301
- permissionDtos: Dto['UpdatePermissionDtoMapper'][],
302
- em?: EntityManager
303
- ): Promise<Dto['PermissionDtoMapper'][]> {
304
- const rolesCache: Record<string, Entities['RoleDtoMapper']> = {};
305
- const permissions: Entities['PermissionDtoMapper'][] = [];
306
- await (em ?? this.em).transactional(async (em) => {
307
- permissionDtos.map(async (updatePermissionDto) => {
308
- const { permission, roles } =
309
- await this.updatePermissionDto(updatePermissionDto);
310
- roles.forEach((role) => {
311
- if (
312
- rolesCache[role.id] &&
313
- role.permissions !== rolesCache[role.id].permissions
314
- ) {
315
- role.permissions.getItems().forEach((permission) => {
316
- if (!rolesCache[role.id].permissions.contains(permission)) {
317
- rolesCache[role.id].permissions.add(permission);
318
- }
319
- });
320
- } else {
321
- rolesCache[role.id] = role;
322
- }
323
- });
324
- permissions.push(permission);
325
- });
326
- await (em ?? this.em).persist([
327
- ...permissions,
328
- ...Object.values(rolesCache)
329
- ]);
330
- });
331
-
332
- return permissions.map((permission) =>
333
- this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission)
334
- );
335
- }
336
-
337
- async deletePermission(idDto: IdDto, em?: EntityManager): Promise<void> {
338
- await (em ?? this.em).nativeDelete('Permission', idDto);
339
- }
340
-
341
- async deleteBatchPermissions(
342
- idsDto: IdsDto,
343
- em?: EntityManager
344
- ): Promise<void> {
345
- await (em ?? this.em).nativeDelete('Permission', {
346
- id: { $in: idsDto.ids }
347
- });
348
- }
349
- }
@@ -1,182 +0,0 @@
1
- import {
2
- CreateRoleDto,
3
- RoleDto,
4
- RoleService,
5
- UpdateRoleDto
6
- } from '@forklaunch/interfaces-iam';
7
- import {
8
- MetricsDefinition,
9
- OpenTelemetryCollector
10
- } from '@forklaunch/core/http';
11
- import { EntityManager } from '@mikro-orm/core';
12
-
13
- import { IdDto, IdsDto, InstanceTypeRecord } from '@forklaunch/common';
14
- import {
15
- InternalDtoMapper,
16
- RequestDtoMapperConstructor,
17
- ResponseDtoMapperConstructor,
18
- transformIntoInternalDtoMapper
19
- } from '@forklaunch/core/dtoMapper';
20
- import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
21
- import { AnySchemaValidator } from '@forklaunch/validator';
22
-
23
- export class BaseRoleService<
24
- SchemaValidator extends AnySchemaValidator,
25
- Metrics extends MetricsDefinition = MetricsDefinition,
26
- Dto extends {
27
- RoleDtoMapper: RoleDto;
28
- CreateRoleDtoMapper: CreateRoleDto;
29
- UpdateRoleDtoMapper: UpdateRoleDto;
30
- } = {
31
- RoleDtoMapper: RoleDto;
32
- CreateRoleDtoMapper: CreateRoleDto;
33
- UpdateRoleDtoMapper: UpdateRoleDto;
34
- },
35
- Entities extends {
36
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
37
- CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
38
- RoleDto,
39
- 'permissions'
40
- >;
41
- UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
42
- RoleDto,
43
- 'permissions'
44
- >;
45
- } = {
46
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
47
- CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
48
- RoleDto,
49
- 'permissions'
50
- >;
51
- UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
52
- RoleDto,
53
- 'permissions'
54
- >;
55
- }
56
- > implements RoleService
57
- {
58
- #dtoMappers: InternalDtoMapper<
59
- InstanceTypeRecord<typeof this.dtoMappers>,
60
- Entities,
61
- Dto
62
- >;
63
-
64
- constructor(
65
- public em: EntityManager,
66
- protected openTelemetryCollector: OpenTelemetryCollector<Metrics>,
67
- protected schemaValidator: SchemaValidator,
68
- protected dtoMappers: {
69
- RoleDtoMapper: ResponseDtoMapperConstructor<
70
- SchemaValidator,
71
- Dto['RoleDtoMapper'],
72
- Entities['RoleDtoMapper']
73
- >;
74
- CreateRoleDtoMapper: RequestDtoMapperConstructor<
75
- SchemaValidator,
76
- Dto['CreateRoleDtoMapper'],
77
- Entities['CreateRoleDtoMapper']
78
- >;
79
- UpdateRoleDtoMapper: RequestDtoMapperConstructor<
80
- SchemaValidator,
81
- Dto['UpdateRoleDtoMapper'],
82
- Entities['UpdateRoleDtoMapper']
83
- >;
84
- }
85
- ) {
86
- this.#dtoMappers = transformIntoInternalDtoMapper(
87
- dtoMappers,
88
- schemaValidator
89
- );
90
- }
91
-
92
- async createRole(
93
- roleDto: Dto['CreateRoleDtoMapper'],
94
- em?: EntityManager
95
- ): Promise<Dto['RoleDtoMapper']> {
96
- // TODO: Think about removing static method here, since we need specific args
97
- const role =
98
- this.#dtoMappers.CreateRoleDtoMapper.deserializeDtoToEntity(roleDto);
99
- await (em ?? this.em).transactional((em) => em.persist(role));
100
- return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(
101
- role as Entities['RoleDtoMapper']
102
- );
103
- }
104
-
105
- async createBatchRoles(
106
- roleDtos: Dto['CreateRoleDtoMapper'][],
107
- em?: EntityManager
108
- ): Promise<Dto['RoleDtoMapper'][]> {
109
- const roles = await Promise.all(
110
- roleDtos.map(async (roleDto) =>
111
- this.#dtoMappers.CreateRoleDtoMapper.deserializeDtoToEntity(roleDto)
112
- )
113
- );
114
- await (em ?? this.em).transactional((em) => em.persist(roles));
115
- return roles.map((role) =>
116
- this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(
117
- role as Entities['RoleDtoMapper']
118
- )
119
- );
120
- }
121
-
122
- async getRole(idDto: IdDto, em?: EntityManager): Promise<RoleDto> {
123
- const role = await (em ?? this.em).findOneOrFail('Role', idDto, {
124
- populate: ['id', '*']
125
- });
126
- return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(
127
- role as Entities['RoleDtoMapper']
128
- );
129
- }
130
-
131
- async getBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<RoleDto[]> {
132
- return (
133
- await (em ?? this.em).find('Role', idsDto, {
134
- populate: ['id', '*']
135
- })
136
- ).map((role) =>
137
- this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(
138
- role as Entities['RoleDtoMapper']
139
- )
140
- );
141
- }
142
-
143
- async updateRole(
144
- roleDto: Dto['UpdateRoleDtoMapper'],
145
- em?: EntityManager
146
- ): Promise<Dto['RoleDtoMapper']> {
147
- let role = this.#dtoMappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
148
- roleDto
149
- ) as Entities['RoleDtoMapper'];
150
- await (em ?? this.em).transactional(async (em) => {
151
- role = (await em.upsert('Role', role)) as Entities['RoleDtoMapper'];
152
- });
153
- return this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(role);
154
- }
155
-
156
- async updateBatchRoles(
157
- roleDtos: Dto['UpdateRoleDtoMapper'][],
158
- em?: EntityManager
159
- ): Promise<Dto['RoleDtoMapper'][]> {
160
- let roles = await Promise.all(
161
- roleDtos.map(async (roleDto) =>
162
- this.#dtoMappers.UpdateRoleDtoMapper.deserializeDtoToEntity(roleDto)
163
- )
164
- );
165
- await (em ?? this.em).transactional(async (em) => {
166
- roles = await em.upsertMany('Role', roles);
167
- });
168
- return roles.map((role) =>
169
- this.#dtoMappers.RoleDtoMapper.serializeEntityToDto(
170
- role as Entities['RoleDtoMapper']
171
- )
172
- );
173
- }
174
-
175
- async deleteRole(idDto: IdDto, em?: EntityManager): Promise<void> {
176
- await (em ?? this.em).nativeDelete('Role', idDto);
177
- }
178
-
179
- async deleteBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<void> {
180
- await (em ?? this.em).nativeDelete('Role', { id: { $in: idsDto.ids } });
181
- }
182
- }