@forklaunch/implementation-iam-base 0.2.3 → 0.3.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.
Files changed (69) hide show
  1. package/lib/schemas/index.d.mts +474 -0
  2. package/lib/schemas/index.d.ts +474 -5
  3. package/lib/schemas/index.js +339 -4
  4. package/lib/schemas/index.mjs +369 -0
  5. package/lib/services/index.d.mts +203 -0
  6. package/lib/services/index.d.ts +203 -5
  7. package/lib/services/index.js +666 -4
  8. package/lib/services/index.mjs +652 -0
  9. package/package.json +13 -10
  10. package/lib/__test__/schemaEquality.test.d.ts +0 -2
  11. package/lib/__test__/schemaEquality.test.d.ts.map +0 -1
  12. package/lib/__test__/schemaEquality.test.js +0 -283
  13. package/lib/jest.config.d.ts +0 -4
  14. package/lib/jest.config.d.ts.map +0 -1
  15. package/lib/jest.config.js +0 -19
  16. package/lib/schemas/index.d.ts.map +0 -1
  17. package/lib/schemas/organization.schema.d.ts +0 -423
  18. package/lib/schemas/organization.schema.d.ts.map +0 -1
  19. package/lib/schemas/organization.schema.js +0 -7
  20. package/lib/schemas/permission.schema.d.ts +0 -104
  21. package/lib/schemas/permission.schema.d.ts.map +0 -1
  22. package/lib/schemas/permission.schema.js +0 -7
  23. package/lib/schemas/role.schema.d.ts +0 -163
  24. package/lib/schemas/role.schema.d.ts.map +0 -1
  25. package/lib/schemas/role.schema.js +0 -7
  26. package/lib/schemas/typebox/organization.schema.d.ts +0 -382
  27. package/lib/schemas/typebox/organization.schema.d.ts.map +0 -1
  28. package/lib/schemas/typebox/organization.schema.js +0 -44
  29. package/lib/schemas/typebox/permission.schema.d.ts +0 -123
  30. package/lib/schemas/typebox/permission.schema.d.ts.map +0 -1
  31. package/lib/schemas/typebox/permission.schema.js +0 -32
  32. package/lib/schemas/typebox/role.schema.d.ts +0 -183
  33. package/lib/schemas/typebox/role.schema.d.ts.map +0 -1
  34. package/lib/schemas/typebox/role.schema.js +0 -33
  35. package/lib/schemas/typebox/user.schema.d.ts +0 -315
  36. package/lib/schemas/typebox/user.schema.d.ts.map +0 -1
  37. package/lib/schemas/typebox/user.schema.js +0 -49
  38. package/lib/schemas/user.schema.d.ts +0 -298
  39. package/lib/schemas/user.schema.d.ts.map +0 -1
  40. package/lib/schemas/user.schema.js +0 -7
  41. package/lib/schemas/zod/organization.schema.d.ts +0 -418
  42. package/lib/schemas/zod/organization.schema.d.ts.map +0 -1
  43. package/lib/schemas/zod/organization.schema.js +0 -44
  44. package/lib/schemas/zod/permission.schema.d.ts +0 -71
  45. package/lib/schemas/zod/permission.schema.d.ts.map +0 -1
  46. package/lib/schemas/zod/permission.schema.js +0 -32
  47. package/lib/schemas/zod/role.schema.d.ts +0 -129
  48. package/lib/schemas/zod/role.schema.d.ts.map +0 -1
  49. package/lib/schemas/zod/role.schema.js +0 -33
  50. package/lib/schemas/zod/user.schema.d.ts +0 -249
  51. package/lib/schemas/zod/user.schema.d.ts.map +0 -1
  52. package/lib/schemas/zod/user.schema.js +0 -49
  53. package/lib/services/index.d.ts.map +0 -1
  54. package/lib/services/organization.service.d.ts +0 -123
  55. package/lib/services/organization.service.d.ts.map +0 -1
  56. package/lib/services/organization.service.js +0 -88
  57. package/lib/services/permission.service.d.ts +0 -149
  58. package/lib/services/permission.service.d.ts.map +0 -1
  59. package/lib/services/permission.service.js +0 -264
  60. package/lib/services/role.service.d.ts +0 -123
  61. package/lib/services/role.service.d.ts.map +0 -1
  62. package/lib/services/role.service.js +0 -139
  63. package/lib/services/user.service.d.ts +0 -134
  64. package/lib/services/user.service.d.ts.map +0 -1
  65. package/lib/services/user.service.js +0 -185
  66. package/lib/tsconfig.tsbuildinfo +0 -1
  67. package/lib/vitest.config.d.ts +0 -3
  68. package/lib/vitest.config.d.ts.map +0 -1
  69. package/lib/vitest.config.js +0 -7
