@forklaunch/implementation-iam-base 0.5.8 → 0.6.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.
@@ -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