@forklaunch/implementation-iam-base 0.3.0 → 0.3.2

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.
@@ -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 '../types/iamDto.types';
24
+ import { UserEntities } from '../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
 
@@ -0,0 +1,43 @@
1
+ import {
2
+ CreateOrganizationDto,
3
+ CreatePermissionDto,
4
+ CreateRoleDto,
5
+ CreateUserDto,
6
+ OrganizationDto,
7
+ PermissionDto,
8
+ RoleDto,
9
+ UpdateOrganizationDto,
10
+ UpdatePermissionDto,
11
+ UpdateRoleDto,
12
+ UpdateUserDto,
13
+ UserDto
14
+ } from '@forklaunch/interfaces-iam/types';
15
+
16
+ // organization
17
+ export type OrganizationDtos<OrganizationStatus> = {
18
+ OrganizationMapper: OrganizationDto<OrganizationStatus>;
19
+ CreateOrganizationMapper: CreateOrganizationDto;
20
+ UpdateOrganizationMapper: UpdateOrganizationDto;
21
+ };
22
+
23
+ // permission
24
+ export type PermissionDtos = {
25
+ PermissionMapper: PermissionDto;
26
+ CreatePermissionMapper: CreatePermissionDto;
27
+ UpdatePermissionMapper: UpdatePermissionDto;
28
+ RoleEntityMapper: UpdateRoleDto;
29
+ };
30
+
31
+ // role
32
+ export type RoleDtos = {
33
+ RoleMapper: RoleDto;
34
+ CreateRoleMapper: CreateRoleDto;
35
+ UpdateRoleMapper: UpdateRoleDto;
36
+ };
37
+
38
+ // user
39
+ export type UserDtos = {
40
+ UserMapper: UserDto;
41
+ CreateUserMapper: CreateUserDto;
42
+ UpdateUserMapper: UpdateUserDto;
43
+ };
@@ -0,0 +1,49 @@
1
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
2
+ import {
3
+ OrganizationDto,
4
+ PermissionDto,
5
+ RoleDto,
6
+ UpdateRoleDto,
7
+ UserDto
8
+ } from '@forklaunch/interfaces-iam/types';
9
+
10
+ // organization
11
+ export type OrganizationEntities<OrganizationStatus> = {
12
+ OrganizationMapper: MapNestedDtoArraysToCollections<
13
+ OrganizationDto<OrganizationStatus>,
14
+ 'users'
15
+ >;
16
+ CreateOrganizationMapper: MapNestedDtoArraysToCollections<
17
+ OrganizationDto<OrganizationStatus>,
18
+ 'users'
19
+ >;
20
+ UpdateOrganizationMapper: MapNestedDtoArraysToCollections<
21
+ OrganizationDto<OrganizationStatus>,
22
+ 'users'
23
+ >;
24
+ };
25
+
26
+ // permission
27
+ export type PermissionEntities = {
28
+ PermissionMapper: PermissionDto;
29
+ CreatePermissionMapper: PermissionDto;
30
+ UpdatePermissionMapper: PermissionDto;
31
+ RoleEntityMapper: MapNestedDtoArraysToCollections<
32
+ UpdateRoleDto,
33
+ 'permissions'
34
+ >;
35
+ };
36
+
37
+ // role
38
+ export type RoleEntities = {
39
+ RoleMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
40
+ CreateRoleMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
41
+ UpdateRoleMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
42
+ };
43
+
44
+ // user
45
+ export type UserEntities = {
46
+ UserMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
47
+ CreateUserMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
48
+ UpdateUserMapper: MapNestedDtoArraysToCollections<UserDto, 'roles'>;
49
+ };