@forklaunch/implementation-iam-base 0.3.1 → 0.3.3

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.
@@ -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
- InternalDtoMapper,
13
- RequestDtoMapperConstructor,
14
- ResponseDtoMapperConstructor,
15
- transformIntoInternalDtoMapper
16
- } from '@forklaunch/core/mappers';
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 '../domain/types/iamDto.types';
20
+ import { RoleEntities } from '../domain/types/iamEntities.types';
24
21
 
25
22
  export class BaseRoleService<
26
23
  SchemaValidator extends AnySchemaValidator,
27
- Metrics extends MetricsDefinition = MetricsDefinition,
28
- Dto extends {
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
- #mappers: InternalDtoMapper<
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<Metrics>,
37
+ protected openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>,
74
38
  protected schemaValidator: SchemaValidator,
75
39
  protected mappers: {
76
- RoleDtoMapper: ResponseDtoMapperConstructor<
40
+ RoleMapper: ResponseMapperConstructor<
77
41
  SchemaValidator,
78
- Dto['RoleDtoMapper'],
79
- Entities['RoleDtoMapper']
42
+ MapperDto['RoleMapper'],
43
+ MapperEntities['RoleMapper']
80
44
  >;
81
- CreateRoleDtoMapper: RequestDtoMapperConstructor<
45
+ CreateRoleMapper: RequestMapperConstructor<
82
46
  SchemaValidator,
83
- Dto['CreateRoleDtoMapper'],
84
- Entities['CreateRoleDtoMapper']
47
+ MapperDto['CreateRoleMapper'],
48
+ MapperEntities['CreateRoleMapper'],
49
+ (
50
+ dto: MapperDto['CreateRoleMapper'],
51
+ em: EntityManager
52
+ ) => Promise<MapperEntities['CreateRoleMapper']>
85
53
  >;
86
- UpdateRoleDtoMapper: RequestDtoMapperConstructor<
54
+ UpdateRoleMapper: RequestMapperConstructor<
87
55
  SchemaValidator,
88
- Dto['UpdateRoleDtoMapper'],
89
- Entities['UpdateRoleDtoMapper']
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.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
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: Dto['CreateRoleDtoMapper'],
79
+ roleDto: MapperDto['CreateRoleMapper'],
108
80
  em?: EntityManager
109
- ): Promise<Dto['RoleDtoMapper']> {
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.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
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.#mappers.RoleDtoMapper.serializeEntityToDto(role);
96
+ return this._mappers.RoleMapper.serializeEntityToDto(role);
125
97
  }
126
98
 
127
99
  async createBatchRoles(
128
- roleDtos: Dto['CreateRoleDtoMapper'][],
100
+ roleDtos: MapperDto['CreateRoleMapper'][],
129
101
  em?: EntityManager
130
- ): Promise<Dto['RoleDtoMapper'][]> {
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.#mappers.CreateRoleDtoMapper.deserializeDtoToEntity(
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.#mappers.RoleDtoMapper.serializeEntityToDto(
167
- role as Entities['RoleDtoMapper']
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.#mappers.RoleDtoMapper.serializeEntityToDto(
189
- role as Entities['RoleDtoMapper']
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: Dto['UpdateRoleDtoMapper'],
166
+ roleDto: MapperDto['UpdateRoleMapper'],
197
167
  em?: EntityManager
198
- ): Promise<Dto['RoleDtoMapper']> {
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.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
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.#mappers.RoleDtoMapper.serializeEntityToDto(role);
184
+ return this._mappers.RoleMapper.serializeEntityToDto(role);
215
185
  }
216
186
 
217
187
  async updateBatchRoles(
218
- roleDtos: Dto['UpdateRoleDtoMapper'][],
188
+ roleDtos: MapperDto['UpdateRoleMapper'][],
219
189
  em?: EntityManager
220
- ): Promise<Dto['RoleDtoMapper'][]> {
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.#mappers.UpdateRoleDtoMapper.deserializeDtoToEntity(
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.#mappers.RoleDtoMapper.serializeEntityToDto(
242
- role as Entities['RoleDtoMapper']
211
+ this._mappers.RoleMapper.serializeEntityToDto(
212
+ role as MapperEntities['RoleMapper']
243
213
  )
244
214
  )
245
215
  );
