@forklaunch/implementation-iam-base 0.1.17 → 0.2.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.
@@ -1,50 +1,88 @@
1
+ import { evaluateTelemetryOptions } from '@forklaunch/core/http';
1
2
  import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
2
3
  export class BaseOrganizationService {
3
4
  em;
4
5
  openTelemetryCollector;
5
6
  schemaValidator;
6
- mapperss;
7
- #mapperss;
8
- constructor(em, openTelemetryCollector, schemaValidator, mapperss) {
7
+ mappers;
8
+ #mappers;
9
+ evaluatedTelemetryOptions;
10
+ constructor(em, openTelemetryCollector, schemaValidator, mappers, options) {
9
11
  this.em = em;
10
12
  this.openTelemetryCollector = openTelemetryCollector;
11
13
  this.schemaValidator = schemaValidator;
12
- this.mapperss = mapperss;
13
- this.#mapperss = transformIntoInternalDtoMapper(mapperss, 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
+ };
14
23
  }
15
24
  async createOrganization(organizationDto, em) {
16
- this.openTelemetryCollector.log('info', 'Creating organization');
17
- const organization =
18
- this.#mapperss.CreateOrganizationDtoMapper.deserializeDtoToEntity(
25
+ if (this.evaluatedTelemetryOptions.logging) {
26
+ this.openTelemetryCollector.info(
27
+ 'Creating organization',
19
28
  organizationDto
20
29
  );
21
- await (em ?? this.em).transactional(async (innerEm) => {
22
- await innerEm.persist(organization);
23
- });
24
- return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(
30
+ }
31
+ const organization =
32
+ await this.#mappers.CreateOrganizationDtoMapper.deserializeDtoToEntity(
33
+ organizationDto,
34
+ em ?? this.em
35
+ );
36
+ if (em) {
37
+ await em.persist(organization);
38
+ } else {
39
+ await this.em.persistAndFlush(organization);
40
+ }
41
+ return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
25
42
  organization
26
43
  );
27
44
  }
28
45
  async getOrganization(idDto, em) {
46
+ if (this.evaluatedTelemetryOptions.logging) {
47
+ this.openTelemetryCollector.info('Getting organization', idDto);
48
+ }
29
49
  const organization = await (em ?? this.em).findOneOrFail(
30
50
  'Organization',
31
51
  idDto
32
52
  );
33
- return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(
53
+ return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
34
54
  organization
35
55
  );
36
56
  }
37
57
  async updateOrganization(organizationDto, em) {
38
- const updatedOrganization =
39
- this.#mapperss.UpdateOrganizationDtoMapper.deserializeDtoToEntity(
58
+ if (this.evaluatedTelemetryOptions.logging) {
59
+ this.openTelemetryCollector.info(
60
+ 'Updating organization',
40
61
  organizationDto
41
62
  );
42
- await (em ?? this.em).upsert(updatedOrganization);
43
- return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(
63
+ }
64
+ const updatedOrganization =
65
+ await this.#mappers.UpdateOrganizationDtoMapper.deserializeDtoToEntity(
66
+ organizationDto,
67
+ em ?? this.em
68
+ );
69
+ if (em) {
70
+ await em.persist(updatedOrganization);
71
+ } else {
72
+ await this.em.persistAndFlush(updatedOrganization);
73
+ }
74
+ return this.#mappers.OrganizationDtoMapper.serializeEntityToDto(
44
75
  updatedOrganization
45
76
  );
46
77
  }
47
78
  async deleteOrganization(idDto, em) {
48
- await (em ?? this.em).nativeDelete('Organization', idDto);
79
+ if (this.evaluatedTelemetryOptions.logging) {
80
+ this.openTelemetryCollector.info('Deleting organization', idDto);
81
+ }
82
+ if (em) {
83
+ await em.nativeDelete('Organization', idDto);
84
+ } else {
85
+ await this.em.nativeDelete('Organization', idDto);
86
+ }
49
87
  }
50
88
  }
