@forklaunch/implementation-iam-base 0.5.8 → 0.6.0

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