@forklaunch/implementation-iam-base 0.1.2 → 0.1.5

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.
Files changed (87) hide show
  1. package/lib/__test__/schemaEquality.test.d.ts +2 -0
  2. package/lib/__test__/schemaEquality.test.d.ts.map +1 -0
  3. package/lib/__test__/schemaEquality.test.js +175 -0
  4. package/lib/eject/schemas/index.ts +4 -0
  5. package/{schemas/typebox → lib/eject/schemas}/organization.schema.ts +13 -11
  6. package/{schemas/zod → lib/eject/schemas}/permission.schema.ts +7 -1
  7. package/lib/eject/schemas/role.schema.ts +37 -0
  8. package/{schemas/typebox → lib/eject/schemas}/user.schema.ts +20 -19
  9. package/lib/eject/services/index.ts +4 -0
  10. package/{services → lib/eject/services}/organization.service.ts +6 -6
  11. package/{services → lib/eject/services}/permission.service.ts +9 -6
  12. package/{services → lib/eject/services}/role.service.ts +6 -6
  13. package/{services → lib/eject/services}/user.service.ts +11 -9
  14. package/lib/jest.config.d.ts +4 -0
  15. package/lib/jest.config.d.ts.map +1 -0
  16. package/lib/jest.config.js +19 -0
  17. package/lib/schemas/index.d.ts +5 -0
  18. package/lib/schemas/index.d.ts.map +1 -0
  19. package/lib/schemas/index.js +4 -0
  20. package/lib/schemas/organization.schema.d.ts +192 -0
  21. package/lib/schemas/organization.schema.d.ts.map +1 -0
  22. package/lib/schemas/organization.schema.js +4 -0
  23. package/lib/schemas/permission.schema.d.ts +42 -0
  24. package/lib/schemas/permission.schema.d.ts.map +1 -0
  25. package/lib/schemas/permission.schema.js +4 -0
  26. package/lib/schemas/role.schema.d.ts +66 -0
  27. package/lib/schemas/role.schema.d.ts.map +1 -0
  28. package/lib/schemas/role.schema.js +4 -0
  29. package/lib/schemas/typebox/organization.schema.d.ts +106 -0
  30. package/lib/schemas/typebox/organization.schema.d.ts.map +1 -0
  31. package/lib/schemas/typebox/organization.schema.js +34 -0
  32. package/lib/schemas/typebox/permission.schema.d.ts +41 -0
  33. package/lib/schemas/typebox/permission.schema.d.ts.map +1 -0
  34. package/lib/schemas/typebox/permission.schema.js +25 -0
  35. package/lib/schemas/typebox/role.schema.d.ts +53 -0
  36. package/lib/schemas/typebox/role.schema.d.ts.map +1 -0
  37. package/lib/schemas/typebox/role.schema.js +26 -0
  38. package/lib/schemas/typebox/user.schema.d.ts +97 -0
  39. package/lib/schemas/typebox/user.schema.d.ts.map +1 -0
  40. package/lib/schemas/typebox/user.schema.js +41 -0
  41. package/lib/schemas/user.schema.d.ts +136 -0
  42. package/lib/schemas/user.schema.d.ts.map +1 -0
  43. package/lib/schemas/user.schema.js +4 -0
  44. package/lib/schemas/zod/organization.schema.d.ts +278 -0
  45. package/lib/schemas/zod/organization.schema.d.ts.map +1 -0
  46. package/lib/schemas/zod/organization.schema.js +34 -0
  47. package/lib/schemas/zod/permission.schema.d.ts +41 -0
  48. package/lib/schemas/zod/permission.schema.d.ts.map +1 -0
  49. package/lib/schemas/zod/permission.schema.js +25 -0
  50. package/lib/schemas/zod/role.schema.d.ts +77 -0
  51. package/lib/schemas/zod/role.schema.d.ts.map +1 -0
  52. package/lib/schemas/zod/role.schema.js +26 -0
  53. package/lib/schemas/zod/user.schema.d.ts +173 -0
  54. package/lib/schemas/zod/user.schema.d.ts.map +1 -0
  55. package/lib/schemas/zod/user.schema.js +41 -0
  56. package/lib/services/index.d.ts +5 -0
  57. package/lib/services/index.d.ts.map +1 -0
  58. package/lib/services/index.js +4 -0
  59. package/lib/services/organization.service.d.ts +45 -0
  60. package/lib/services/organization.service.d.ts.map +1 -0
  61. package/lib/services/organization.service.js +35 -0
  62. package/lib/services/permission.service.d.ts +62 -0
  63. package/lib/services/permission.service.d.ts.map +1 -0
  64. package/lib/services/permission.service.js +159 -0
  65. package/lib/services/role.service.d.ts +49 -0
  66. package/lib/services/role.service.d.ts.map +1 -0
  67. package/lib/services/role.service.js +57 -0
  68. package/lib/services/user.service.d.ts +54 -0
  69. package/lib/services/user.service.d.ts.map +1 -0
  70. package/lib/services/user.service.js +85 -0
  71. package/lib/tsconfig.tsbuildinfo +1 -0
  72. package/lib/vitest.config.d.ts +3 -0
  73. package/lib/vitest.config.d.ts.map +1 -0
  74. package/lib/vitest.config.js +7 -0
  75. package/package.json +22 -10
  76. package/__test__/schemaEquality.test.ts +0 -293
  77. package/index.ts +0 -8
  78. package/schemas/organization.schema.ts +0 -28
  79. package/schemas/permission.schema.ts +0 -28
  80. package/schemas/role.schema.ts +0 -28
  81. package/schemas/typebox/permission.schema.ts +0 -30
  82. package/schemas/typebox/role.schema.ts +0 -36
  83. package/schemas/user.schema.ts +0 -28
  84. package/schemas/zod/organization.schema.ts +0 -49
  85. package/schemas/zod/role.schema.ts +0 -36
  86. package/schemas/zod/user.schema.ts +0 -52
  87. package/tsconfig.json +0 -7