@@ -1,149 +0,0 @@
1
- import {
2
- PermissionService,
3
- RoleService
4
- } from '@forklaunch/interfaces-iam/interfaces';
5
- import { IdDto, IdsDto } from '@forklaunch/common';
6
- import {
7
- MetricsDefinition,
8
- OpenTelemetryCollector,
9
- TelemetryOptions
10
- } from '@forklaunch/core/http';
11
- import {
12
- RequestDtoMapperConstructor,
13
- ResponseDtoMapperConstructor
14
- } from '@forklaunch/core/mappers';
15
- import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
16
- import {
17
- CreatePermissionDto,
18
- PermissionDto,
19
- UpdatePermissionDto,
20
- UpdateRoleDto
21
- } from '@forklaunch/interfaces-iam/types';
22
- import { AnySchemaValidator } from '@forklaunch/validator';
23
- import { EntityManager } from '@mikro-orm/core';
24
- export declare class BasePermissionService<
25
- SchemaValidator extends AnySchemaValidator,
26
- Metrics extends MetricsDefinition = MetricsDefinition,
27
- Dto extends {
28
- PermissionDtoMapper: PermissionDto;
29
- CreatePermissionDtoMapper: CreatePermissionDto;
30
- UpdatePermissionDtoMapper: UpdatePermissionDto;
31
- RoleEntityMapper: UpdateRoleDto;
32
- } = {
33
- PermissionDtoMapper: PermissionDto;
34
- CreatePermissionDtoMapper: CreatePermissionDto;
35
- UpdatePermissionDtoMapper: UpdatePermissionDto;
36
- RoleEntityMapper: UpdateRoleDto;
37
- },
38
- Entities extends {
39
- PermissionDtoMapper: PermissionDto;
40
- CreatePermissionDtoMapper: PermissionDto;
41
- UpdatePermissionDtoMapper: PermissionDto;
42
- RoleEntityMapper: MapNestedDtoArraysToCollections<
43
- UpdateRoleDto,
44
- 'permissions'
45
- >;
46
- } = {
47
- PermissionDtoMapper: PermissionDto;
48
- CreatePermissionDtoMapper: PermissionDto;
49
- UpdatePermissionDtoMapper: PermissionDto;
50
- RoleEntityMapper: MapNestedDtoArraysToCollections<
51
- UpdateRoleDto,
52
- 'permissions'
53
- >;
54
- }
55
- > implements PermissionService
56
- {
57
- #private;
58
- em: EntityManager;
59
- protected roleServiceFactory: () => RoleService;
60
- protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
61
- protected schemaValidator: SchemaValidator;
62
- protected mappers: {
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
- RoleEntityMapper: RequestDtoMapperConstructor<
79
- SchemaValidator,
80
- Dto['RoleEntityMapper'],
81
- Entities['RoleEntityMapper']
82
- >;
83
- };
84
- private evaluatedTelemetryOptions;
85
- constructor(
86
- em: EntityManager,
87
- roleServiceFactory: () => RoleService,
88
- openTelemetryCollector: OpenTelemetryCollector<Metrics>,
89
- schemaValidator: SchemaValidator,
90
- mappers: {
91
- PermissionDtoMapper: ResponseDtoMapperConstructor<
92
- SchemaValidator,
93
- Dto['PermissionDtoMapper'],
94
- Entities['PermissionDtoMapper']
95
- >;
96
- CreatePermissionDtoMapper: RequestDtoMapperConstructor<
97
- SchemaValidator,
98
- Dto['CreatePermissionDtoMapper'],
99
- Entities['CreatePermissionDtoMapper']
100
- >;
101
- UpdatePermissionDtoMapper: RequestDtoMapperConstructor<
102
- SchemaValidator,
103
- Dto['UpdatePermissionDtoMapper'],
104
- Entities['UpdatePermissionDtoMapper']
105
- >;
106
- RoleEntityMapper: RequestDtoMapperConstructor<
107
- SchemaValidator,
108
- Dto['RoleEntityMapper'],
109
- Entities['RoleEntityMapper']
110
- >;
111
- },
112
- options?: {
113
- telemetry?: TelemetryOptions;
114
- }
115
- );
116
- private updateRolesWithPermissions;
117
- private removePermissionsFromRoles;
118
- private getBatchRoles;
119
- private createPermissionDto;
120
- private extractCreatePermissionDtoToEntityData;
121
- createPermission(
122
- createPermissionDto: Dto['CreatePermissionDtoMapper'],
123
- em?: EntityManager
124
- ): Promise<Dto['PermissionDtoMapper']>;
125
- createBatchPermissions(
126
- permissionDtos: Dto['CreatePermissionDtoMapper'][],
127
- em?: EntityManager
128
- ): Promise<Dto['PermissionDtoMapper'][]>;
129
- getPermission(
130
- idDto: IdDto,
131
- em?: EntityManager
132
- ): Promise<Dto['PermissionDtoMapper']>;
133
- getBatchPermissions(
134
- idsDto: IdsDto,
135
- em?: EntityManager
136
- ): Promise<Dto['PermissionDtoMapper'][]>;
137
- private updatePermissionDto;
138
- updatePermission(
139
- permissionDto: Dto['UpdatePermissionDtoMapper'],
140
- em?: EntityManager
141
- ): Promise<Dto['PermissionDtoMapper']>;
142
- updateBatchPermissions(
143
- permissionDtos: Dto['UpdatePermissionDtoMapper'][],
144
- em?: EntityManager
145
- ): Promise<Dto['PermissionDtoMapper'][]>;
146
- deletePermission(idDto: IdDto, em?: EntityManager): Promise<void>;
147
- deleteBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<void>;
148
- }
149
- //# sourceMappingURL=permission.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"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"}
@@ -1,264 +0,0 @@
1
- import { evaluateTelemetryOptions } from '@forklaunch/core/http';
2
- import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
3
- export class BasePermissionService {
4
- em;
5
- roleServiceFactory;
6
- openTelemetryCollector;
7
- schemaValidator;
8
- mappers;
9
- #mappers;
10
- evaluatedTelemetryOptions;
11
- constructor(
12
- em,
13
- roleServiceFactory,
14
- openTelemetryCollector,
15
- schemaValidator,
16
- mappers,
17
- options
18
- ) {
19
- this.em = em;
20
- this.roleServiceFactory = roleServiceFactory;
21
- this.openTelemetryCollector = openTelemetryCollector;
22
- this.schemaValidator = schemaValidator;
23
- this.mappers = mappers;
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
- };
32
- }
33
- // start: global helper functions
34
- async updateRolesWithPermissions(roles, permissions) {
35
- return Promise.all(
36
- roles.map(async (role) => {
37
- permissions.forEach((permission) => role.permissions.add(permission));
38
- return role;
39
- })
40
- );
41
- }
42
- async removePermissionsFromRoles(roles, permissions) {
43
- return Promise.all(
44
- roles.map(async (role) => {
45
- permissions.forEach((permission) =>
46
- role.permissions.remove(permission)
47
- );
48
- return role;
49
- })
50
- );
51
- }
52
- async getBatchRoles(roleIds, em) {
53
- return roleIds
54
- ? await Promise.all(
55
- (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
56
- async (role) => {
57
- return (em ?? this.em).merge(
58
- await this.#mappers.RoleEntityMapper.deserializeDtoToEntity(
59
- role,
60
- em ?? this.em
61
- )
62
- );
63
- }
64
- )
65
- )
66
- : [];
67
- }
68
- // end: global helper functions
69
- // start: createPermission helper functions
70
- async createPermissionDto({ permission, addToRoles }) {
71
- let roles = [];
72
- if (addToRoles) {
73
- roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
74
- }
75
- return { permission, roles };
76
- }
77
- async extractCreatePermissionDtoToEntityData(permissionDto, em) {
78
- return {
79
- permission: (em ?? this.em).merge(
80
- await this.#mappers.CreatePermissionDtoMapper.deserializeDtoToEntity(
81
- permissionDto,
82
- em ?? this.em
83
- )
84
- ),
85
- addToRoles: permissionDto.addToRolesIds
86
- ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
87
- : []
88
- };
89
- }
90
- // end: createPermission helper functions
91
- async createPermission(createPermissionDto, em) {
92
- if (this.evaluatedTelemetryOptions.logging) {
93
- this.openTelemetryCollector.info(
94
- 'Creating permission',
95
- createPermissionDto
96
- );
97
- }
98
- const { permission, roles } = await this.createPermissionDto(
99
- await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em)
100
- );
101
- if (em) {
102
- await em.persist([permission, ...roles]);
103
- } else {
104
- await this.em.persistAndFlush([permission, ...roles]);
105
- }
106
- return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
107
- }
108
- async createBatchPermissions(permissionDtos, em) {
109
- if (this.evaluatedTelemetryOptions.logging) {
110
- this.openTelemetryCollector.info(
111
- 'Creating batch permissions',
112
- permissionDtos
113
- );
114
- }
115
- const rolesCache = {};
116
- const permissions = [];
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
- }
137
- });
138
- permissions.push(permission);
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
- }
146
- return Promise.all(
147
- permissions.map(async (permission) =>
148
- this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
149
- )
150
- );
151
- }
152
- async getPermission(idDto, em) {
153
- if (this.evaluatedTelemetryOptions.logging) {
154
- this.openTelemetryCollector.info('Getting permission', idDto);
155
- }
156
- const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
157
- return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
158
- }
159
- async getBatchPermissions(idsDto, em) {
160
- if (this.evaluatedTelemetryOptions.logging) {
161
- this.openTelemetryCollector.info('Getting batch permissions', idsDto);
162
- }
163
- return Promise.all(
164
- (await (em ?? this.em).find('Permission', idsDto)).map((permission) =>
165
- this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
166
- )
167
- );
168
- }
169
- // start: updatePermission helper functions
170
- updatePermissionDto = async (permissionDto, em) => {
171
- const permission =
172
- await this.#mappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(
173
- permissionDto,
174
- em ?? this.em
175
- );
176
- const addToRoles = permissionDto.addToRolesIds
177
- ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
178
- : [];
179
- const removeFromRoles = permissionDto.removeFromRolesIds
180
- ? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
181
- : [];
182
- let roles = [];
183
- roles = roles.concat(
184
- await this.updateRolesWithPermissions(addToRoles, [permission])
185
- );
186
- roles = roles.concat(
187
- await this.removePermissionsFromRoles(removeFromRoles, [permission])
188
- );
189
- return {
190
- permission,
191
- roles
192
- };
193
- };
194
- // end: updatePermission helper functions
195
- async updatePermission(permissionDto, em) {
196
- if (this.evaluatedTelemetryOptions.logging) {
197
- this.openTelemetryCollector.info('Updating permission', permissionDto);
198
- }
199
- const { permission, roles } = await this.updatePermissionDto(permissionDto);
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);
205
- }
206
- return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
207
- }
208
- async updateBatchPermissions(permissionDtos, em) {
209
- if (this.evaluatedTelemetryOptions.logging) {
210
- this.openTelemetryCollector.info(
211
- 'Updating batch permissions',
212
- permissionDtos
213
- );
214
- }
215
- const rolesCache = {};
216
- const permissions = [];
217
- await (em ?? this.em).transactional(async (em) => {
218
- permissionDtos.map(async (updatePermissionDto) => {
219
- const { permission, roles } =
220
- await this.updatePermissionDto(updatePermissionDto);
221
- roles.forEach((role) => {
222
- if (
223
- rolesCache[role.id] &&
224
- role.permissions !== rolesCache[role.id].permissions
225
- ) {
226
- role.permissions.getItems().forEach((permission) => {
227
- if (!rolesCache[role.id].permissions.contains(permission)) {
228
- rolesCache[role.id].permissions.add(permission);
229
- }
230
- });
231
- } else {
232
- rolesCache[role.id] = role;
233
- }
234
- });
235
- permissions.push(permission);
236
- });
237
- const entities = [...permissions, ...Object.values(rolesCache)];
238
- if (em) {
239
- await em.persist(entities);
240
- } else {
241
- await this.em.persistAndFlush(entities);
242
- }
243
- });
244
- return Promise.all(
245
- permissions.map((permission) =>
246
- this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
247
- )
248
- );
249
- }
250
- async deletePermission(idDto, em) {
251
- if (this.evaluatedTelemetryOptions.logging) {
252
- this.openTelemetryCollector.info('Deleting permission', idDto);
253
- }
254
- await (em ?? this.em).nativeDelete('Permission', idDto);
255
- }
256
- async deleteBatchPermissions(idsDto, em) {
257
- if (this.evaluatedTelemetryOptions.logging) {
258
- this.openTelemetryCollector.info('Deleting batch permissions', idsDto);
259
- }
260
- await (em ?? this.em).nativeDelete('Permission', {
261
- id: { $in: idsDto.ids }
262
- });
263
- }
264
- }
@@ -1,123 +0,0 @@
1
- import {
2
- MetricsDefinition,
3
- OpenTelemetryCollector,
4
- TelemetryOptions
5
- } from '@forklaunch/core/http';
6
- import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
7
- import { EntityManager } from '@mikro-orm/core';
8
- import { IdDto, IdsDto } from '@forklaunch/common';
9
- import {
10
- RequestDtoMapperConstructor,
11
- ResponseDtoMapperConstructor
12
- } from '@forklaunch/core/mappers';
13
- import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
14
- import {
15
- CreateRoleDto,
16
- RoleDto,
17
- UpdateRoleDto
18
- } from '@forklaunch/interfaces-iam/types';
19
- import { AnySchemaValidator } from '@forklaunch/validator';
20
- export declare class BaseRoleService<
21
- SchemaValidator extends AnySchemaValidator,
22
- Metrics extends MetricsDefinition = MetricsDefinition,
23
- Dto extends {
24
- RoleDtoMapper: RoleDto;
25
- CreateRoleDtoMapper: CreateRoleDto;
26
- UpdateRoleDtoMapper: UpdateRoleDto;
27
- } = {
28
- RoleDtoMapper: RoleDto;
29
- CreateRoleDtoMapper: CreateRoleDto;
30
- UpdateRoleDtoMapper: UpdateRoleDto;
31
- },
32
- Entities extends {
33
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
34
- CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
35
- RoleDto,
36
- 'permissions'
37
- >;
38
- UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
39
- RoleDto,
40
- 'permissions'
41
- >;
42
- } = {
43
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
44
- CreateRoleDtoMapper: MapNestedDtoArraysToCollections<
45
- RoleDto,
46
- 'permissions'
47
- >;
48
- UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<
49
- RoleDto,
50
- 'permissions'
51
- >;
52
- }
53
- > implements RoleService
54
- {
55
- #private;
56
- em: EntityManager;
57
- protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
58
- protected schemaValidator: SchemaValidator;
59
- protected mappers: {
60
- RoleDtoMapper: ResponseDtoMapperConstructor<
61
- SchemaValidator,
62
- Dto['RoleDtoMapper'],
63
- Entities['RoleDtoMapper']
64
- >;
65
- CreateRoleDtoMapper: RequestDtoMapperConstructor<
66
- SchemaValidator,
67
- Dto['CreateRoleDtoMapper'],
68
- Entities['CreateRoleDtoMapper']
69
- >;
70
- UpdateRoleDtoMapper: RequestDtoMapperConstructor<
71
- SchemaValidator,
72
- Dto['UpdateRoleDtoMapper'],
73
- Entities['UpdateRoleDtoMapper']
74
- >;
75
- };
76
- private evaluatedTelemetryOptions;
77
- constructor(
78
- em: EntityManager,
79
- openTelemetryCollector: OpenTelemetryCollector<Metrics>,
80
- schemaValidator: SchemaValidator,
81
- mappers: {
82
- RoleDtoMapper: ResponseDtoMapperConstructor<
83
- SchemaValidator,
84
- Dto['RoleDtoMapper'],
85
- Entities['RoleDtoMapper']
86
- >;
87
- CreateRoleDtoMapper: RequestDtoMapperConstructor<
88
- SchemaValidator,
89
- Dto['CreateRoleDtoMapper'],
90
- Entities['CreateRoleDtoMapper']
91
- >;
92
- UpdateRoleDtoMapper: RequestDtoMapperConstructor<
93
- SchemaValidator,
94
- Dto['UpdateRoleDtoMapper'],
95
- Entities['UpdateRoleDtoMapper']
96
- >;
97
- },
98
- options?: {
99
- telemetry?: TelemetryOptions;
100
- }
101
- );
102
- createRole(
103
- roleDto: Dto['CreateRoleDtoMapper'],
104
- em?: EntityManager
105
- ): Promise<Dto['RoleDtoMapper']>;
106
- createBatchRoles(
107
- roleDtos: Dto['CreateRoleDtoMapper'][],
108
- em?: EntityManager
109
- ): Promise<Dto['RoleDtoMapper'][]>;
110
- getRole({ id }: IdDto, em?: EntityManager): Promise<RoleDto>;
111
- getBatchRoles({ ids }: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
112
- updateRole(
113
- roleDto: Dto['UpdateRoleDtoMapper'],
114
- em?: EntityManager
115
- ): Promise<Dto['RoleDtoMapper']>;
116
- updateBatchRoles(
117
- roleDtos: Dto['UpdateRoleDtoMapper'][],
118
- em?: EntityManager
119
- ): Promise<Dto['RoleDtoMapper'][]>;
120
- deleteRole(idDto: IdDto, em?: EntityManager): Promise<void>;
121
- deleteBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<void>;
122
- }
123
- //# sourceMappingURL=role.service.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}
@@ -1,139 +0,0 @@
1
- import { evaluateTelemetryOptions } from '@forklaunch/core/http';
2
- import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
3
- export class BaseRoleService {
4
- em;
5
- openTelemetryCollector;
6
- schemaValidator;
7
- mappers;
8
- #mappers;
9
- evaluatedTelemetryOptions;
10
- constructor(em, openTelemetryCollector, schemaValidator, mappers, options) {
11
- this.em = em;
12
- this.openTelemetryCollector = openTelemetryCollector;
13
- this.schemaValidator = schemaValidator;
14
- this.mappers = mappers;
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
- };
23
- }
24
- async createRole(roleDto, em) {
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
- }
37
- return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
38
- }
39
- async createBatchRoles(roleDtos, em) {
40
- if (this.evaluatedTelemetryOptions.logging) {
41
- this.openTelemetryCollector.info('Creating batch roles', roleDtos);
42
- }
43
- const roles = await Promise.all(
44
- roleDtos.map(async (roleDto) =>
45
- this.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
46
- roleDto,
47
- em ?? this.em
48
- )
49
- )
50
- );
51
- if (em) {
52
- await em.persist(roles);
53
- } else {
54
- await this.em.persistAndFlush(roles);
55
- }
56
- return Promise.all(
57
- roles.map((role) =>
58
- this.#mappers.RoleDtoMapper.serializeEntityToDto(role)
59
- )
60
- );
61
- }
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, {
67
- populate: ['id', '*']
68
- });
69
- return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
70
- }
71
- async getBatchRoles({ ids }, em) {
72
- if (this.evaluatedTelemetryOptions.logging) {
73
- this.openTelemetryCollector.info('Getting batch roles', { ids });
74
- }
75
- return Promise.all(
76
- (
77
- await (em ?? this.em).find(
78
- 'Role',
79
- {
80
- id: { $in: ids }
81
- },
82
- {
83
- populate: ['id', '*']
84
- }
85
- )
86
- ).map((role) => this.#mappers.RoleDtoMapper.serializeEntityToDto(role))
87
- );
88
- }
89
- async updateRole(roleDto, em) {
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
- }
102
- return this.#mappers.RoleDtoMapper.serializeEntityToDto(role);
103
- }
104
- async updateBatchRoles(roleDtos, em) {
105
- if (this.evaluatedTelemetryOptions.logging) {
106
- this.openTelemetryCollector.info('Updating batch roles', roleDtos);
107
- }
108
- const roles = await Promise.all(
109
- roleDtos.map(async (roleDto) =>
110
- this.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
111
- roleDto,
112
- em ?? this.em
113
- )
114
- )
115
- );
116
- if (em) {
117
- await em.persist(roles);
118
- } else {
119
- await this.em.persistAndFlush(roles);
120
- }
121
- return Promise.all(
122
- roles.map((role) =>
123
- this.#mappers.RoleDtoMapper.serializeEntityToDto(role)
124
- )
125
- );
126
- }
127
- async deleteRole(idDto, em) {
128
- if (this.evaluatedTelemetryOptions.logging) {
129
- this.openTelemetryCollector.info('Deleting role', idDto);
130
- }
131
- await (em ?? this.em).nativeDelete('Role', idDto);
132
- }
133
- async deleteBatchRoles(idsDto, em) {
134
- if (this.evaluatedTelemetryOptions.logging) {
135
- this.openTelemetryCollector.info('Deleting batch roles', idsDto);
136
- }
137
- await (em ?? this.em).nativeDelete('Role', { id: { $in: idsDto.ids } });
138
- }
139
- }