@forklaunch/implementation-iam-base 0.3.1 → 0.3.2
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.
- package/lib/eject/domain/schemas/organization.schema.ts +3 -3
- package/lib/eject/domain/schemas/permission.schema.ts +3 -3
- package/lib/eject/domain/schemas/role.schema.ts +3 -3
- package/lib/eject/domain/schemas/user.schema.ts +3 -3
- package/lib/eject/services/organization.service.ts +41 -77
- package/lib/eject/services/permission.service.ts +80 -104
- package/lib/eject/services/role.service.ts +51 -81
- package/lib/eject/services/user.service.ts +51 -74
- package/lib/eject/types/iamDto.types.ts +43 -0
- package/lib/eject/types/iamEntities.types.ts +49 -0
- package/lib/schemas/index.d.mts +61 -61
- package/lib/schemas/index.d.ts +61 -61
- package/lib/schemas/index.js +32 -32
- package/lib/schemas/index.mjs +28 -28
- package/lib/services/index.d.mts +110 -134
- package/lib/services/index.d.ts +110 -134
- package/lib/services/index.js +46 -54
- package/lib/services/index.mjs +50 -58
- package/package.json +9 -8
|
@@ -11,59 +11,23 @@ import {
|
|
|
11
11
|
TelemetryOptions
|
|
12
12
|
} from '@forklaunch/core/http';
|
|
13
13
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} from '@forklaunch/
|
|
19
|
-
import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
|
|
20
|
-
import {
|
|
21
|
-
CreatePermissionDto,
|
|
22
|
-
PermissionDto,
|
|
23
|
-
UpdatePermissionDto,
|
|
24
|
-
UpdateRoleDto
|
|
25
|
-
} from '@forklaunch/interfaces-iam/types';
|
|
14
|
+
InternalMapper,
|
|
15
|
+
RequestMapperConstructor,
|
|
16
|
+
ResponseMapperConstructor,
|
|
17
|
+
transformIntoInternalMapper
|
|
18
|
+
} from '@forklaunch/internal';
|
|
26
19
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
|
27
20
|
import { EntityManager } from '@mikro-orm/core';
|
|
21
|
+
import { PermissionDtos } from '../types/iamDto.types';
|
|
22
|
+
import { PermissionEntities } from '../types/iamEntities.types';
|
|
28
23
|
|
|
29
24
|
export class BasePermissionService<
|
|
30
25
|
SchemaValidator extends AnySchemaValidator,
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
PermissionDtoMapper: PermissionDto;
|
|
34
|
-
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
35
|
-
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
36
|
-
RoleEntityMapper: UpdateRoleDto;
|
|
37
|
-
} = {
|
|
38
|
-
PermissionDtoMapper: PermissionDto;
|
|
39
|
-
CreatePermissionDtoMapper: CreatePermissionDto;
|
|
40
|
-
UpdatePermissionDtoMapper: UpdatePermissionDto;
|
|
41
|
-
RoleEntityMapper: UpdateRoleDto;
|
|
42
|
-
},
|
|
43
|
-
Entities extends {
|
|
44
|
-
PermissionDtoMapper: PermissionDto;
|
|
45
|
-
CreatePermissionDtoMapper: PermissionDto;
|
|
46
|
-
UpdatePermissionDtoMapper: PermissionDto;
|
|
47
|
-
RoleEntityMapper: MapNestedDtoArraysToCollections<
|
|
48
|
-
UpdateRoleDto,
|
|
49
|
-
'permissions'
|
|
50
|
-
>;
|
|
51
|
-
} = {
|
|
52
|
-
PermissionDtoMapper: PermissionDto;
|
|
53
|
-
CreatePermissionDtoMapper: PermissionDto;
|
|
54
|
-
UpdatePermissionDtoMapper: PermissionDto;
|
|
55
|
-
RoleEntityMapper: MapNestedDtoArraysToCollections<
|
|
56
|
-
UpdateRoleDto,
|
|
57
|
-
'permissions'
|
|
58
|
-
>;
|
|
59
|
-
}
|
|
26
|
+
MapperEntities extends PermissionEntities,
|
|
27
|
+
MapperDto extends PermissionDtos = PermissionDtos
|
|
60
28
|
> implements PermissionService
|
|
61
29
|
{
|
|
62
|
-
|
|
63
|
-
InstanceTypeRecord<typeof this.mappers>,
|
|
64
|
-
Entities,
|
|
65
|
-
Dto
|
|
66
|
-
>;
|
|
30
|
+
protected _mappers: InternalMapper<InstanceTypeRecord<typeof this.mappers>>;
|
|
67
31
|
private evaluatedTelemetryOptions: {
|
|
68
32
|
logging?: boolean;
|
|
69
33
|
metrics?: boolean;
|
|
@@ -73,35 +37,47 @@ export class BasePermissionService<
|
|
|
73
37
|
constructor(
|
|
74
38
|
public em: EntityManager,
|
|
75
39
|
protected roleServiceFactory: () => RoleService,
|
|
76
|
-
protected openTelemetryCollector: OpenTelemetryCollector<
|
|
40
|
+
protected openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>,
|
|
77
41
|
protected schemaValidator: SchemaValidator,
|
|
78
42
|
protected mappers: {
|
|
79
|
-
|
|
43
|
+
PermissionMapper: ResponseMapperConstructor<
|
|
80
44
|
SchemaValidator,
|
|
81
|
-
|
|
82
|
-
|
|
45
|
+
MapperDto['PermissionMapper'],
|
|
46
|
+
MapperEntities['PermissionMapper']
|
|
83
47
|
>;
|
|
84
|
-
|
|
48
|
+
CreatePermissionMapper: RequestMapperConstructor<
|
|
85
49
|
SchemaValidator,
|
|
86
|
-
|
|
87
|
-
|
|
50
|
+
MapperDto['CreatePermissionMapper'],
|
|
51
|
+
MapperEntities['CreatePermissionMapper'],
|
|
52
|
+
(
|
|
53
|
+
dto: MapperDto['CreatePermissionMapper'],
|
|
54
|
+
em: EntityManager
|
|
55
|
+
) => Promise<MapperEntities['CreatePermissionMapper']>
|
|
88
56
|
>;
|
|
89
|
-
|
|
57
|
+
UpdatePermissionMapper: RequestMapperConstructor<
|
|
90
58
|
SchemaValidator,
|
|
91
|
-
|
|
92
|
-
|
|
59
|
+
MapperDto['UpdatePermissionMapper'],
|
|
60
|
+
MapperEntities['UpdatePermissionMapper'],
|
|
61
|
+
(
|
|
62
|
+
dto: MapperDto['UpdatePermissionMapper'],
|
|
63
|
+
em: EntityManager
|
|
64
|
+
) => Promise<MapperEntities['UpdatePermissionMapper']>
|
|
93
65
|
>;
|
|
94
|
-
RoleEntityMapper:
|
|
66
|
+
RoleEntityMapper: RequestMapperConstructor<
|
|
95
67
|
SchemaValidator,
|
|
96
|
-
|
|
97
|
-
|
|
68
|
+
MapperDto['RoleEntityMapper'],
|
|
69
|
+
MapperEntities['RoleEntityMapper'],
|
|
70
|
+
(
|
|
71
|
+
dto: MapperDto['RoleEntityMapper'],
|
|
72
|
+
em: EntityManager
|
|
73
|
+
) => Promise<MapperEntities['RoleEntityMapper']>
|
|
98
74
|
>;
|
|
99
75
|
},
|
|
100
76
|
options?: {
|
|
101
77
|
telemetry?: TelemetryOptions;
|
|
102
78
|
}
|
|
103
79
|
) {
|
|
104
|
-
this
|
|
80
|
+
this._mappers = transformIntoInternalMapper(mappers, schemaValidator);
|
|
105
81
|
this.evaluatedTelemetryOptions = options?.telemetry
|
|
106
82
|
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
107
83
|
: {
|
|
@@ -113,9 +89,9 @@ export class BasePermissionService<
|
|
|
113
89
|
|
|
114
90
|
// start: global helper functions
|
|
115
91
|
private async updateRolesWithPermissions(
|
|
116
|
-
roles:
|
|
117
|
-
permissions:
|
|
118
|
-
): Promise<
|
|
92
|
+
roles: MapperEntities['RoleEntityMapper'][],
|
|
93
|
+
permissions: MapperEntities['PermissionMapper'][]
|
|
94
|
+
): Promise<MapperEntities['RoleEntityMapper'][]> {
|
|
119
95
|
return Promise.all(
|
|
120
96
|
roles.map(async (role) => {
|
|
121
97
|
permissions.forEach((permission) => role.permissions.add(permission));
|
|
@@ -125,9 +101,9 @@ export class BasePermissionService<
|
|
|
125
101
|
}
|
|
126
102
|
|
|
127
103
|
private async removePermissionsFromRoles(
|
|
128
|
-
roles:
|
|
129
|
-
permissions:
|
|
130
|
-
): Promise<
|
|
104
|
+
roles: MapperEntities['RoleEntityMapper'][],
|
|
105
|
+
permissions: MapperEntities['PermissionMapper'][]
|
|
106
|
+
): Promise<MapperEntities['RoleEntityMapper'][]> {
|
|
131
107
|
return Promise.all(
|
|
132
108
|
roles.map(async (role) => {
|
|
133
109
|
permissions.forEach((permission) =>
|
|
@@ -141,13 +117,13 @@ export class BasePermissionService<
|
|
|
141
117
|
private async getBatchRoles(
|
|
142
118
|
roleIds?: IdsDto,
|
|
143
119
|
em?: EntityManager
|
|
144
|
-
): Promise<
|
|
120
|
+
): Promise<MapperEntities['RoleEntityMapper'][]> {
|
|
145
121
|
return roleIds
|
|
146
122
|
? await Promise.all(
|
|
147
123
|
(await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
|
|
148
124
|
async (role) => {
|
|
149
125
|
return (em ?? this.em).merge(
|
|
150
|
-
await this
|
|
126
|
+
await this._mappers.RoleEntityMapper.deserializeDtoToEntity(
|
|
151
127
|
role,
|
|
152
128
|
em ?? this.em
|
|
153
129
|
)
|
|
@@ -164,13 +140,13 @@ export class BasePermissionService<
|
|
|
164
140
|
permission,
|
|
165
141
|
addToRoles
|
|
166
142
|
}: {
|
|
167
|
-
permission:
|
|
168
|
-
addToRoles:
|
|
143
|
+
permission: MapperEntities['PermissionMapper'];
|
|
144
|
+
addToRoles: MapperEntities['RoleEntityMapper'][];
|
|
169
145
|
}): Promise<{
|
|
170
|
-
permission:
|
|
171
|
-
roles:
|
|
146
|
+
permission: MapperEntities['PermissionMapper'];
|
|
147
|
+
roles: MapperEntities['RoleEntityMapper'][];
|
|
172
148
|
}> {
|
|
173
|
-
let roles:
|
|
149
|
+
let roles: MapperEntities['RoleEntityMapper'][] = [];
|
|
174
150
|
if (addToRoles) {
|
|
175
151
|
roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
|
|
176
152
|
}
|
|
@@ -179,15 +155,15 @@ export class BasePermissionService<
|
|
|
179
155
|
}
|
|
180
156
|
|
|
181
157
|
private async extractCreatePermissionDtoToEntityData(
|
|
182
|
-
permissionDto:
|
|
158
|
+
permissionDto: MapperDto['CreatePermissionMapper'],
|
|
183
159
|
em?: EntityManager
|
|
184
160
|
): Promise<{
|
|
185
|
-
permission:
|
|
186
|
-
addToRoles:
|
|
161
|
+
permission: MapperEntities['PermissionMapper'];
|
|
162
|
+
addToRoles: MapperEntities['RoleEntityMapper'][];
|
|
187
163
|
}> {
|
|
188
164
|
return {
|
|
189
165
|
permission: (em ?? this.em).merge(
|
|
190
|
-
await this
|
|
166
|
+
await this._mappers.CreatePermissionMapper.deserializeDtoToEntity(
|
|
191
167
|
permissionDto,
|
|
192
168
|
em ?? this.em
|
|
193
169
|
)
|
|
@@ -200,9 +176,9 @@ export class BasePermissionService<
|
|
|
200
176
|
// end: createPermission helper functions
|
|
201
177
|
|
|
202
178
|
async createPermission(
|
|
203
|
-
createPermissionDto:
|
|
179
|
+
createPermissionDto: MapperDto['CreatePermissionMapper'],
|
|
204
180
|
em?: EntityManager
|
|
205
|
-
): Promise<
|
|
181
|
+
): Promise<MapperDto['PermissionMapper']> {
|
|
206
182
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
207
183
|
this.openTelemetryCollector.info(
|
|
208
184
|
'Creating permission',
|
|
@@ -219,21 +195,21 @@ export class BasePermissionService<
|
|
|
219
195
|
await this.em.persistAndFlush([permission, ...roles]);
|
|
220
196
|
}
|
|
221
197
|
|
|
222
|
-
return this
|
|
198
|
+
return this._mappers.PermissionMapper.serializeEntityToDto(permission);
|
|
223
199
|
}
|
|
224
200
|
|
|
225
201
|
async createBatchPermissions(
|
|
226
|
-
permissionDtos:
|
|
202
|
+
permissionDtos: MapperDto['CreatePermissionMapper'][],
|
|
227
203
|
em?: EntityManager
|
|
228
|
-
): Promise<
|
|
204
|
+
): Promise<MapperDto['PermissionMapper'][]> {
|
|
229
205
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
230
206
|
this.openTelemetryCollector.info(
|
|
231
207
|
'Creating batch permissions',
|
|
232
208
|
permissionDtos
|
|
233
209
|
);
|
|
234
210
|
}
|
|
235
|
-
const rolesCache: Record<string,
|
|
236
|
-
const permissions:
|
|
211
|
+
const rolesCache: Record<string, MapperEntities['RoleEntityMapper']> = {};
|
|
212
|
+
const permissions: MapperEntities['PermissionMapper'][] = [];
|
|
237
213
|
permissionDtos.map(async (createPermissionDto) => {
|
|
238
214
|
const { permission, roles } = await this.createPermissionDto(
|
|
239
215
|
await this.extractCreatePermissionDtoToEntityData(
|
|
@@ -267,7 +243,7 @@ export class BasePermissionService<
|
|
|
267
243
|
|
|
268
244
|
return Promise.all(
|
|
269
245
|
permissions.map(async (permission) =>
|
|
270
|
-
this
|
|
246
|
+
this._mappers.PermissionMapper.serializeEntityToDto(permission)
|
|
271
247
|
)
|
|
272
248
|
);
|
|
273
249
|
}
|
|
@@ -275,27 +251,27 @@ export class BasePermissionService<
|
|
|
275
251
|
async getPermission(
|
|
276
252
|
idDto: IdDto,
|
|
277
253
|
em?: EntityManager
|
|
278
|
-
): Promise<
|
|
254
|
+
): Promise<MapperDto['PermissionMapper']> {
|
|
279
255
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
280
256
|
this.openTelemetryCollector.info('Getting permission', idDto);
|
|
281
257
|
}
|
|
282
258
|
const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
|
|
283
|
-
return this
|
|
284
|
-
permission as
|
|
259
|
+
return this._mappers.PermissionMapper.serializeEntityToDto(
|
|
260
|
+
permission as MapperEntities['PermissionMapper']
|
|
285
261
|
);
|
|
286
262
|
}
|
|
287
263
|
|
|
288
264
|
async getBatchPermissions(
|
|
289
265
|
idsDto: IdsDto,
|
|
290
266
|
em?: EntityManager
|
|
291
|
-
): Promise<
|
|
267
|
+
): Promise<MapperDto['PermissionMapper'][]> {
|
|
292
268
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
293
269
|
this.openTelemetryCollector.info('Getting batch permissions', idsDto);
|
|
294
270
|
}
|
|
295
271
|
return Promise.all(
|
|
296
272
|
(await (em ?? this.em).find('Permission', idsDto)).map((permission) =>
|
|
297
|
-
this
|
|
298
|
-
permission as
|
|
273
|
+
this._mappers.PermissionMapper.serializeEntityToDto(
|
|
274
|
+
permission as MapperEntities['PermissionMapper']
|
|
299
275
|
)
|
|
300
276
|
)
|
|
301
277
|
);
|
|
@@ -303,14 +279,14 @@ export class BasePermissionService<
|
|
|
303
279
|
|
|
304
280
|
// start: updatePermission helper functions
|
|
305
281
|
private updatePermissionDto = async (
|
|
306
|
-
permissionDto:
|
|
282
|
+
permissionDto: MapperDto['UpdatePermissionMapper'],
|
|
307
283
|
em?: EntityManager
|
|
308
284
|
): Promise<{
|
|
309
|
-
permission:
|
|
310
|
-
roles:
|
|
285
|
+
permission: MapperEntities['PermissionMapper'];
|
|
286
|
+
roles: MapperEntities['RoleEntityMapper'][];
|
|
311
287
|
}> => {
|
|
312
288
|
const permission =
|
|
313
|
-
await this
|
|
289
|
+
await this._mappers.UpdatePermissionMapper.deserializeDtoToEntity(
|
|
314
290
|
permissionDto,
|
|
315
291
|
em ?? this.em
|
|
316
292
|
);
|
|
@@ -321,7 +297,7 @@ export class BasePermissionService<
|
|
|
321
297
|
? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
|
|
322
298
|
: [];
|
|
323
299
|
|
|
324
|
-
let roles:
|
|
300
|
+
let roles: MapperEntities['RoleEntityMapper'][] = [];
|
|
325
301
|
|
|
326
302
|
roles = roles.concat(
|
|
327
303
|
await this.updateRolesWithPermissions(addToRoles, [permission])
|
|
@@ -338,9 +314,9 @@ export class BasePermissionService<
|
|
|
338
314
|
// end: updatePermission helper functions
|
|
339
315
|
|
|
340
316
|
async updatePermission(
|
|
341
|
-
permissionDto:
|
|
317
|
+
permissionDto: MapperDto['UpdatePermissionMapper'],
|
|
342
318
|
em?: EntityManager
|
|
343
|
-
): Promise<
|
|
319
|
+
): Promise<MapperDto['PermissionMapper']> {
|
|
344
320
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
345
321
|
this.openTelemetryCollector.info('Updating permission', permissionDto);
|
|
346
322
|
}
|
|
@@ -353,21 +329,21 @@ export class BasePermissionService<
|
|
|
353
329
|
await this.em.persistAndFlush(entities);
|
|
354
330
|
}
|
|
355
331
|
|
|
356
|
-
return this
|
|
332
|
+
return this._mappers.PermissionMapper.serializeEntityToDto(permission);
|
|
357
333
|
}
|
|
358
334
|
|
|
359
335
|
async updateBatchPermissions(
|
|
360
|
-
permissionDtos:
|
|
336
|
+
permissionDtos: MapperDto['UpdatePermissionMapper'][],
|
|
361
337
|
em?: EntityManager
|
|
362
|
-
): Promise<
|
|
338
|
+
): Promise<MapperDto['PermissionMapper'][]> {
|
|
363
339
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
364
340
|
this.openTelemetryCollector.info(
|
|
365
341
|
'Updating batch permissions',
|
|
366
342
|
permissionDtos
|
|
367
343
|
);
|
|
368
344
|
}
|
|
369
|
-
const rolesCache: Record<string,
|
|
370
|
-
const permissions:
|
|
345
|
+
const rolesCache: Record<string, MapperEntities['RoleEntityMapper']> = {};
|
|
346
|
+
const permissions: MapperEntities['PermissionMapper'][] = [];
|
|
371
347
|
await (em ?? this.em).transactional(async (em) => {
|
|
372
348
|
permissionDtos.map(async (updatePermissionDto) => {
|
|
373
349
|
const { permission, roles } =
|
|
@@ -399,7 +375,7 @@ export class BasePermissionService<
|
|
|
399
375
|
|
|
400
376
|
return Promise.all(
|
|
401
377
|
permissions.map((permission) =>
|
|
402
|
-
this
|
|
378
|
+
this._mappers.PermissionMapper.serializeEntityToDto(permission)
|
|
403
379
|
)
|
|
404
380
|
);
|
|
405
381
|
}
|
|
@@ -8,60 +8,24 @@ import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
|
|
|
8
8
|
import { EntityManager } from '@mikro-orm/core';
|
|
9
9
|
|
|
10
10
|
import { IdDto, IdsDto, InstanceTypeRecord } from '@forklaunch/common';
|
|
11
|
+
import { RoleDto } from '@forklaunch/interfaces-iam/types';
|
|
11
12
|
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
} from '@forklaunch/
|
|
17
|
-
import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
|
|
18
|
-
import {
|
|
19
|
-
CreateRoleDto,
|
|
20
|
-
RoleDto,
|
|
21
|
-
UpdateRoleDto
|
|
22
|
-
} from '@forklaunch/interfaces-iam/types';
|
|
13
|
+
InternalMapper,
|
|
14
|
+
RequestMapperConstructor,
|
|
15
|
+
ResponseMapperConstructor,
|
|
16
|
+
transformIntoInternalMapper
|
|
17
|
+
} from '@forklaunch/internal';
|
|
23
18
|
import { AnySchemaValidator } from '@forklaunch/validator';
|
|
19
|
+
import { RoleDtos } from '../types/iamDto.types';
|
|
20
|
+
import { RoleEntities } from '../types/iamEntities.types';
|
|
24
21
|
|
|
25
22
|
export class BaseRoleService<
|
|
26
23
|
SchemaValidator extends AnySchemaValidator,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
RoleDtoMapper: RoleDto;
|
|
30
|
-
CreateRoleDtoMapper: CreateRoleDto;
|
|
31
|
-
UpdateRoleDtoMapper: UpdateRoleDto;
|
|
32
|
-
} = {
|
|
33
|
-
RoleDtoMapper: RoleDto;
|
|
34
|
-
CreateRoleDtoMapper: CreateRoleDto;
|
|
35
|
-
UpdateRoleDtoMapper: UpdateRoleDto;
|
|
36
|
-
},
|
|
37
|
-
Entities extends {
|
|
38
|
-
RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
|
|
39
|
-
CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
|
|
40
|
-
RoleDto,
|
|
41
|
-
'permissions'
|
|
42
|
-
>;
|
|
43
|
-
UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
|
|
44
|
-
RoleDto,
|
|
45
|
-
'permissions'
|
|
46
|
-
>;
|
|
47
|
-
} = {
|
|
48
|
-
RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
|
|
49
|
-
CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
|
|
50
|
-
RoleDto,
|
|
51
|
-
'permissions'
|
|
52
|
-
>;
|
|
53
|
-
UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
|
|
54
|
-
RoleDto,
|
|
55
|
-
'permissions'
|
|
56
|
-
>;
|
|
57
|
-
}
|
|
24
|
+
MapperEntities extends RoleEntities,
|
|
25
|
+
MapperDto extends RoleDtos = RoleDtos
|
|
58
26
|
> implements RoleService
|
|
59
27
|
{
|
|
60
|
-
|
|
61
|
-
InstanceTypeRecord<typeof this.mappers>,
|
|
62
|
-
Entities,
|
|
63
|
-
Dto
|
|
64
|
-
>;
|
|
28
|
+
protected _mappers: InternalMapper<InstanceTypeRecord<typeof this.mappers>>;
|
|
65
29
|
private evaluatedTelemetryOptions: {
|
|
66
30
|
logging?: boolean;
|
|
67
31
|
metrics?: boolean;
|
|
@@ -70,30 +34,38 @@ export class BaseRoleService<
|
|
|
70
34
|
|
|
71
35
|
constructor(
|
|
72
36
|
public em: EntityManager,
|
|
73
|
-
protected openTelemetryCollector: OpenTelemetryCollector<
|
|
37
|
+
protected openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>,
|
|
74
38
|
protected schemaValidator: SchemaValidator,
|
|
75
39
|
protected mappers: {
|
|
76
|
-
|
|
40
|
+
RoleMapper: ResponseMapperConstructor<
|
|
77
41
|
SchemaValidator,
|
|
78
|
-
|
|
79
|
-
|
|
42
|
+
MapperDto['RoleMapper'],
|
|
43
|
+
MapperEntities['RoleMapper']
|
|
80
44
|
>;
|
|
81
|
-
|
|
45
|
+
CreateRoleMapper: RequestMapperConstructor<
|
|
82
46
|
SchemaValidator,
|
|
83
|
-
|
|
84
|
-
|
|
47
|
+
MapperDto['CreateRoleMapper'],
|
|
48
|
+
MapperEntities['CreateRoleMapper'],
|
|
49
|
+
(
|
|
50
|
+
dto: MapperDto['CreateRoleMapper'],
|
|
51
|
+
em: EntityManager
|
|
52
|
+
) => Promise<MapperEntities['CreateRoleMapper']>
|
|
85
53
|
>;
|
|
86
|
-
|
|
54
|
+
UpdateRoleMapper: RequestMapperConstructor<
|
|
87
55
|
SchemaValidator,
|
|
88
|
-
|
|
89
|
-
|
|
56
|
+
MapperDto['UpdateRoleMapper'],
|
|
57
|
+
MapperEntities['UpdateRoleMapper'],
|
|
58
|
+
(
|
|
59
|
+
dto: MapperDto['UpdateRoleMapper'],
|
|
60
|
+
em: EntityManager
|
|
61
|
+
) => Promise<MapperEntities['UpdateRoleMapper']>
|
|
90
62
|
>;
|
|
91
63
|
},
|
|
92
64
|
options?: {
|
|
93
65
|
telemetry?: TelemetryOptions;
|
|
94
66
|
}
|
|
95
67
|
) {
|
|
96
|
-
this
|
|
68
|
+
this._mappers = transformIntoInternalMapper(mappers, schemaValidator);
|
|
97
69
|
this.evaluatedTelemetryOptions = options?.telemetry
|
|
98
70
|
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
99
71
|
: {
|
|
@@ -104,13 +76,13 @@ export class BaseRoleService<
|
|
|
104
76
|
}
|
|
105
77
|
|
|
106
78
|
async createRole(
|
|
107
|
-
roleDto:
|
|
79
|
+
roleDto: MapperDto['CreateRoleMapper'],
|
|
108
80
|
em?: EntityManager
|
|
109
|
-
): Promise<
|
|
81
|
+
): Promise<MapperDto['RoleMapper']> {
|
|
110
82
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
111
83
|
this.openTelemetryCollector.info('Creating role', roleDto);
|
|
112
84
|
}
|
|
113
|
-
const role = await this
|
|
85
|
+
const role = await this._mappers.CreateRoleMapper.deserializeDtoToEntity(
|
|
114
86
|
roleDto,
|
|
115
87
|
em ?? this.em
|
|
116
88
|
);
|
|
@@ -121,20 +93,20 @@ export class BaseRoleService<
|
|
|
121
93
|
await this.em.persistAndFlush(role);
|
|
122
94
|
}
|
|
123
95
|
|
|
124
|
-
return this
|
|
96
|
+
return this._mappers.RoleMapper.serializeEntityToDto(role);
|
|
125
97
|
}
|
|
126
98
|
|
|
127
99
|
async createBatchRoles(
|
|
128
|
-
roleDtos:
|
|
100
|
+
roleDtos: MapperDto['CreateRoleMapper'][],
|
|
129
101
|
em?: EntityManager
|
|
130
|
-
): Promise<
|
|
102
|
+
): Promise<MapperDto['RoleMapper'][]> {
|
|
131
103
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
132
104
|
this.openTelemetryCollector.info('Creating batch roles', roleDtos);
|
|
133
105
|
}
|
|
134
106
|
|
|
135
107
|
const roles = await Promise.all(
|
|
136
108
|
roleDtos.map(async (roleDto) =>
|
|
137
|
-
this
|
|
109
|
+
this._mappers.CreateRoleMapper.deserializeDtoToEntity(
|
|
138
110
|
roleDto,
|
|
139
111
|
em ?? this.em
|
|
140
112
|
)
|
|
@@ -148,9 +120,7 @@ export class BaseRoleService<
|
|
|
148
120
|
}
|
|
149
121
|
|
|
150
122
|
return Promise.all(
|
|
151
|
-
roles.map((role) =>
|
|
152
|
-
this.#mappers.RoleDtoMapper.serializeEntityToDto(role)
|
|
153
|
-
)
|
|
123
|
+
roles.map((role) => this._mappers.RoleMapper.serializeEntityToDto(role))
|
|
154
124
|
);
|
|
155
125
|
}
|
|
156
126
|
|
|
@@ -163,8 +133,8 @@ export class BaseRoleService<
|
|
|
163
133
|
populate: ['id', '*']
|
|
164
134
|
});
|
|
165
135
|
|
|
166
|
-
return this
|
|
167
|
-
role as
|
|
136
|
+
return this._mappers.RoleMapper.serializeEntityToDto(
|
|
137
|
+
role as MapperEntities['RoleMapper']
|
|
168
138
|
);
|
|
169
139
|
}
|
|
170
140
|
|
|
@@ -185,22 +155,22 @@ export class BaseRoleService<
|
|
|
185
155
|
}
|
|
186
156
|
)
|
|
187
157
|
).map((role) =>
|
|
188
|
-
this
|
|
189
|
-
role as
|
|
158
|
+
this._mappers.RoleMapper.serializeEntityToDto(
|
|
159
|
+
role as MapperEntities['RoleMapper']
|
|
190
160
|
)
|
|
191
161
|
)
|
|
192
162
|
);
|
|
193
163
|
}
|
|
194
164
|
|
|
195
165
|
async updateRole(
|
|
196
|
-
roleDto:
|
|
166
|
+
roleDto: MapperDto['UpdateRoleMapper'],
|
|
197
167
|
em?: EntityManager
|
|
198
|
-
): Promise<
|
|
168
|
+
): Promise<MapperDto['RoleMapper']> {
|
|
199
169
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
200
170
|
this.openTelemetryCollector.info('Updating role', roleDto);
|
|
201
171
|
}
|
|
202
172
|
|
|
203
|
-
const role = await this
|
|
173
|
+
const role = await this._mappers.UpdateRoleMapper.deserializeDtoToEntity(
|
|
204
174
|
roleDto,
|
|
205
175
|
em ?? this.em
|
|
206
176
|
);
|
|
@@ -211,20 +181,20 @@ export class BaseRoleService<
|
|
|
211
181
|
await this.em.persistAndFlush(role);
|
|
212
182
|
}
|
|
213
183
|
|
|
214
|
-
return this
|
|
184
|
+
return this._mappers.RoleMapper.serializeEntityToDto(role);
|
|
215
185
|
}
|
|
216
186
|
|
|
217
187
|
async updateBatchRoles(
|
|
218
|
-
roleDtos:
|
|
188
|
+
roleDtos: MapperDto['UpdateRoleMapper'][],
|
|
219
189
|
em?: EntityManager
|
|
220
|
-
): Promise<
|
|
190
|
+
): Promise<MapperDto['RoleMapper'][]> {
|
|
221
191
|
if (this.evaluatedTelemetryOptions.logging) {
|
|
222
192
|
this.openTelemetryCollector.info('Updating batch roles', roleDtos);
|
|
223
193
|
}
|
|
224
194
|
|
|
225
195
|
const roles = await Promise.all(
|
|
226
196
|
roleDtos.map(async (roleDto) =>
|
|
227
|
-
this
|
|
197
|
+
this._mappers.UpdateRoleMapper.deserializeDtoToEntity(
|
|
228
198
|
roleDto,
|
|
229
199
|
em ?? this.em
|
|
230
200
|
)
|
|
@@ -238,8 +208,8 @@ export class BaseRoleService<
|
|
|
238
208
|
}
|
|
239
209
|
return Promise.all(
|
|
240
210
|
roles.map((role) =>
|
|
241
|
-
this
|
|
242
|
-
role as
|
|
211
|
+
this._mappers.RoleMapper.serializeEntityToDto(
|
|
212
|
+
role as MapperEntities['RoleMapper']
|
|
243
213
|
)
|
|
244
214
|
)
|
|
245
215
|
);
|