@@ -3,20 +3,21 @@ import {
3
3
  RoleService
4
4
  } from '@forklaunch/interfaces-iam/interfaces';
5
5
  import { IdDto, IdsDto } from '@forklaunch/common';
6
+ import {
7
+ MetricsDefinition,
8
+ OpenTelemetryCollector,
9
+ TelemetryOptions
10
+ } from '@forklaunch/core/http';
6
11
  import {
7
12
  RequestDtoMapperConstructor,
8
13
  ResponseDtoMapperConstructor
9
14
  } from '@forklaunch/core/mappers';
10
- import {
11
- MetricsDefinition,
12
- OpenTelemetryCollector
13
- } from '@forklaunch/core/http';
14
15
  import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
15
16
  import {
16
17
  CreatePermissionDto,
17
18
  PermissionDto,
18
- RoleDto,
19
- UpdatePermissionDto
19
+ UpdatePermissionDto,
20
+ UpdateRoleDto
20
21
  } from '@forklaunch/interfaces-iam/types';
21
22
  import { AnySchemaValidator } from '@forklaunch/validator';
22
23
  import { EntityManager } from '@mikro-orm/core';
@@ -27,23 +28,29 @@ export declare class BasePermissionService<
27
28
  PermissionDtoMapper: PermissionDto;
28
29
  CreatePermissionDtoMapper: CreatePermissionDto;
29
30
  UpdatePermissionDtoMapper: UpdatePermissionDto;
30
- RoleDtoMapper: RoleDto;
31
+ RoleEntityMapper: UpdateRoleDto;
31
32
  } = {
32
33
  PermissionDtoMapper: PermissionDto;
33
34
  CreatePermissionDtoMapper: CreatePermissionDto;
34
35
  UpdatePermissionDtoMapper: UpdatePermissionDto;
35
- RoleDtoMapper: RoleDto;
36
+ RoleEntityMapper: UpdateRoleDto;
36
37
  },
37
38
  Entities extends {
38
39
  PermissionDtoMapper: PermissionDto;
39
40
  CreatePermissionDtoMapper: PermissionDto;
40
41
  UpdatePermissionDtoMapper: PermissionDto;
41
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
42
+ RoleEntityMapper: MapNestedDtoArraysToCollections<
43
+ UpdateRoleDto,
44
+ 'permissions'
45
+ >;
42
46
  } = {
43
47
  PermissionDtoMapper: PermissionDto;
44
48
  CreatePermissionDtoMapper: PermissionDto;
45
49
  UpdatePermissionDtoMapper: PermissionDto;
46
- RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
50
+ RoleEntityMapper: MapNestedDtoArraysToCollections<
51
+ UpdateRoleDto,
52
+ 'permissions'
53
+ >;
47
54
  }
48
55
  > implements PermissionService
