@forklaunch/implementation-iam-base 0.1.10 → 0.1.12

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