@@ -11,50 +11,26 @@ import {
11
11
  OpenTelemetryCollector,
12
12
  TelemetryOptions
13
13
  } from '@forklaunch/core/http';
14
+ import { UpdateUserDto } from '@forklaunch/interfaces-iam/types';
14
15
  import {
15
- InternalDtoMapper,
16
- RequestDtoMapperConstructor,
17
- ResponseDtoMapperConstructor,
18
- transformIntoInternalDtoMapper
19
- } from '@forklaunch/core/mappers';
20
- import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
21
- import {
22
- CreateUserDto,
23
- UpdateUserDto,
24
- UserDto
25
- } from '@forklaunch/interfaces-iam/types';
16
+ InternalMapper,
17
+ RequestMapperConstructor,
18
+ ResponseMapperConstructor,
19
+ transformIntoInternalMapper
20
+ } from '@forklaunch/internal';
26
21
  import { AnySchemaValidator } from '@forklaunch/validator';
27
22
  import { EntityManager } from '@mikro-orm/core';
23
+ import { UserDtos } from '../domain/types/iamDto.types';
24
+ import { UserEntities } from '../domain/types/iamEntities.types';
28
25
 
29
26
  export class BaseUserService<
30
27
  SchemaValidator extends AnySchemaValidator,
31
28
  OrganizationStatus,
32
- Metrics extends MetricsDefinition = MetricsDefinition,
33
- Dto extends {
34
- UserDtoMapper: UserDto;
35
- CreateUserDtoMapper: CreateUserDto;
36
- UpdateUserDtoMapper: UpdateUserDto;
37
- } = {
38
- UserDtoMapper: UserDto;
39
- CreateUserDtoMapper: CreateUserDto;
40
- UpdateUserDtoMapper: UpdateUserDto;
41
- },
42
- Entities extends {
43
- UserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
44
- CreateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
45
- UpdateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
46
- } = {
47
- UserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
48
- CreateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
49
- UpdateUserDtoMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
50
- }
29
+ Entities extends UserEntities,
30
+ Dto extends UserDtos = UserDtos
51
31
  > implements UserService