49
56
  {
@@ -52,7 +59,7 @@ export declare class BasePermissionService<
52
59
  protected roleServiceFactory: () => RoleService;
53
60
  protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
54
61
  protected schemaValidator: SchemaValidator;
55
- protected mapperss: {
62
+ protected mappers: {
56
63
  PermissionDtoMapper: ResponseDtoMapperConstructor<
57
64
  SchemaValidator,
58
65
  Dto['PermissionDtoMapper'],
@@ -68,18 +75,19 @@ export declare class BasePermissionService<
68
75
  Dto['UpdatePermissionDtoMapper'],
69
76
  Entities['UpdatePermissionDtoMapper']
70
77
  >;
71
- RoleDtoMapper: RequestDtoMapperConstructor<
78
+ RoleEntityMapper: RequestDtoMapperConstructor<
72
79
  SchemaValidator,
73
- Dto['RoleDtoMapper'],
74
- Entities['RoleDtoMapper']
80
+ Dto['RoleEntityMapper'],
81
+ Entities['RoleEntityMapper']
75
82
  >;
76
83
  };
84
+ private evaluatedTelemetryOptions;
77
85
  constructor(
78
86
  em: EntityManager,
79
87
  roleServiceFactory: () => RoleService,
80
88
  openTelemetryCollector: OpenTelemetryCollector<Metrics>,
81
89
  schemaValidator: SchemaValidator,
82
- mapperss: {
90
+ mappers: {
83
91
  PermissionDtoMapper: ResponseDtoMapperConstructor<
84
92
  SchemaValidator,
85
93
  Dto['PermissionDtoMapper'],
@@ -95,11 +103,14 @@ export declare class BasePermissionService<
95
103
  Dto['UpdatePermissionDtoMapper'],
96
104
  Entities['UpdatePermissionDtoMapper']
97
105
  >;
98
- RoleDtoMapper: RequestDtoMapperConstructor<
106
+ RoleEntityMapper: RequestDtoMapperConstructor<
99
107
  SchemaValidator,
100
- Dto['RoleDtoMapper'],
101
- Entities['RoleDtoMapper']
108
+ Dto['RoleEntityMapper'],
109
+ Entities['RoleEntityMapper']
102
110
  >;
111
+ },
112
+ options?: {
113
+ telemetry?: TelemetryOptions;
103
114
  }
104
115
  );
105
116
  private updateRolesWithPermissions;
@@ -1 +1 @@
1
- {"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"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"}
@@ -1,28 +1,38 @@
1
+ import { evaluateTelemetryOptions } from '@forklaunch/core/http';
1
2
  import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
2
3
  export class BasePermissionService {
3
4
  em;
4
5
  roleServiceFactory;
5
6
  openTelemetryCollector;
6
7
  schemaValidator;
7
- mapperss;
8
- #mapperss;
8
+ mappers;
9
+ #mappers;
10
+ evaluatedTelemetryOptions;
9
11
  constructor(
10
12
  em,
11
13
  roleServiceFactory,
12
14
  openTelemetryCollector,
13
15
  schemaValidator,
14
- mapperss
16
+ mappers,
17
+ options
15
18
  ) {
16
19
  this.em = em;
17
20
  this.roleServiceFactory = roleServiceFactory;
18
21
  this.openTelemetryCollector = openTelemetryCollector;
19
22
  this.schemaValidator = schemaValidator;
20
- this.mapperss = mapperss;
21
- this.#mapperss = transformIntoInternalDtoMapper(mapperss, 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
+ };
22
32
  }
23
33
  // start: global helper functions
24
34
  async updateRolesWithPermissions(roles, permissions) {
25
- return await Promise.all(
35
+ return Promise.all(
26
36
  roles.map(async (role) => {
27
37
  permissions.forEach((permission) => role.permissions.add(permission));
28
38
  return role;
@@ -30,7 +40,7 @@ export class BasePermissionService {
30
40
  );
31
41
  }
32
42
  async removePermissionsFromRoles(roles, permissions) {
33
- return await Promise.all(
43
+ return Promise.all(
34
44
  roles.map(async (role) => {
35
45
  permissions.forEach((permission) =>
36
46
  role.permissions.remove(permission)
@@ -41,12 +51,17 @@ export class BasePermissionService {
41
51
  }
42
52
  async getBatchRoles(roleIds, em) {
43
53
  return roleIds
44
- ? (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map(
45
- (role) => {
46
- return (em ?? this.em).merge(
47
- this.#mapperss.RoleDtoMapper.deserializeDtoToEntity(role)
48
- );
49
- }
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
+ )
50
65
  )
51
66
  : [];
52
67
  }
@@ -62,8 +77,9 @@ export class BasePermissionService {
62
77
  async extractCreatePermissionDtoToEntityData(permissionDto, em) {
63
78
  return {
64
79
  permission: (em ?? this.em).merge(
65
- this.#mapperss.CreatePermissionDtoMapper.deserializeDtoToEntity(
66
- permissionDto
80
+ await this.#mappers.CreatePermissionDtoMapper.deserializeDtoToEntity(
81
+ permissionDto,
82
+ em ?? this.em
67
83
  )
68
84
  ),
69
85
  addToRoles: permissionDto.addToRolesIds
@@ -73,65 +89,89 @@ export class BasePermissionService {
73
89
  }
74
90
  // end: createPermission helper functions
75
91
  async createPermission(createPermissionDto, em) {
92
+ if (this.evaluatedTelemetryOptions.logging) {
93
+ this.openTelemetryCollector.info(
94
+ 'Creating permission',
95
+ createPermissionDto
96
+ );
97
+ }
76
98
  const { permission, roles } = await this.createPermissionDto(
77
99
  await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em)
78
100
  );
79
- await (em ?? this.em).transactional(async (innerEm) => {
80
- await innerEm.persist([permission, ...roles]);
81
- });
82
- return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
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);
83
107
  }
84
108
  async createBatchPermissions(permissionDtos, em) {
109
+ if (this.evaluatedTelemetryOptions.logging) {
110
+ this.openTelemetryCollector.info(
111
+ 'Creating batch permissions',
112
+ permissionDtos
113
+ );
114
+ }
85
115
  const rolesCache = {};
86
116
  const permissions = [];
87
- await (em ?? this.em).transactional(async (em) => {
88
- permissionDtos.map(async (createPermissionDto) => {
89
- const { permission, roles } = await this.createPermissionDto(
90
- await this.extractCreatePermissionDtoToEntityData(
91
- createPermissionDto,
92
- em
93
- )
94
- );
95
- roles.forEach((role) => {
96
- if (
97
- rolesCache[role.id] &&
98
- role.permissions !== rolesCache[role.id].permissions
99
- ) {
100
- role.permissions.getItems().forEach((permission) => {
101
- if (!rolesCache[role.id].permissions.contains(permission)) {
102
- rolesCache[role.id].permissions.add(permission);
103
- }
104
- });
105
- } else {
106
- rolesCache[role.id] = role;
107
- }
108
- });
109
- permissions.push(permission);
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
+ }
110
137
  });
111
- await (em ?? this.em).persist([
112
- ...permissions,
113
- ...Object.values(rolesCache)
114
- ]);
138
+ permissions.push(permission);
115
139
  });
116
- return permissions.map((permission) =>
117
- this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission)
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
+ )
118
150
  );
119
151
  }
120
152
  async getPermission(idDto, em) {
153
+ if (this.evaluatedTelemetryOptions.logging) {
154
+ this.openTelemetryCollector.info('Getting permission', idDto);
155
+ }
121
156
  const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
122
- return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
157
+ return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
123
158
  }
124
159
  async getBatchPermissions(idsDto, em) {
125
- return (await (em ?? this.em).find('Permission', idsDto)).map(
126
- (permission) =>
127
- this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission)
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
+ )
128
167
  );
129
168
  }
130
169
  // start: updatePermission helper functions
131
170
  updatePermissionDto = async (permissionDto, em) => {
132
171
  const permission =
133
- this.#mapperss.UpdatePermissionDtoMapper.deserializeDtoToEntity(
134
- permissionDto
172
+ await this.#mappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(
173
+ permissionDto,
174
+ em ?? this.em
135
175
  );
136
176
  const addToRoles = permissionDto.addToRolesIds
137
177
  ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
@@ -153,14 +193,25 @@ export class BasePermissionService {
153
193
  };
154
194
  // end: updatePermission helper functions
155
195
  async updatePermission(permissionDto, em) {
196
+ if (this.evaluatedTelemetryOptions.logging) {
197
+ this.openTelemetryCollector.info('Updating permission', permissionDto);
198
+ }
156
199
  const { permission, roles } = await this.updatePermissionDto(permissionDto);
157
- await (em ?? this.em).upsertMany([permission, ...roles]);
158
- if (!em) {
159
- this.em.flush();
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);
160
205
  }
161
- return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
206
+ return this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission);
162
207
  }
163
208
  async updateBatchPermissions(permissionDtos, em) {
209
+ if (this.evaluatedTelemetryOptions.logging) {
210
+ this.openTelemetryCollector.info(
211
+ 'Updating batch permissions',
212
+ permissionDtos
213
+ );
214
+ }
164
215
  const rolesCache = {};
165
216
  const permissions = [];
166
217
  await (em ?? this.em).transactional(async (em) => {
@@ -183,19 +234,29 @@ export class BasePermissionService {
183
234
  });
184
235
  permissions.push(permission);
185
236
  });
186
- await (em ?? this.em).persist([
187
- ...permissions,
188
- ...Object.values(rolesCache)
189
- ]);
237
+ const entities = [...permissions, ...Object.values(rolesCache)];
238
+ if (em) {
239
+ await em.persist(entities);
240
+ } else {
241
+ await this.em.persistAndFlush(entities);
242
+ }
190
243
  });
191
- return permissions.map((permission) =>
192
- this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission)
244
+ return Promise.all(
245
+ permissions.map((permission) =>
246
+ this.#mappers.PermissionDtoMapper.serializeEntityToDto(permission)
247
+ )
193
248
  );
194
249
  }
195
250
  async deletePermission(idDto, em) {
251
+ if (this.evaluatedTelemetryOptions.logging) {
252
+ this.openTelemetryCollector.info('Deleting permission', idDto);
253
+ }
196
254
  await (em ?? this.em).nativeDelete('Permission', idDto);
197
255
  }
198
256
  async deleteBatchPermissions(idsDto, em) {
257
+ if (this.evaluatedTelemetryOptions.logging) {
258
+ this.openTelemetryCollector.info('Deleting batch permissions', idsDto);
259
+ }
199
260
  await (em ?? this.em).nativeDelete('Permission', {
200
261
  id: { $in: idsDto.ids }
201
262
  });
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  MetricsDefinition,
3
- OpenTelemetryCollector
3
+ OpenTelemetryCollector,
4
+ TelemetryOptions
4
5
  } from '@forklaunch/core/http';
5
6
  import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
6
7
  import { EntityManager } from '@mikro-orm/core';
@@ -55,7 +56,7 @@ export declare class BaseRoleService<
55
56
  em: EntityManager;
56
57
  protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
57
58
  protected schemaValidator: SchemaValidator;
58
- protected mapperss: {
59
+ protected mappers: {
59
60
  RoleDtoMapper: ResponseDtoMapperConstructor<
60
61
  SchemaValidator,
61
62
  Dto['RoleDtoMapper'],
@@ -72,11 +73,12 @@ export declare class BaseRoleService<
72
73
  Entities['UpdateRoleDtoMapper']
73
74
  >;
74
75
  };
76
+ private evaluatedTelemetryOptions;
75
77
  constructor(
76
78
  em: EntityManager,
77
79
  openTelemetryCollector: OpenTelemetryCollector<Metrics>,
78
80
  schemaValidator: SchemaValidator,
79
- mapperss: {
81
+ mappers: {
80
82
  RoleDtoMapper: ResponseDtoMapperConstructor<
81
83
  SchemaValidator,
82
84
  Dto['RoleDtoMapper'],
@@ -92,6 +94,9 @@ export declare class BaseRoleService<
92
94
  Dto['UpdateRoleDtoMapper'],
93
95
  Entities['UpdateRoleDtoMapper']
94
96
  >;
97
+ },
98
+ options?: {
99
+ telemetry?: TelemetryOptions;
95
100
  }
96
101
  );
97
102
  createRole(
@@ -102,8 +107,8 @@ export declare class BaseRoleService<
102
107
  roleDtos: Dto['CreateRoleDtoMapper'][],
103
108
  em?: EntityManager
104
109
  ): Promise<Dto['RoleDtoMapper'][]>;
105
- getRole(idDto: IdDto, em?: EntityManager): Promise<RoleDto>;
106
- getBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
110
+ getRole({ id }: IdDto, em?: EntityManager): Promise<RoleDto>;
111
+ getBatchRoles({ ids }: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
107
112
  updateRole(
108
113
  roleDto: Dto['UpdateRoleDtoMapper'],
109
114
  em?: EntityManager
@@ -1 +1 @@
1
- {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}