@forklaunch/implementation-iam-base 0.2.0 → 0.2.1
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/services/organization.service.ts +63 -9
- package/lib/eject/services/permission.service.ts +136 -63
- package/lib/eject/services/role.service.ts +106 -22
- package/lib/eject/services/user.service.ts +96 -31
- package/lib/services/organization.service.d.ts +6 -1
- package/lib/services/organization.service.d.ts.map +1 -1
- package/lib/services/organization.service.js +47 -9
- package/lib/services/permission.service.d.ts +24 -13
- package/lib/services/permission.service.d.ts.map +1 -1
- package/lib/services/permission.service.js +95 -41
- package/lib/services/role.service.d.ts +8 -3
- package/lib/services/role.service.d.ts.map +1 -1
- package/lib/services/role.service.js +83 -22
- package/lib/services/user.service.d.ts +18 -22
- package/lib/services/user.service.d.ts.map +1 -1
- package/lib/services/user.service.js +75 -21
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { evaluateTelemetryOptions } from '@forklaunch/core/http';
|
|
1
2
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
3
|
export class BasePermissionService {
|
|
3
4
|
em;
|
|
@@ -6,12 +7,14 @@ export class BasePermissionService {
|
|
|
6
7
|
schemaValidator;
|
|
7
8
|
mappers;
|
|
8
9
|
#mappers;
|
|
10
|
+
evaluatedTelemetryOptions;
|
|
9
11
|
constructor(
|
|
10
12
|
em,
|
|
11
13
|
roleServiceFactory,
|
|
12
14
|
openTelemetryCollector,
|
|
13
15
|
schemaValidator,
|
|
14
|
-
mappers
|
|
16
|
+
mappers,
|
|
17
|
+
options
|
|
15
18
|
) {
|
|
16
19
|
this.em = em;
|
|
17
20
|
this.roleServiceFactory = roleServiceFactory;
|
|
@@ -19,6 +22,13 @@ export class BasePermissionService {
|
|
|
19
22
|
this.schemaValidator = schemaValidator;
|
|
20
23
|
this.mappers = mappers;
|
|
21
24
|
this.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
|
|
25
|
+
this.evaluatedTelemetryOptions = options?.telemetry
|
|
26
|
+
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
27
|
+
: {
|
|
28
|
+
logging: false,
|
|
29
|
+
metrics: false,
|
|
30
|
+
tracing: false
|
|
31
|
+
};
|
|
22
32
|
}
|
|
23
33
|
// start: global helper functions
|
|
24
34
|
async updateRolesWithPermissions(roles, permissions) {
|
|
@@ -45,7 +55,10 @@ export class BasePermissionService {
|
|
|
45
55
|
(await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
|
|
46
56
|
async (role) => {
|
|
47
57
|
return (em ?? this.em).merge(
|
|
48
|
-
await this.#mappers.
|
|
58
|
+
await this.#mappers.RoleEntityMapper.deserializeDtoToEntity(
|
|
59
|
+
role,
|
|
60
|
+
em ?? this.em
|
|
61
|
+
)
|
|
49
62
|
);
|
|
50
63
|
}
|
|
51
64
|
)
|
|
@@ -65,7 +78,8 @@ export class BasePermissionService {
|
|
|
65
78
|
return {
|
|
66
79
|
permission: (em ?? this.em).merge(
|
|
67
80
|
await this.#mappers.CreatePermissionDtoMapper.deserializeDtoToEntity(
|
|
68
|
-
permissionDto
|
|
81
|
+
permissionDto,
|
|
82
|
+
em ?? this.em
|
|
69
83
|
)
|
|
70
84
|
),
|
|
71
85
|
addToRoles: permissionDto.addToRolesIds
|
|
@@ -75,46 +89,60 @@ export class BasePermissionService {
|
|
|
75
89
|
}
|
|
76
90
|
// end: createPermission helper functions
|
|
77
91
|
async createPermission(createPermissionDto, em) {
|
|
92
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
93
|
+
this.openTelemetryCollector.info(
|
|
94
|
+
'Creating permission',
|
|
95
|
+
createPermissionDto
|
|
96
|
+
);
|
|
97
|
+
}
|
|
78
98
|
const { permission, roles } = await this.createPermissionDto(
|
|
79
99
|
await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em)
|
|
80
100
|
);
|
|
81
|
-
|
|
82
|
-
await
|
|
83
|
-
}
|
|
101
|
+
if (em) {
|
|
102
|
+
await em.persist([permission, ...roles]);
|
|
103
|
+
} else {
|
|
104
|
+
await this.em.persistAndFlush([permission, ...roles]);
|
|
105
|
+
}
|
|
84
106
|
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
85
107
|
}
|
|
86
108
|
async createBatchPermissions(permissionDtos, em) {
|
|
109
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
110
|
+
this.openTelemetryCollector.info(
|
|
111
|
+
'Creating batch permissions',
|
|
112
|
+
permissionDtos
|
|
113
|
+
);
|
|
114
|
+
}
|
|
87
115
|
const rolesCache = {};
|
|
88
116
|
const permissions = [];
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
) {
|
|
102
|
-
role.permissions.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
});
|
|
111
|
-
permissions.push(permission);
|
|
117
|
+
permissionDtos.map(async (createPermissionDto) => {
|
|
118
|
+
const { permission, roles } = await this.createPermissionDto(
|
|
119
|
+
await this.extractCreatePermissionDtoToEntityData(
|
|
120
|
+
createPermissionDto,
|
|
121
|
+
em
|
|
122
|
+
)
|
|
123
|
+
);
|
|
124
|
+
roles.forEach((role) => {
|
|
125
|
+
if (
|
|
126
|
+
rolesCache[role.id] &&
|
|
127
|
+
role.permissions !== rolesCache[role.id].permissions
|
|
128
|
+
) {
|
|
129
|
+
role.permissions.getItems().forEach((permission) => {
|
|
130
|
+
if (!rolesCache[role.id].permissions.contains(permission)) {
|
|
131
|
+
rolesCache[role.id].permissions.add(permission);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
} else {
|
|
135
|
+
rolesCache[role.id] = role;
|
|
136
|
+
}
|
|
112
137
|
});
|
|
113
|
-
|
|
114
|
-
...permissions,
|
|
115
|
-
...Object.values(rolesCache)
|
|
116
|
-
]);
|
|
138
|
+
permissions.push(permission);
|
|
117
139
|
});
|
|
140
|
+
const entities = [...permissions, ...Object.values(rolesCache)];
|
|
141
|
+
if (em) {
|
|
142
|
+
await em.persist(entities);
|
|
143
|
+
} else {
|
|
144
|
+
await this.em.persistAndFlush(entities);
|
|
145
|
+
}
|
|
118
146
|
return Promise.all(
|
|
119
147
|
permissions.map(async (permission) =>
|
|
120
148
|
this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
|
|
@@ -122,10 +150,16 @@ export class BasePermissionService {
|
|
|
122
150
|
);
|
|
123
151
|
}
|
|
124
152
|
async getPermission(idDto, em) {
|
|
153
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
154
|
+
this.openTelemetryCollector.info('Getting permission', idDto);
|
|
155
|
+
}
|
|
125
156
|
const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
|
|
126
157
|
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
127
158
|
}
|
|
128
159
|
async getBatchPermissions(idsDto, em) {
|
|
160
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
161
|
+
this.openTelemetryCollector.info('Getting batch permissions', idsDto);
|
|
162
|
+
}
|
|
129
163
|
return Promise.all(
|
|
130
164
|
(await (em ?? this.em).find('Permission', idsDto)).map((permission) =>
|
|
131
165
|
this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
|
|
@@ -136,7 +170,8 @@ export class BasePermissionService {
|
|
|
136
170
|
updatePermissionDto = async (permissionDto, em) => {
|
|
137
171
|
const permission =
|
|
138
172
|
await this.#mappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(
|
|
139
|
-
permissionDto
|
|
173
|
+
permissionDto,
|
|
174
|
+
em ?? this.em
|
|
140
175
|
);
|
|
141
176
|
const addToRoles = permissionDto.addToRolesIds
|
|
142
177
|
? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
|
|
@@ -158,14 +193,25 @@ export class BasePermissionService {
|
|
|
158
193
|
};
|
|
159
194
|
// end: updatePermission helper functions
|
|
160
195
|
async updatePermission(permissionDto, em) {
|
|
196
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
197
|
+
this.openTelemetryCollector.info('Updating permission', permissionDto);
|
|
198
|
+
}
|
|
161
199
|
const { permission, roles } = await this.updatePermissionDto(permissionDto);
|
|
162
|
-
await (em ?? this.em).upsertMany([permission, ...roles]);
|
|
163
|
-
if (
|
|
164
|
-
|
|
200
|
+
const entities = await (em ?? this.em).upsertMany([permission, ...roles]);
|
|
201
|
+
if (em) {
|
|
202
|
+
await em.persist(entities);
|
|
203
|
+
} else {
|
|
204
|
+
await this.em.persistAndFlush(entities);
|
|
165
205
|
}
|
|
166
206
|
return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
|
|
167
207
|
}
|
|
168
208
|
async updateBatchPermissions(permissionDtos, em) {
|
|
209
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
210
|
+
this.openTelemetryCollector.info(
|
|
211
|
+
'Updating batch permissions',
|
|
212
|
+
permissionDtos
|
|
213
|
+
);
|
|
214
|
+
}
|
|
169
215
|
const rolesCache = {};
|
|
170
216
|
const permissions = [];
|
|
171
217
|
await (em ?? this.em).transactional(async (em) => {
|
|
@@ -188,10 +234,12 @@ export class BasePermissionService {
|
|
|
188
234
|
});
|
|
189
235
|
permissions.push(permission);
|
|
190
236
|
});
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
237
|
+
const entities = [...permissions, ...Object.values(rolesCache)];
|
|
238
|
+
if (em) {
|
|
239
|
+
await em.persist(entities);
|
|
240
|
+
} else {
|
|
241
|
+
await this.em.persistAndFlush(entities);
|
|
242
|
+
}
|
|
195
243
|
});
|
|
196
244
|
return Promise.all(
|
|
197
245
|
permissions.map((permission) =>
|
|
@@ -200,9 +248,15 @@ export class BasePermissionService {
|
|
|
200
248
|
);
|
|
201
249
|
}
|
|
202
250
|
async deletePermission(idDto, em) {
|
|
251
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
252
|
+
this.openTelemetryCollector.info('Deleting permission', idDto);
|
|
253
|
+
}
|
|
203
254
|
await (em ?? this.em).nativeDelete('Permission', idDto);
|
|
204
255
|
}
|
|
205
256
|
async deleteBatchPermissions(idsDto, em) {
|
|
257
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
258
|
+
this.openTelemetryCollector.info('Deleting batch permissions', idsDto);
|
|
259
|
+
}
|
|
206
260
|
await (em ?? this.em).nativeDelete('Permission', {
|
|
207
261
|
id: { $in: idsDto.ids }
|
|
208
262
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MetricsDefinition,
|
|
3
|
-
OpenTelemetryCollector
|
|
3
|
+
OpenTelemetryCollector,
|
|
4
|
+
TelemetryOptions
|
|
4
5
|
} from '@forklaunch/core/http';
|
|
5
6
|
import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
|
|
6
7
|
import { EntityManager } from '@mikro-orm/core';
|
|
@@ -72,6 +73,7 @@ export declare class BaseRoleService<
|
|
|
72
73
|
Entities['UpdateRoleDtoMapper']
|
|
73
74
|
>;
|
|
74
75
|
};
|
|
76
|
+
private evaluatedTelemetryOptions;
|
|
75
77
|
constructor(
|
|
76
78
|
em: EntityManager,
|
|
77
79
|
openTelemetryCollector: OpenTelemetryCollector<Metrics>,
|
|
@@ -92,6 +94,9 @@ export declare class BaseRoleService<
|
|
|
92
94
|
Dto['UpdateRoleDtoMapper'],
|
|
93
95
|
Entities['UpdateRoleDtoMapper']
|
|
94
96
|
>;
|
|
97
|
+
},
|
|
98
|
+
options?: {
|
|
99
|
+
telemetry?: TelemetryOptions;
|
|
95
100
|
}
|
|
96
101
|
);
|
|
97
102
|
createRole(
|
|
@@ -102,8 +107,8 @@ export declare class BaseRoleService<
|
|
|
102
107
|
roleDtos: Dto['CreateRoleDtoMapper'][],
|
|
103
108
|
em?: EntityManager
|
|
104
109
|
): Promise<Dto['RoleDtoMapper'][]>;
|
|
105
|
-
getRole(
|
|
106
|
-
getBatchRoles(
|
|
110
|
+
getRole({ id }: IdDto, em?: EntityManager): Promise<RoleDto>;
|
|
111
|
+
getBatchRoles({ ids }: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
|
|
107
112
|
updateRole(
|
|
108
113
|
roleDto: Dto['UpdateRoleDtoMapper'],
|
|
109
114
|
em?: EntityManager
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { evaluateTelemetryOptions } from '@forklaunch/core/http';
|
|
1
2
|
import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
|
|
2
3
|
export class BaseRoleService {
|
|
3
4
|
em;
|
|
@@ -5,64 +6,118 @@ export class BaseRoleService {
|
|
|
5
6
|
schemaValidator;
|
|
6
7
|
mappers;
|
|
7
8
|
#mappers;
|
|
8
|
-
|
|
9
|
+
evaluatedTelemetryOptions;
|
|
10
|
+
constructor(em, openTelemetryCollector, schemaValidator, mappers, options) {
|
|
9
11
|
this.em = em;
|
|
10
12
|
this.openTelemetryCollector = openTelemetryCollector;
|
|
11
13
|
this.schemaValidator = schemaValidator;
|
|
12
14
|
this.mappers = mappers;
|
|
13
15
|
this.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
|
|
16
|
+
this.evaluatedTelemetryOptions = options?.telemetry
|
|
17
|
+
? evaluateTelemetryOptions(options.telemetry).enabled
|
|
18
|
+
: {
|
|
19
|
+
logging: false,
|
|
20
|
+
metrics: false,
|
|
21
|
+
tracing: false
|
|
22
|
+
};
|
|
14
23
|
}
|
|
15
24
|
async createRole(roleDto, em) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
25
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
26
|
+
this.openTelemetryCollector.info('Creating role', roleDto);
|
|
27
|
+
}
|
|
28
|
+
const role = await this.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
|
|
29
|
+
roleDto,
|
|
30
|
+
em ?? this.em
|
|
31
|
+
);
|
|
32
|
+
if (em) {
|
|
33
|
+
await em.persist(role);
|
|
34
|
+
} else {
|
|
35
|
+
await this.em.persistAndFlush(role);
|
|
36
|
+
}
|
|
19
37
|
return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
|
|
20
38
|
}
|
|
21
39
|
async createBatchRoles(roleDtos, em) {
|
|
40
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
41
|
+
this.openTelemetryCollector.info('Creating batch roles', roleDtos);
|
|
42
|
+
}
|
|
22
43
|
const roles = await Promise.all(
|
|
23
44
|
roleDtos.map(async (roleDto) =>
|
|
24
|
-
this.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
|
|
45
|
+
this.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
|
|
46
|
+
roleDto,
|
|
47
|
+
em ?? this.em
|
|
48
|
+
)
|
|
25
49
|
)
|
|
26
50
|
);
|
|
27
|
-
|
|
51
|
+
if (em) {
|
|
52
|
+
await em.persist(roles);
|
|
53
|
+
} else {
|
|
54
|
+
await this.em.persistAndFlush(roles);
|
|
55
|
+
}
|
|
28
56
|
return Promise.all(
|
|
29
57
|
roles.map((role) =>
|
|
30
58
|
this.#mappers.RoleDtoMapper.serializeEntityToDto(role)
|
|
31
59
|
)
|
|
32
60
|
);
|
|
33
61
|
}
|
|
34
|
-
async getRole(
|
|
35
|
-
|
|
62
|
+
async getRole({ id }, em) {
|
|
63
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
64
|
+
this.openTelemetryCollector.info('Getting role', { id });
|
|
65
|
+
}
|
|
66
|
+
const role = await (em ?? this.em).findOneOrFail('Role', id, {
|
|
36
67
|
populate: ['id', '*']
|
|
37
68
|
});
|
|
38
69
|
return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
|
|
39
70
|
}
|
|
40
|
-
async getBatchRoles(
|
|
71
|
+
async getBatchRoles({ ids }, em) {
|
|
72
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
73
|
+
this.openTelemetryCollector.info('Getting batch roles', { ids });
|
|
74
|
+
}
|
|
41
75
|
return Promise.all(
|
|
42
76
|
(
|
|
43
|
-
await (em ?? this.em).find(
|
|
44
|
-
|
|
45
|
-
|
|
77
|
+
await (em ?? this.em).find(
|
|
78
|
+
'Role',
|
|
79
|
+
{
|
|
80
|
+
id: { $in: ids }
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
populate: ['id', '*']
|
|
84
|
+
}
|
|
85
|
+
)
|
|
46
86
|
).map((role) => this.#mappers.RoleDtoMapper.serializeEntityToDto(role))
|
|
47
87
|
);
|
|
48
88
|
}
|
|
49
89
|
async updateRole(roleDto, em) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
90
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
91
|
+
this.openTelemetryCollector.info('Updating role', roleDto);
|
|
92
|
+
}
|
|
93
|
+
const role = await this.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
|
|
94
|
+
roleDto,
|
|
95
|
+
em ?? this.em
|
|
96
|
+
);
|
|
97
|
+
if (em) {
|
|
98
|
+
await em.persist(role);
|
|
99
|
+
} else {
|
|
100
|
+
await this.em.persistAndFlush(role);
|
|
101
|
+
}
|
|
55
102
|
return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
|
|
56
103
|
}
|
|
57
104
|
async updateBatchRoles(roleDtos, em) {
|
|
58
|
-
|
|
105
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
106
|
+
this.openTelemetryCollector.info('Updating batch roles', roleDtos);
|
|
107
|
+
}
|
|
108
|
+
const roles = await Promise.all(
|
|
59
109
|
roleDtos.map(async (roleDto) =>
|
|
60
|
-
this.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
|
|
110
|
+
this.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
|
|
111
|
+
roleDto,
|
|
112
|
+
em ?? this.em
|
|
113
|
+
)
|
|
61
114
|
)
|
|
62
115
|
);
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
}
|
|
116
|
+
if (em) {
|
|
117
|
+
await em.persist(roles);
|
|
118
|
+
} else {
|
|
119
|
+
await this.em.persistAndFlush(roles);
|
|
120
|
+
}
|
|
66
121
|
return Promise.all(
|
|
67
122
|
roles.map((role) =>
|
|
68
123
|
this.#mappers.RoleDtoMapper.serializeEntityToDto(role)
|
|
@@ -70,9 +125,15 @@ export class BaseRoleService {
|
|
|
70
125
|
);
|
|
71
126
|
}
|
|
72
127
|
async deleteRole(idDto, em) {
|
|
128
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
129
|
+
this.openTelemetryCollector.info('Deleting role', idDto);
|
|
130
|
+
}
|
|
73
131
|
await (em ?? this.em).nativeDelete('Role', idDto);
|
|
74
132
|
}
|
|
75
133
|
async deleteBatchRoles(idsDto, em) {
|
|
134
|
+
if (this.evaluatedTelemetryOptions.logging) {
|
|
135
|
+
this.openTelemetryCollector.info('Deleting batch roles', idsDto);
|
|
136
|
+
}
|
|
76
137
|
await (em ?? this.em).nativeDelete('Role', { id: { $in: idsDto.ids } });
|
|
77
138
|
}
|
|
78
139
|
}
|
|
@@ -6,7 +6,8 @@ import {
|
|
|
6
6
|
import { IdDto, IdsDto } from '@forklaunch/common';
|
|
7
7
|
import {
|
|
8
8
|
MetricsDefinition,
|
|
9
|
-
OpenTelemetryCollector
|
|
9
|
+
OpenTelemetryCollector,
|
|
10
|
+
TelemetryOptions
|
|
10
11
|
} from '@forklaunch/core/http';
|
|
11
12
|
import {
|
|
12
13
|
RequestDtoMapperConstructor,
|
|
@@ -60,22 +61,20 @@ export declare class BaseUserService<
|
|
|
60
61
|
CreateUserDtoMapper: RequestDtoMapperConstructor<
|
|
61
62
|
SchemaValidator,
|
|
62
63
|
Dto['CreateUserDtoMapper'],
|
|
63
|
-
Entities['CreateUserDtoMapper']
|
|
64
|
-
(
|
|
65
|
-
dto: never,
|
|
66
|
-
passwordEncryptionPublicKeyPath: string
|
|
67
|
-
) => Promise<Entities['UpdateUserDtoMapper']>
|
|
64
|
+
Entities['CreateUserDtoMapper']
|
|
68
65
|
>;
|
|
69
66
|
UpdateUserDtoMapper: RequestDtoMapperConstructor<
|
|
70
67
|
SchemaValidator,
|
|
71
68
|
Dto['UpdateUserDtoMapper'],
|
|
72
|
-
Entities['UpdateUserDtoMapper']
|
|
73
|
-
(
|
|
74
|
-
dto: never,
|
|
75
|
-
passwordEncryptionPublicKeyPath: string
|
|
76
|
-
) => Promise<Entities['UpdateUserDtoMapper']>
|
|
69
|
+
Entities['UpdateUserDtoMapper']
|
|
77
70
|
>;
|
|
78
71
|
};
|
|
72
|
+
readonly options?:
|
|
73
|
+
| {
|
|
74
|
+
telemetry?: TelemetryOptions;
|
|
75
|
+
}
|
|
76
|
+
| undefined;
|
|
77
|
+
private evaluatedTelemetryOptions;
|
|
79
78
|
constructor(
|
|
80
79
|
em: EntityManager,
|
|
81
80
|
passwordEncryptionPublicKeyPath: string,
|
|
@@ -92,22 +91,19 @@ export declare class BaseUserService<
|
|
|
92
91
|
CreateUserDtoMapper: RequestDtoMapperConstructor<
|
|
93
92
|
SchemaValidator,
|
|
94
93
|
Dto['CreateUserDtoMapper'],
|
|
95
|
-
Entities['CreateUserDtoMapper']
|
|
96
|
-
(
|
|
97
|
-
dto: never,
|
|
98
|
-
passwordEncryptionPublicKeyPath: string
|
|
99
|
-
) => Promise<Entities['UpdateUserDtoMapper']>
|
|
94
|
+
Entities['CreateUserDtoMapper']
|
|
100
95
|
>;
|
|
101
96
|
UpdateUserDtoMapper: RequestDtoMapperConstructor<
|
|
102
97
|
SchemaValidator,
|
|
103
98
|
Dto['UpdateUserDtoMapper'],
|
|
104
|
-
Entities['UpdateUserDtoMapper']
|
|
105
|
-
(
|
|
106
|
-
dto: never,
|
|
107
|
-
passwordEncryptionPublicKeyPath: string
|
|
108
|
-
) => Promise<Entities['UpdateUserDtoMapper']>
|
|
99
|
+
Entities['UpdateUserDtoMapper']
|
|
109
100
|
>;
|
|
110
|
-
}
|
|
101
|
+
},
|
|
102
|
+
options?:
|
|
103
|
+
| {
|
|
104
|
+
telemetry?: TelemetryOptions;
|
|
105
|
+
}
|
|
106
|
+
| undefined
|
|
111
107
|
);
|
|
112
108
|
createUser(
|
|
113
109
|
userDto: Dto['CreateUserDtoMapper'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../services/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../services/user.service.ts"],"names":[],"mappings":"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"}
|