52
32
  {
53
- #mappers: InternalDtoMapper<
54
- InstanceTypeRecord<typeof this.mappers>,
55
- Entities,
56
- Dto
57
- >;
33
+ protected _mappers: InternalMapper<InstanceTypeRecord<typeof this.mappers>>;
58
34
  private evaluatedTelemetryOptions: {
59
35
  logging?: boolean;
60
36
  metrics?: boolean;
@@ -66,30 +42,38 @@ export class BaseUserService<
66
42
  protected passwordEncryptionPublicKeyPath: string,
67
43
  protected roleServiceFactory: () => RoleService,
68
44
  protected organizationServiceFactory: () => OrganizationService<OrganizationStatus>,
69
- protected openTelemetryCollector: OpenTelemetryCollector<Metrics>,
45
+ protected openTelemetryCollector: OpenTelemetryCollector<MetricsDefinition>,
70
46
  protected schemaValidator: SchemaValidator,
71
47
  protected mappers: {
72
- UserDtoMapper: ResponseDtoMapperConstructor<
48
+ UserMapper: ResponseMapperConstructor<
73
49
  SchemaValidator,
74
- Dto['UserDtoMapper'],
75
- Entities['UserDtoMapper']
50
+ Dto['UserMapper'],
51
+ Entities['UserMapper']
76
52
  >;
77
- CreateUserDtoMapper: RequestDtoMapperConstructor<
53
+ CreateUserMapper: RequestMapperConstructor<
78
54
  SchemaValidator,
79
- Dto['CreateUserDtoMapper'],
80
- Entities['CreateUserDtoMapper']
55
+ Dto['CreateUserMapper'],
56
+ Entities['CreateUserMapper'],
57
+ (
58
+ dto: Dto['CreateUserMapper'],
59
+ em: EntityManager
60
+ ) => Promise<Entities['CreateUserMapper']>
81
61
  >;
82
- UpdateUserDtoMapper: RequestDtoMapperConstructor<
62
+ UpdateUserMapper: RequestMapperConstructor<
83
63
  SchemaValidator,
84
- Dto['UpdateUserDtoMapper'],
85
- Entities['UpdateUserDtoMapper']
64
+ Dto['UpdateUserMapper'],
65
+ Entities['UpdateUserMapper'],
66
+ (
67
+ dto: Dto['UpdateUserMapper'],
68
+ em: EntityManager
69
+ ) => Promise<Entities['UpdateUserMapper']>
86
70
  >;
87
71
  },
88
72
  readonly options?: {
89
73
  telemetry?: TelemetryOptions;
90
74
  }
91
75
  ) {
92
- this.#mappers = transformIntoInternalDtoMapper(mappers, schemaValidator);
76
+ this._mappers = transformIntoInternalMapper(mappers, schemaValidator);
93
77
  this.evaluatedTelemetryOptions = options?.telemetry
94
78
  ? evaluateTelemetryOptions(options.telemetry).enabled
95
79
  : {
@@ -100,14 +84,14 @@ export class BaseUserService<
100
84
  }
101
85
 
102
86
  async createUser(
103
- userDto: Dto['CreateUserDtoMapper'],
87
+ userDto: Dto['CreateUserMapper'],
104
88
  em?: EntityManager
105
- ): Promise<Dto['UserDtoMapper']> {
89
+ ): Promise<Dto['UserMapper']> {
106
90
  if (this.evaluatedTelemetryOptions.logging) {
107
91
  this.openTelemetryCollector.info('Creating user', userDto);
108
92
  }
109
93
 
110
- const user = await this.#mappers.CreateUserDtoMapper.deserializeDtoToEntity(
94
+ const user = await this._mappers.CreateUserMapper.deserializeDtoToEntity(
111
95
  userDto,
112
96
  em ?? this.em
113
97
  );
@@ -118,20 +102,20 @@ export class BaseUserService<
118
102
  await this.em.persistAndFlush(user);
119
103
  }
120
104
 
121
- return this.#mappers.UserDtoMapper.serializeEntityToDto(user);
105
+ return this._mappers.UserMapper.serializeEntityToDto(user);
122
106
  }
123
107
 
124
108
  async createBatchUsers(
125
- userDtos: Dto['CreateUserDtoMapper'][],
109
+ userDtos: Dto['CreateUserMapper'][],
126
110
  em?: EntityManager
127
- ): Promise<Dto['UserDtoMapper'][]> {
111
+ ): Promise<Dto['UserMapper'][]> {
128
112
  if (this.evaluatedTelemetryOptions.logging) {
129
113
  this.openTelemetryCollector.info('Creating batch users', userDtos);
130
114
  }
131
115
 
132
116
  const users = await Promise.all(
133
117
  userDtos.map(async (createUserDto) =>
134
- this.#mappers.CreateUserDtoMapper.deserializeDtoToEntity(
118
+ this._mappers.CreateUserMapper.deserializeDtoToEntity(
135
119
  createUserDto,
136
120
  em ?? this.em
137
121
  )
@@ -145,16 +129,11 @@ export class BaseUserService<
145
129
  }
146
130
 
147
131
  return Promise.all(
148
- users.map((user) =>
149
- this.#mappers.UserDtoMapper.serializeEntityToDto(user)
150
- )
132
+ users.map((user) => this._mappers.UserMapper.serializeEntityToDto(user))
151
133
  );
152
134
  }
153
135
 
154
- async getUser(
155
- idDto: IdDto,
156
- em?: EntityManager
157
- ): Promise<Dto['UserDtoMapper']> {
136
+ async getUser(idDto: IdDto, em?: EntityManager): Promise<Dto['UserMapper']> {
158
137
  if (this.evaluatedTelemetryOptions.logging) {
159
138
  this.openTelemetryCollector.info('Getting user', idDto);
160
139
  }
@@ -163,15 +142,15 @@ export class BaseUserService<
163
142
  populate: ['id', '*']
164
143
  });
165
144
 
166
- return this.#mappers.UserDtoMapper.serializeEntityToDto(
167
- user as Entities['UserDtoMapper']
145
+ return this._mappers.UserMapper.serializeEntityToDto(
146
+ user as Entities['UserMapper']
168
147
  );
169
148
  }
170
149
 
171
150
  async getBatchUsers(
172
151
  idsDto: IdsDto,
173
152
  em?: EntityManager
174
- ): Promise<Dto['UserDtoMapper'][]> {
153
+ ): Promise<Dto['UserMapper'][]> {
175
154
  if (this.evaluatedTelemetryOptions.logging) {
176
155
  this.openTelemetryCollector.info('Getting batch users', idsDto);
177
156
  }
@@ -182,22 +161,22 @@ export class BaseUserService<
182
161
  populate: ['id', '*']
183
162
  })