@@ -0,0 +1,173 @@
1
+ export declare const CreateUserSchema: {
2
+ email: import("zod").ZodString;
3
+ password: import("zod").ZodString;
4
+ firstName: import("zod").ZodString;
5
+ lastName: import("zod").ZodString;
6
+ organizationId: import("zod").ZodString;
7
+ roleIds: import("zod").ZodArray<import("zod").ZodString, "many">;
8
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
9
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
10
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
11
+ };
12
+ export declare const UpdateUserSchema: (uuidId: boolean) => {
13
+ id: import("zod").ZodString;
14
+ email: import("zod").ZodOptional<import("zod").ZodString>;
15
+ password: import("zod").ZodOptional<import("zod").ZodString>;
16
+ firstName: import("zod").ZodOptional<import("zod").ZodString>;
17
+ lastName: import("zod").ZodOptional<import("zod").ZodString>;
18
+ roleIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
19
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
20
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
21
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
22
+ };
23
+ export declare const UserSchema: (uuidId: boolean) => {
24
+ id: import("zod").ZodString;
25
+ email: import("zod").ZodString;
26
+ firstName: import("zod").ZodString;
27
+ lastName: import("zod").ZodString;
28
+ roles: import("zod").ZodArray<import("zod").ZodObject<{
29
+ id: import("zod").ZodString;
30
+ name: import("zod").ZodString;
31
+ permissions: import("zod").ZodArray<import("zod").ZodObject<{
32
+ id: import("zod").ZodString;
33
+ slug: import("zod").ZodString;
34
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
35
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
36
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
37
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
38
+ id: string;
39
+ slug: string;
40
+ extraFields?: unknown;
41
+ createdAt?: Date | undefined;
42
+ updatedAt?: Date | undefined;
43
+ }, {
44
+ id: string;
45
+ slug: string;
46
+ extraFields?: unknown;
47
+ createdAt?: any;
48
+ updatedAt?: any;
49
+ }>, "many">;
50
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
51
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
52
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
53
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
54
+ id: string;
55
+ name: string;
56
+ permissions: {
57
+ id: string;
58
+ slug: string;
59
+ extraFields?: unknown;
60
+ createdAt?: Date | undefined;
61
+ updatedAt?: Date | undefined;
62
+ }[];
63
+ extraFields?: unknown;
64
+ createdAt?: Date | undefined;
65
+ updatedAt?: Date | undefined;
66
+ }, {
67
+ id: string;
68
+ name: string;
69
+ permissions: {
70
+ id: string;
71
+ slug: string;
72
+ extraFields?: unknown;
73
+ createdAt?: any;
74
+ updatedAt?: any;
75
+ }[];
76
+ extraFields?: unknown;
77
+ createdAt?: any;
78
+ updatedAt?: any;
79
+ }>, "many">;
80
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
81
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
82
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
83
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
84
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
85
+ };
86
+ export declare const BaseUserServiceSchemas: (uuidId: boolean) => {
87
+ CreateUserSchema: {
88
+ email: import("zod").ZodString;
89
+ password: import("zod").ZodString;
90
+ firstName: import("zod").ZodString;
91
+ lastName: import("zod").ZodString;
92
+ organizationId: import("zod").ZodString;
93
+ roleIds: import("zod").ZodArray<import("zod").ZodString, "many">;
94
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
95
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
96
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
97
+ };
98
+ UpdateUserSchema: {
99
+ id: import("zod").ZodString;
100
+ email: import("zod").ZodOptional<import("zod").ZodString>;
101
+ password: import("zod").ZodOptional<import("zod").ZodString>;
102
+ firstName: import("zod").ZodOptional<import("zod").ZodString>;
103
+ lastName: import("zod").ZodOptional<import("zod").ZodString>;
104
+ roleIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
105
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
106
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
107
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
108
+ };
109
+ UserSchema: {
110
+ id: import("zod").ZodString;
111
+ email: import("zod").ZodString;
112
+ firstName: import("zod").ZodString;
113
+ lastName: import("zod").ZodString;
114
+ roles: import("zod").ZodArray<import("zod").ZodObject<{
115
+ id: import("zod").ZodString;
116
+ name: import("zod").ZodString;
117
+ permissions: import("zod").ZodArray<import("zod").ZodObject<{
118
+ id: import("zod").ZodString;
119
+ slug: import("zod").ZodString;
120
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
121
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
122
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
123
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
124
+ id: string;
125
+ slug: string;
126
+ extraFields?: unknown;
127
+ createdAt?: Date | undefined;
128
+ updatedAt?: Date | undefined;
129
+ }, {
130
+ id: string;
131
+ slug: string;
132
+ extraFields?: unknown;
133
+ createdAt?: any;
134
+ updatedAt?: any;
135
+ }>, "many">;
136
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
137
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
138
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
139
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
140
+ id: string;
141
+ name: string;
142
+ permissions: {
143
+ id: string;
144
+ slug: string;
145
+ extraFields?: unknown;
146
+ createdAt?: Date | undefined;
147
+ updatedAt?: Date | undefined;
148
+ }[];
149
+ extraFields?: unknown;
150
+ createdAt?: Date | undefined;
151
+ updatedAt?: Date | undefined;
152
+ }, {
153
+ id: string;
154
+ name: string;
155
+ permissions: {
156
+ id: string;
157
+ slug: string;
158
+ extraFields?: unknown;
159
+ createdAt?: any;
160
+ updatedAt?: any;
161
+ }[];
162
+ extraFields?: unknown;
163
+ createdAt?: any;
164
+ updatedAt?: any;
165
+ }>, "many">;
166
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
167
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
168
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
169
+ createdAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
170
+ updatedAt: import("zod").ZodOptional<import("zod").ZodPipeline<import("zod").ZodEffects<import("zod").ZodAny, any, any>, import("zod").ZodDate>>;
171
+ };
172
+ };
173
+ //# sourceMappingURL=user.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.schema.d.ts","sourceRoot":"","sources":["../../../schemas/zod/user.schema.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,gBAAgB;;;;;;;;;;CAU5B,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,QAAQ,OAAO;;;;;;;;;;CAU9C,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWxC,CAAC;AAEH,eAAO,MAAM,sBAAsB,GAAI,QAAQ,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIpD,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { array, date, email, optional, string, unknown, uuid } from '@forklaunch/validator/zod';
2
+ import { RoleSchema } from './role.schema';
3
+ export const CreateUserSchema = {
4
+ email: email,
5
+ password: string,
6
+ firstName: string,
7
+ lastName: string,
8
+ organizationId: string,
9
+ roleIds: array(string),
10
+ phoneNumber: optional(string),
11
+ subscription: optional(string),
12
+ extraFields: optional(unknown)
13
+ };
14
+ export const UpdateUserSchema = (uuidId) => ({
15
+ id: uuidId ? uuid : string,
16
+ email: optional(email),
17
+ password: optional(string),
18
+ firstName: optional(string),
19
+ lastName: optional(string),
20
+ roleIds: optional(array(string)),
21
+ phoneNumber: optional(string),
22
+ subscription: optional(string),
23
+ extraFields: optional(unknown)
24
+ });
25
+ export const UserSchema = (uuidId) => ({
26
+ id: uuidId ? uuid : string,
27
+ email: email,
28
+ firstName: string,
29
+ lastName: string,
30
+ roles: array(RoleSchema(uuidId)),
31
+ phoneNumber: optional(string),
32
+ subscription: optional(string),
33
+ extraFields: optional(unknown),
34
+ createdAt: optional(date),
35
+ updatedAt: optional(date)
36
+ });
37
+ export const BaseUserServiceSchemas = (uuidId) => ({
38
+ CreateUserSchema,
39
+ UpdateUserSchema: UpdateUserSchema(uuidId),
40
+ UserSchema: UserSchema(uuidId)
41
+ });
@@ -0,0 +1,5 @@
1
+ export * from './organization.service';
2
+ export * from './permission.service';
3
+ export * from './role.service';
4
+ export * from './user.service';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../services/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from './organization.service';
2
+ export * from './permission.service';
3
+ export * from './role.service';
4
+ export * from './user.service';
@@ -0,0 +1,45 @@
1
+ import { IdDto } from '@forklaunch/common';
2
+ import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/dtoMapper';
3
+ import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
4
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
5
+ import { OrganizationService } from '@forklaunch/interfaces-iam/interfaces';
6
+ import { CreateOrganizationDto, OrganizationDto, UpdateOrganizationDto } from '@forklaunch/interfaces-iam/types';
7
+ import { AnySchemaValidator } from '@forklaunch/validator';
8
+ import { EntityManager } from '@mikro-orm/core';
9
+ export declare class BaseOrganizationService<SchemaValidator extends AnySchemaValidator, OrganizationStatus, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
10
+ OrganizationDtoMapper: OrganizationDto<OrganizationStatus>;
11
+ CreateOrganizationDtoMapper: CreateOrganizationDto;
12
+ UpdateOrganizationDtoMapper: UpdateOrganizationDto;
13
+ } = {
14
+ OrganizationDtoMapper: OrganizationDto<OrganizationStatus>;
15
+ CreateOrganizationDtoMapper: CreateOrganizationDto;
16
+ UpdateOrganizationDtoMapper: UpdateOrganizationDto;
17
+ }, Entities extends {
18
+ OrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
19
+ CreateOrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
20
+ UpdateOrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
21
+ } = {
22
+ OrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
23
+ CreateOrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
24
+ UpdateOrganizationDtoMapper: MapNestedDtoArraysToCollections<OrganizationDto<OrganizationStatus>, 'users'>;
25
+ }> implements OrganizationService<OrganizationStatus> {
26
+ #private;
27
+ em: EntityManager;
28
+ protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
29
+ protected schemaValidator: SchemaValidator;
30
+ protected dtoMappers: {
31
+ OrganizationDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['OrganizationDtoMapper'], Entities['OrganizationDtoMapper']>;
32
+ CreateOrganizationDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateOrganizationDtoMapper'], Entities['CreateOrganizationDtoMapper']>;
33
+ UpdateOrganizationDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateOrganizationDtoMapper'], Entities['UpdateOrganizationDtoMapper']>;
34
+ };
35
+ constructor(em: EntityManager, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, dtoMappers: {
36
+ OrganizationDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['OrganizationDtoMapper'], Entities['OrganizationDtoMapper']>;
37
+ CreateOrganizationDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateOrganizationDtoMapper'], Entities['CreateOrganizationDtoMapper']>;
38
+ UpdateOrganizationDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateOrganizationDtoMapper'], Entities['UpdateOrganizationDtoMapper']>;
39
+ });
40
+ createOrganization(organizationDto: Dto['CreateOrganizationDtoMapper'], em?: EntityManager): Promise<Dto['OrganizationDtoMapper']>;
41
+ getOrganization(idDto: IdDto, em?: EntityManager): Promise<Dto['OrganizationDtoMapper']>;
42
+ updateOrganization(organizationDto: Dto['UpdateOrganizationDtoMapper'], em?: EntityManager): Promise<Dto['OrganizationDtoMapper']>;
43
+ deleteOrganization(idDto: IdDto, em?: EntityManager): Promise<void>;
44
+ }
45
+ //# sourceMappingURL=organization.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization.service.d.ts","sourceRoot":"","sources":["../../services/organization.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import { transformIntoInternalDtoMapper } from '@forklaunch/core/dtoMapper';
2
+ export class BaseOrganizationService {
3
+ em;
4
+ openTelemetryCollector;
5
+ schemaValidator;
6
+ dtoMappers;
7
+ #dtoMappers;
8
+ constructor(em, openTelemetryCollector, schemaValidator, dtoMappers) {
9
+ this.em = em;
10
+ this.openTelemetryCollector = openTelemetryCollector;
11
+ this.schemaValidator = schemaValidator;
12
+ this.dtoMappers = dtoMappers;
13
+ this.#dtoMappers = transformIntoInternalDtoMapper(dtoMappers, schemaValidator);
14
+ }
15
+ async createOrganization(organizationDto, em) {
16
+ this.openTelemetryCollector.log('info', 'Creating organization');
17
+ const organization = this.#dtoMappers.CreateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
18
+ await (em ?? this.em).transactional(async (innerEm) => {
19
+ await innerEm.persist(organization);
20
+ });
21
+ return this.#dtoMappers.OrganizationDtoMapper.serializeEntityToDto(organization);
22
+ }
23
+ async getOrganization(idDto, em) {
24
+ const organization = await (em ?? this.em).findOneOrFail('Organization', idDto);
25
+ return this.#dtoMappers.OrganizationDtoMapper.serializeEntityToDto(organization);
26
+ }
27
+ async updateOrganization(organizationDto, em) {
28
+ const updatedOrganization = this.#dtoMappers.UpdateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
29
+ await (em ?? this.em).upsert(updatedOrganization);
30
+ return this.#dtoMappers.OrganizationDtoMapper.serializeEntityToDto(updatedOrganization);
31
+ }
32
+ async deleteOrganization(idDto, em) {
33
+ await (em ?? this.em).nativeDelete('Organization', idDto);
34
+ }
35
+ }
@@ -0,0 +1,62 @@
1
+ import { PermissionService, RoleService } from '@forklaunch/interfaces-iam/interfaces';
2
+ import { IdDto, IdsDto } from '@forklaunch/common';
3
+ import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/dtoMapper';
4
+ import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
5
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
6
+ import { CreatePermissionDto, PermissionDto, RoleDto, UpdatePermissionDto } from '@forklaunch/interfaces-iam/types';
7
+ import { AnySchemaValidator } from '@forklaunch/validator';
8
+ import { EntityManager } from '@mikro-orm/core';
9
+ export declare class BasePermissionService<SchemaValidator extends AnySchemaValidator, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
10
+ PermissionDtoMapper: PermissionDto;
11
+ CreatePermissionDtoMapper: CreatePermissionDto;
12
+ UpdatePermissionDtoMapper: UpdatePermissionDto;
13
+ RoleDtoMapper: RoleDto;
14
+ } = {
15
+ PermissionDtoMapper: PermissionDto;
16
+ CreatePermissionDtoMapper: CreatePermissionDto;
17
+ UpdatePermissionDtoMapper: UpdatePermissionDto;
18
+ RoleDtoMapper: RoleDto;
19
+ }, Entities extends {
20
+ PermissionDtoMapper: PermissionDto;
21
+ CreatePermissionDtoMapper: PermissionDto;
22
+ UpdatePermissionDtoMapper: PermissionDto;
23
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
24
+ } = {
25
+ PermissionDtoMapper: PermissionDto;
26
+ CreatePermissionDtoMapper: PermissionDto;
27
+ UpdatePermissionDtoMapper: PermissionDto;
28
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
29
+ }> implements PermissionService {
30
+ #private;
31
+ em: EntityManager;
32
+ protected roleServiceFactory: () => RoleService;
33
+ protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
34
+ protected schemaValidator: SchemaValidator;
35
+ protected dtoMappers: {
36
+ PermissionDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['PermissionDtoMapper'], Entities['PermissionDtoMapper']>;
37
+ CreatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreatePermissionDtoMapper'], Entities['CreatePermissionDtoMapper']>;
38
+ UpdatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdatePermissionDtoMapper'], Entities['UpdatePermissionDtoMapper']>;
39
+ RoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
40
+ };
41
+ constructor(em: EntityManager, roleServiceFactory: () => RoleService, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, dtoMappers: {
42
+ PermissionDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['PermissionDtoMapper'], Entities['PermissionDtoMapper']>;
43
+ CreatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreatePermissionDtoMapper'], Entities['CreatePermissionDtoMapper']>;
44
+ UpdatePermissionDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdatePermissionDtoMapper'], Entities['UpdatePermissionDtoMapper']>;
45
+ RoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
46
+ });
47
+ private updateRolesWithPermissions;
48
+ private removePermissionsFromRoles;
49
+ private getBatchRoles;
50
+ private createPermissionDto;
51
+ private extractCreatePermissionDtoToEntityData;
52
+ createPermission(createPermissionDto: Dto['CreatePermissionDtoMapper'], em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
53
+ createBatchPermissions(permissionDtos: Dto['CreatePermissionDtoMapper'][], em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
54
+ getPermission(idDto: IdDto, em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
55
+ getBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
56
+ private updatePermissionDto;
57
+ updatePermission(permissionDto: Dto['UpdatePermissionDtoMapper'], em?: EntityManager): Promise<Dto['PermissionDtoMapper']>;
58
+ updateBatchPermissions(permissionDtos: Dto['UpdatePermissionDtoMapper'][], em?: EntityManager): Promise<Dto['PermissionDtoMapper'][]>;
59
+ deletePermission(idDto: IdDto, em?: EntityManager): Promise<void>;
60
+ deleteBatchPermissions(idsDto: IdsDto, em?: EntityManager): Promise<void>;
61
+ }
62
+ //# sourceMappingURL=permission.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.service.d.ts","sourceRoot":"","sources":["../../services/permission.service.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,WAAW,EACZ,MAAM,uCAAuC,CAAC;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAEL,2BAA2B,EAC3B,4BAA4B,EAE7B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,OAAO,EACP,mBAAmB,EACpB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,qBAAqB,CAChC,eAAe,SAAS,kBAAkB,EAC1C,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,EACrD,GAAG,SAAS;IACV,mBAAmB,EAAE,aAAa,CAAC;IACnC,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG;IACF,mBAAmB,EAAE,aAAa,CAAC;IACnC,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,yBAAyB,EAAE,mBAAmB,CAAC;IAC/C,aAAa,EAAE,OAAO,CAAC;CACxB,EACD,QAAQ,SAAS;IACf,mBAAmB,EAAE,aAAa,CAAC;IACnC,yBAAyB,EAAE,aAAa,CAAC;IACzC,yBAAyB,EAAE,aAAa,CAAC;IACzC,aAAa,EAAE,+BAA+B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;CACxE,GAAG;IACF,mBAAmB,EAAE,aAAa,CAAC;IACnC,yBAAyB,EAAE,aAAa,CAAC;IACzC,yBAAyB,EAAE,aAAa,CAAC;IACzC,aAAa,EAAE,+BAA+B,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;CACxE,CACD,YAAW,iBAAiB;;IASnB,EAAE,EAAE,aAAa;IACxB,SAAS,CAAC,kBAAkB,EAAE,MAAM,WAAW;IAC/C,SAAS,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC;IACjE,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,UAAU,EAAE;QACpB,mBAAmB,EAAE,4BAA4B,CAC/C,eAAe,EACf,GAAG,CAAC,qBAAqB,CAAC,EAC1B,QAAQ,CAAC,qBAAqB,CAAC,CAChC,CAAC;QACF,yBAAyB,EAAE,2BAA2B,CACpD,eAAe,EACf,GAAG,CAAC,2BAA2B,CAAC,EAChC,QAAQ,CAAC,2BAA2B,CAAC,CACtC,CAAC;QACF,yBAAyB,EAAE,2BAA2B,CACpD,eAAe,EACf,GAAG,CAAC,2BAA2B,CAAC,EAChC,QAAQ,CAAC,2BAA2B,CAAC,CACtC,CAAC;QACF,aAAa,EAAE,2BAA2B,CACxC,eAAe,EACf,GAAG,CAAC,eAAe,CAAC,EACpB,QAAQ,CAAC,eAAe,CAAC,CAC1B,CAAC;KACH;gBAzBM,EAAE,EAAE,aAAa,EACd,kBAAkB,EAAE,MAAM,WAAW,EACrC,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACvD,eAAe,EAAE,eAAe,EAChC,UAAU,EAAE;QACpB,mBAAmB,EAAE,4BAA4B,CAC/C,eAAe,EACf,GAAG,CAAC,qBAAqB,CAAC,EAC1B,QAAQ,CAAC,qBAAqB,CAAC,CAChC,CAAC;QACF,yBAAyB,EAAE,2BAA2B,CACpD,eAAe,EACf,GAAG,CAAC,2BAA2B,CAAC,EAChC,QAAQ,CAAC,2BAA2B,CAAC,CACtC,CAAC;QACF,yBAAyB,EAAE,2BAA2B,CACpD,eAAe,EACf,GAAG,CAAC,2BAA2B,CAAC,EAChC,QAAQ,CAAC,2BAA2B,CAAC,CACtC,CAAC;QACF,aAAa,EAAE,2BAA2B,CACxC,eAAe,EACf,GAAG,CAAC,eAAe,CAAC,EACpB,QAAQ,CAAC,eAAe,CAAC,CAC1B,CAAC;KACH;YASW,0BAA0B;YAY1B,0BAA0B;YAc1B,aAAa;YAiBb,mBAAmB;YAkBnB,sCAAsC;IAoB9C,gBAAgB,CACpB,mBAAmB,EAAE,GAAG,CAAC,2BAA2B,CAAC,EACrD,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAYhC,sBAAsB,CAC1B,cAAc,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,EAClD,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAsClC,aAAa,CACjB,KAAK,EAAE,KAAK,EACZ,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAOhC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAUxC,OAAO,CAAC,mBAAmB,CA+BzB;IAGI,gBAAgB,CACpB,aAAa,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAC/C,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAWhC,sBAAsB,CAC1B,cAAc,EAAE,GAAG,CAAC,2BAA2B,CAAC,EAAE,EAClD,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC;IAkClC,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjE,sBAAsB,CAC1B,MAAM,EAAE,MAAM,EACd,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,IAAI,CAAC;CAKjB"}
@@ -0,0 +1,159 @@
1
+ import { transformIntoInternalDtoMapper } from '@forklaunch/core/dtoMapper';
2
+ export class BasePermissionService {
3
+ em;
4
+ roleServiceFactory;
5
+ openTelemetryCollector;
6
+ schemaValidator;
7
+ dtoMappers;
8
+ #dtoMappers;
9
+ constructor(em, roleServiceFactory, openTelemetryCollector, schemaValidator, dtoMappers) {
10
+ this.em = em;
11
+ this.roleServiceFactory = roleServiceFactory;
12
+ this.openTelemetryCollector = openTelemetryCollector;
13
+ this.schemaValidator = schemaValidator;
14
+ this.dtoMappers = dtoMappers;
15
+ this.#dtoMappers = transformIntoInternalDtoMapper(dtoMappers, schemaValidator);
16
+ }
17
+ // start: global helper functions
18
+ async updateRolesWithPermissions(roles, permissions) {
19
+ return await Promise.all(roles.map(async (role) => {
20
+ permissions.forEach((permission) => role.permissions.add(permission));
21
+ return role;
22
+ }));
23
+ }
24
+ async removePermissionsFromRoles(roles, permissions) {
25
+ return await Promise.all(roles.map(async (role) => {
26
+ permissions.forEach((permission) => role.permissions.remove(permission));
27
+ return role;
28
+ }));
29
+ }
30
+ async getBatchRoles(roleIds, em) {
31
+ return roleIds
32
+ ? (await this.roleServiceFactory().getBatchRoles(roleIds, em)).map((role) => {
33
+ return (em ?? this.em).merge(this.#dtoMappers.RoleDtoMapper.deserializeDtoToEntity(role));
34
+ })
35
+ : [];
36
+ }
37
+ // end: global helper functions
38
+ // start: createPermission helper functions
39
+ async createPermissionDto({ permission, addToRoles }) {
40
+ let roles = [];
41
+ if (addToRoles) {
42
+ roles = await this.updateRolesWithPermissions(addToRoles, [permission]);
43
+ }
44
+ return { permission, roles };
45
+ }
46
+ async extractCreatePermissionDtoToEntityData(permissionDto, em) {
47
+ return {
48
+ permission: (em ?? this.em).merge(this.#dtoMappers.CreatePermissionDtoMapper.deserializeDtoToEntity(permissionDto)),
49
+ addToRoles: permissionDto.addToRolesIds
50
+ ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
51
+ : []
52
+ };
53
+ }
54
+ // end: createPermission helper functions
55
+ async createPermission(createPermissionDto, em) {
56
+ const { permission, roles } = await this.createPermissionDto(await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em));
57
+ await (em ?? this.em).transactional(async (innerEm) => {
58
+ await innerEm.persist([permission, ...roles]);
59
+ });
60
+ return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission);
61
+ }
62
+ async createBatchPermissions(permissionDtos, em) {
63
+ const rolesCache = {};
64
+ const permissions = [];
65
+ await (em ?? this.em).transactional(async (em) => {
66
+ permissionDtos.map(async (createPermissionDto) => {
67
+ const { permission, roles } = await this.createPermissionDto(await this.extractCreatePermissionDtoToEntityData(createPermissionDto, em));
68
+ roles.forEach((role) => {
69
+ if (rolesCache[role.id] &&
70
+ role.permissions !== rolesCache[role.id].permissions) {
71
+ role.permissions.getItems().forEach((permission) => {
72
+ if (!rolesCache[role.id].permissions.contains(permission)) {
73
+ rolesCache[role.id].permissions.add(permission);
74
+ }
75
+ });
76
+ }
77
+ else {
78
+ rolesCache[role.id] = role;
79
+ }
80
+ });
81
+ permissions.push(permission);
82
+ });
83
+ await (em ?? this.em).persist([
84
+ ...permissions,
85
+ ...Object.values(rolesCache)
86
+ ]);
87
+ });
88
+ return permissions.map((permission) => this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission));
89
+ }
90
+ async getPermission(idDto, em) {
91
+ const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
92
+ return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission);
93
+ }
94
+ async getBatchPermissions(idsDto, em) {
95
+ return (await (em ?? this.em).find('Permission', idsDto)).map((permission) => this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission));
96
+ }
97
+ // start: updatePermission helper functions
98
+ updatePermissionDto = async (permissionDto, em) => {
99
+ const permission = this.#dtoMappers.UpdatePermissionDtoMapper.deserializeDtoToEntity(permissionDto);
100
+ const addToRoles = permissionDto.addToRolesIds
101
+ ? await this.getBatchRoles({ ids: permissionDto.addToRolesIds }, em)
102
+ : [];
103
+ const removeFromRoles = permissionDto.removeFromRolesIds
104
+ ? await this.getBatchRoles({ ids: permissionDto.removeFromRolesIds }, em)
105
+ : [];
106
+ let roles = [];
107
+ roles = roles.concat(await this.updateRolesWithPermissions(addToRoles, [permission]));
108
+ roles = roles.concat(await this.removePermissionsFromRoles(removeFromRoles, [permission]));
109
+ return {
110
+ permission,
111
+ roles
112
+ };
113
+ };
114
+ // end: updatePermission helper functions
115
+ async updatePermission(permissionDto, em) {
116
+ const { permission, roles } = await this.updatePermissionDto(permissionDto);
117
+ await (em ?? this.em).upsertMany([permission, ...roles]);
118
+ if (!em) {
119
+ this.em.flush();
120
+ }
121
+ return this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission);
122
+ }
123
+ async updateBatchPermissions(permissionDtos, em) {
124
+ const rolesCache = {};
125
+ const permissions = [];
126
+ await (em ?? this.em).transactional(async (em) => {
127
+ permissionDtos.map(async (updatePermissionDto) => {
128
+ const { permission, roles } = await this.updatePermissionDto(updatePermissionDto);
129
+ roles.forEach((role) => {
130
+ if (rolesCache[role.id] &&
131
+ role.permissions !== rolesCache[role.id].permissions) {
132
+ role.permissions.getItems().forEach((permission) => {
133
+ if (!rolesCache[role.id].permissions.contains(permission)) {
134
+ rolesCache[role.id].permissions.add(permission);
135
+ }
136
+ });
137
+ }
138
+ else {
139
+ rolesCache[role.id] = role;
140
+ }
141
+ });
142
+ permissions.push(permission);
143
+ });
144
+ await (em ?? this.em).persist([
145
+ ...permissions,
146
+ ...Object.values(rolesCache)
147
+ ]);
148
+ });
149
+ return permissions.map((permission) => this.#dtoMappers.PermissionDtoMapper.serializeEntityToDto(permission));
150
+ }
151
+ async deletePermission(idDto, em) {
152
+ await (em ?? this.em).nativeDelete('Permission', idDto);
153
+ }
154
+ async deleteBatchPermissions(idsDto, em) {
155
+ await (em ?? this.em).nativeDelete('Permission', {
156
+ id: { $in: idsDto.ids }
157
+ });
158
+ }
159
+ }
@@ -0,0 +1,49 @@
1
+ import { MetricsDefinition, OpenTelemetryCollector } from '@forklaunch/core/http';
2
+ import { RoleService } from '@forklaunch/interfaces-iam/interfaces';
3
+ import { EntityManager } from '@mikro-orm/core';
4
+ import { IdDto, IdsDto } from '@forklaunch/common';
5
+ import { RequestDtoMapperConstructor, ResponseDtoMapperConstructor } from '@forklaunch/core/dtoMapper';
6
+ import { MapNestedDtoArraysToCollections } from '@forklaunch/core/services';
7
+ import { CreateRoleDto, RoleDto, UpdateRoleDto } from '@forklaunch/interfaces-iam/types';
8
+ import { AnySchemaValidator } from '@forklaunch/validator';
9
+ export declare class BaseRoleService<SchemaValidator extends AnySchemaValidator, Metrics extends MetricsDefinition = MetricsDefinition, Dto extends {
10
+ RoleDtoMapper: RoleDto;
11
+ CreateRoleDtoMapper: CreateRoleDto;
12
+ UpdateRoleDtoMapper: UpdateRoleDto;
13
+ } = {
14
+ RoleDtoMapper: RoleDto;
15
+ CreateRoleDtoMapper: CreateRoleDto;
16
+ UpdateRoleDtoMapper: UpdateRoleDto;
17
+ }, Entities extends {
18
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
19
+ CreateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
20
+ UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
21
+ } = {
22
+ RoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
23
+ CreateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
24
+ UpdateRoleDtoMapper: MapNestedDtoArraysToCollections<RoleDto, 'permissions'>;
25
+ }> implements RoleService {
26
+ #private;
27
+ em: EntityManager;
28
+ protected openTelemetryCollector: OpenTelemetryCollector<Metrics>;
29
+ protected schemaValidator: SchemaValidator;
30
+ protected dtoMappers: {
31
+ RoleDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
32
+ CreateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateRoleDtoMapper'], Entities['CreateRoleDtoMapper']>;
33
+ UpdateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateRoleDtoMapper'], Entities['UpdateRoleDtoMapper']>;
34
+ };
35
+ constructor(em: EntityManager, openTelemetryCollector: OpenTelemetryCollector<Metrics>, schemaValidator: SchemaValidator, dtoMappers: {
36
+ RoleDtoMapper: ResponseDtoMapperConstructor<SchemaValidator, Dto['RoleDtoMapper'], Entities['RoleDtoMapper']>;
37
+ CreateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['CreateRoleDtoMapper'], Entities['CreateRoleDtoMapper']>;
38
+ UpdateRoleDtoMapper: RequestDtoMapperConstructor<SchemaValidator, Dto['UpdateRoleDtoMapper'], Entities['UpdateRoleDtoMapper']>;
39
+ });
40
+ createRole(roleDto: Dto['CreateRoleDtoMapper'], em?: EntityManager): Promise<Dto['RoleDtoMapper']>;
41
+ createBatchRoles(roleDtos: Dto['CreateRoleDtoMapper'][], em?: EntityManager): Promise<Dto['RoleDtoMapper'][]>;
42
+ getRole(idDto: IdDto, em?: EntityManager): Promise<RoleDto>;
43
+ getBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<RoleDto[]>;
44
+ updateRole(roleDto: Dto['UpdateRoleDtoMapper'], em?: EntityManager): Promise<Dto['RoleDtoMapper']>;
45
+ updateBatchRoles(roleDtos: Dto['UpdateRoleDtoMapper'][], em?: EntityManager): Promise<Dto['RoleDtoMapper'][]>;
46
+ deleteRole(idDto: IdDto, em?: EntityManager): Promise<void>;
47
+ deleteBatchRoles(idsDto: IdsDto, em?: EntityManager): Promise<void>;
48
+ }
49
+ //# sourceMappingURL=role.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"role.service.d.ts","sourceRoot":"","sources":["../../services/role.service.ts"],"names":[],"mappings":"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"}