184
163
  ).map((user) =>
185
- this.#mappers.UserDtoMapper.serializeEntityToDto(
186
- user as Entities['UserDtoMapper']
164
+ this._mappers.UserMapper.serializeEntityToDto(
165
+ user as Entities['UserMapper']
187
166
  )
188
167
  )
189
168
  );
190
169
  }
191
170
 
192
171
  async updateUser(
193
- userDto: Dto['UpdateUserDtoMapper'],
172
+ userDto: Dto['UpdateUserMapper'],
194
173
  em?: EntityManager
195
- ): Promise<Dto['UserDtoMapper']> {
174
+ ): Promise<Dto['UserMapper']> {
196
175
  if (this.evaluatedTelemetryOptions.logging) {
197
176
  this.openTelemetryCollector.info('Updating user', userDto);
198
177
  }
199
178
 
200
- const user = await this.#mappers.UpdateUserDtoMapper.deserializeDtoToEntity(
179
+ const user = await this._mappers.UpdateUserMapper.deserializeDtoToEntity(
201
180
  userDto,
202
181
  em ?? this.em
203
182
  );
@@ -208,20 +187,20 @@ export class BaseUserService<
208
187
  await this.em.persistAndFlush(user);
209
188
  }
210
189
 
211
- return this.#mappers.UserDtoMapper.serializeEntityToDto(user);
190
+ return this._mappers.UserMapper.serializeEntityToDto(user);
212
191
  }
213
192
 
214
193
  async updateBatchUsers(
215
194
  userDtos: UpdateUserDto[],
216
195
  em?: EntityManager
217
- ): Promise<Dto['UserDtoMapper'][]> {
196
+ ): Promise<Dto['UserMapper'][]> {
218
197
  if (this.evaluatedTelemetryOptions.logging) {
219
198
  this.openTelemetryCollector.info('Updating batch users', userDtos);
220
199
  }
221
200
 
222
201
  const users = await Promise.all(
223
202
  userDtos.map(async (updateUserDto) =>
224
- this.#mappers.UpdateUserDtoMapper.deserializeDtoToEntity(
203
+ this._mappers.UpdateUserMapper.deserializeDtoToEntity(
225
204
  updateUserDto,
226
205
  em ?? this.em
227
206
  )
@@ -235,9 +214,7 @@ export class BaseUserService<
235
214
  }
236
215
 
237
216
  return Promise.all(
238
- users.map((user) =>
239
- this.#mappers.UserDtoMapper.serializeEntityToDto(user)
240
- )
217
+ users.map((user) => this._mappers.UserMapper.serializeEntityToDto(user))
241
218
  );
242
219
  }
243
220