@forklaunch/implementation-iam-base 0.1.12 → 0.1.13

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 (75) 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 +183 -0
  4. package/lib/eject/domain/schemas/index.ts +4 -0
  5. package/lib/eject/domain/schemas/organization.schema.ts +53 -0
  6. package/lib/eject/domain/schemas/permission.schema.ts +36 -0
  7. package/lib/eject/domain/schemas/role.schema.ts +37 -0
  8. package/lib/eject/domain/schemas/user.schema.ts +53 -0
  9. package/lib/eject/services/index.ts +4 -0
  10. package/lib/eject/services/organization.service.ts +143 -0
  11. package/lib/eject/services/permission.service.ts +345 -0
  12. package/lib/eject/services/role.service.ts +179 -0
  13. package/lib/eject/services/user.service.ts +224 -0
  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 +200 -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 +50 -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 +74 -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 +112 -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 +47 -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 +59 -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 +103 -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 +144 -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 +284 -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 +47 -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 +83 -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 +179 -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 +2 -2
@@ -0,0 +1,26 @@
1
+ import { array, date, optional, string, unknown, uuid } from '@forklaunch/validator/zod';
2
+ import { PermissionSchema } from './permission.schema';
3
+ export const CreateRoleSchema = {
4
+ name: string,
5
+ permissionIds: optional(array(string)),
6
+ extraFields: optional(unknown)
7
+ };
8
+ export const UpdateRoleSchema = ({ uuidId }) => ({
9
+ id: uuidId ? uuid : string,
10
+ name: optional(string),
11
+ permissionIds: optional(array(string)),
12
+ extraFields: optional(unknown)
13
+ });
14
+ export const RoleSchema = ({ uuidId }) => ({
15
+ id: uuidId ? uuid : string,
16
+ name: string,
17
+ permissions: array(PermissionSchema({ uuidId })),
18
+ extraFields: optional(unknown),
19
+ createdAt: optional(date),
20
+ updatedAt: optional(date)
21
+ });
22
+ export const BaseRoleServiceSchemas = (options) => ({
23
+ CreateRoleSchema,
24
+ UpdateRoleSchema: UpdateRoleSchema(options),
25
+ RoleSchema: RoleSchema(options)
26
+ });
@@ -0,0 +1,179 @@
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 }: {
13
+ uuidId: boolean;
14
+ }) => {
15
+ id: import("zod").ZodString;
16
+ email: import("zod").ZodOptional<import("zod").ZodString>;
17
+ password: import("zod").ZodOptional<import("zod").ZodString>;
18
+ firstName: import("zod").ZodOptional<import("zod").ZodString>;
19
+ lastName: import("zod").ZodOptional<import("zod").ZodString>;
20
+ roleIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
21
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
22
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
23
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
24
+ };
25
+ export declare const UserSchema: ({ uuidId }: {
26
+ uuidId: boolean;
27
+ }) => {
28
+ id: import("zod").ZodString;
29
+ email: import("zod").ZodString;
30
+ firstName: import("zod").ZodString;
31
+ lastName: import("zod").ZodString;
32
+ roles: import("zod").ZodArray<import("zod").ZodObject<{
33
+ id: import("zod").ZodString;
34
+ name: import("zod").ZodString;
35
+ permissions: import("zod").ZodArray<import("zod").ZodObject<{
36
+ id: import("zod").ZodString;
37
+ slug: import("zod").ZodString;
38
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
39
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
40
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
41
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
42
+ id: string;
43
+ slug: string;
44
+ extraFields?: unknown;
45
+ createdAt?: Date | undefined;
46
+ updatedAt?: Date | undefined;
47
+ }, {
48
+ id: string;
49
+ slug: string;
50
+ extraFields?: unknown;
51
+ createdAt?: Date | undefined;
52
+ updatedAt?: Date | undefined;
53
+ }>, "many">;
54
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
55
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
56
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
57
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
58
+ id: string;
59
+ name: string;
60
+ permissions: {
61
+ id: string;
62
+ slug: string;
63
+ extraFields?: unknown;
64
+ createdAt?: Date | undefined;
65
+ updatedAt?: Date | undefined;
66
+ }[];
67
+ extraFields?: unknown;
68
+ createdAt?: Date | undefined;
69
+ updatedAt?: Date | undefined;
70
+ }, {
71
+ id: string;
72
+ name: string;
73
+ permissions: {
74
+ id: string;
75
+ slug: string;
76
+ extraFields?: unknown;
77
+ createdAt?: Date | undefined;
78
+ updatedAt?: Date | undefined;
79
+ }[];
80
+ extraFields?: unknown;
81
+ createdAt?: Date | undefined;
82
+ updatedAt?: Date | undefined;
83
+ }>, "many">;
84
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
85
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
86
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
87
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
88
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
89
+ };
90
+ export declare const BaseUserServiceSchemas: (options: {
91
+ uuidId: boolean;
92
+ }) => {
93
+ CreateUserSchema: {
94
+ email: import("zod").ZodString;
95
+ password: import("zod").ZodString;
96
+ firstName: import("zod").ZodString;
97
+ lastName: import("zod").ZodString;
98
+ organizationId: import("zod").ZodString;
99
+ roleIds: import("zod").ZodArray<import("zod").ZodString, "many">;
100
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
101
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
102
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
103
+ };
104
+ UpdateUserSchema: {
105
+ id: import("zod").ZodString;
106
+ email: import("zod").ZodOptional<import("zod").ZodString>;
107
+ password: import("zod").ZodOptional<import("zod").ZodString>;
108
+ firstName: import("zod").ZodOptional<import("zod").ZodString>;
109
+ lastName: import("zod").ZodOptional<import("zod").ZodString>;
110
+ roleIds: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString, "many">>;
111
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
112
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
113
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
114
+ };
115
+ UserSchema: {
116
+ id: import("zod").ZodString;
117
+ email: import("zod").ZodString;
118
+ firstName: import("zod").ZodString;
119
+ lastName: import("zod").ZodString;
120
+ roles: import("zod").ZodArray<import("zod").ZodObject<{
121
+ id: import("zod").ZodString;
122
+ name: import("zod").ZodString;
123
+ permissions: import("zod").ZodArray<import("zod").ZodObject<{
124
+ id: import("zod").ZodString;
125
+ slug: import("zod").ZodString;
126
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
127
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
128
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
129
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
130
+ id: string;
131
+ slug: string;
132
+ extraFields?: unknown;
133
+ createdAt?: Date | undefined;
134
+ updatedAt?: Date | undefined;
135
+ }, {
136
+ id: string;
137
+ slug: string;
138
+ extraFields?: unknown;
139
+ createdAt?: Date | undefined;
140
+ updatedAt?: Date | undefined;
141
+ }>, "many">;
142
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
143
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
144
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
145
+ }, import("zod").UnknownKeysParam, import("zod").ZodTypeAny, {
146
+ id: string;
147
+ name: string;
148
+ permissions: {
149
+ id: string;
150
+ slug: string;
151
+ extraFields?: unknown;
152
+ createdAt?: Date | undefined;
153
+ updatedAt?: Date | undefined;
154
+ }[];
155
+ extraFields?: unknown;
156
+ createdAt?: Date | undefined;
157
+ updatedAt?: Date | undefined;
158
+ }, {
159
+ id: string;
160
+ name: string;
161
+ permissions: {
162
+ id: string;
163
+ slug: string;
164
+ extraFields?: unknown;
165
+ createdAt?: Date | undefined;
166
+ updatedAt?: Date | undefined;
167
+ }[];
168
+ extraFields?: unknown;
169
+ createdAt?: Date | undefined;
170
+ updatedAt?: Date | undefined;
171
+ }>, "many">;
172
+ phoneNumber: import("zod").ZodOptional<import("zod").ZodString>;
173
+ subscription: import("zod").ZodOptional<import("zod").ZodString>;
174
+ extraFields: import("zod").ZodOptional<import("zod").ZodUnknown>;
175
+ createdAt: import("zod").ZodOptional<import("zod").ZodDate>;
176
+ updatedAt: import("zod").ZodOptional<import("zod").ZodDate>;
177
+ };
178
+ };
179
+ //# 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,YAAY;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE;;;;;;;;;;CAU9D,CAAC;AAEH,eAAO,MAAM,UAAU,GAAI,YAAY;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAWxD,CAAC;AAEH,eAAO,MAAM,sBAAsB,GAAI,SAAS;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAIjE,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 = (options) => ({
38
+ CreateUserSchema,
39
+ UpdateUserSchema: UpdateUserSchema(options),
40
+ UserSchema: UserSchema(options)
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/mappers';
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 mapperss: {
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, mapperss: {
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":"AAAA,OAAO,EAAE,KAAK,EAAsB,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAEL,2BAA2B,EAC3B,4BAA4B,EAE7B,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,iBAAiB,EACjB,sBAAsB,EACvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,+BAA+B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAC5E,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACtB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,qBAAa,uBAAuB,CAClC,eAAe,SAAS,kBAAkB,EAC1C,kBAAkB,EAClB,OAAO,SAAS,iBAAiB,GAAG,iBAAiB,EACrD,GAAG,SAAS;IACV,qBAAqB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAC3D,2BAA2B,EAAE,qBAAqB,CAAC;IACnD,2BAA2B,EAAE,qBAAqB,CAAC;CACpD,GAAG;IACF,qBAAqB,EAAE,eAAe,CAAC,kBAAkB,CAAC,CAAC;IAC3D,2BAA2B,EAAE,qBAAqB,CAAC;IACnD,2BAA2B,EAAE,qBAAqB,CAAC;CACpD,EACD,QAAQ,SAAS;IACf,qBAAqB,EAAE,+BAA+B,CACpD,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;IACF,2BAA2B,EAAE,+BAA+B,CAC1D,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;IACF,2BAA2B,EAAE,+BAA+B,CAC1D,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;CACH,GAAG;IACF,qBAAqB,EAAE,+BAA+B,CACpD,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;IACF,2BAA2B,EAAE,+BAA+B,CAC1D,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;IACF,2BAA2B,EAAE,+BAA+B,CAC1D,eAAe,CAAC,kBAAkB,CAAC,EACnC,OAAO,CACR,CAAC;CACH,CACD,YAAW,mBAAmB,CAAC,kBAAkB,CAAC;;IASzC,EAAE,EAAE,aAAa;IACxB,SAAS,CAAC,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC;IACjE,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,QAAQ,EAAE;QAClB,qBAAqB,EAAE,4BAA4B,CACjD,eAAe,EACf,GAAG,CAAC,uBAAuB,CAAC,EAC5B,QAAQ,CAAC,uBAAuB,CAAC,CAClC,CAAC;QACF,2BAA2B,EAAE,2BAA2B,CACtD,eAAe,EACf,GAAG,CAAC,6BAA6B,CAAC,EAClC,QAAQ,CAAC,6BAA6B,CAAC,CACxC,CAAC;QACF,2BAA2B,EAAE,2BAA2B,CACtD,eAAe,EACf,GAAG,CAAC,6BAA6B,CAAC,EAClC,QAAQ,CAAC,6BAA6B,CAAC,CACxC,CAAC;KACH;gBAnBM,EAAE,EAAE,aAAa,EACd,sBAAsB,EAAE,sBAAsB,CAAC,OAAO,CAAC,EACvD,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE;QAClB,qBAAqB,EAAE,4BAA4B,CACjD,eAAe,EACf,GAAG,CAAC,uBAAuB,CAAC,EAC5B,QAAQ,CAAC,uBAAuB,CAAC,CAClC,CAAC;QACF,2BAA2B,EAAE,2BAA2B,CACtD,eAAe,EACf,GAAG,CAAC,6BAA6B,CAAC,EAClC,QAAQ,CAAC,6BAA6B,CAAC,CACxC,CAAC;QACF,2BAA2B,EAAE,2BAA2B,CACtD,eAAe,EACf,GAAG,CAAC,6BAA6B,CAAC,EAClC,QAAQ,CAAC,6BAA6B,CAAC,CACxC,CAAC;KACH;IAKG,kBAAkB,CACtB,eAAe,EAAE,GAAG,CAAC,6BAA6B,CAAC,EACnD,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAelC,eAAe,CACnB,KAAK,EAAE,KAAK,EACZ,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAUlC,kBAAkB,CACtB,eAAe,EAAE,GAAG,CAAC,6BAA6B,CAAC,EACnD,EAAE,CAAC,EAAE,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAWlC,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;CAG1E"}
@@ -0,0 +1,35 @@
1
+ import { transformIntoInternalDtoMapper } from '@forklaunch/core/mappers';
2
+ export class BaseOrganizationService {
3
+ em;
4
+ openTelemetryCollector;
5
+ schemaValidator;
6
+ mapperss;
7
+ #mapperss;
8
+ constructor(em, openTelemetryCollector, schemaValidator, mapperss) {
9
+ this.em = em;
10
+ this.openTelemetryCollector = openTelemetryCollector;
11
+ this.schemaValidator = schemaValidator;
12
+ this.mapperss = mapperss;
13
+ this.#mapperss = transformIntoInternalDtoMapper(mapperss, schemaValidator);
14
+ }
15
+ async createOrganization(organizationDto, em) {
16
+ this.openTelemetryCollector.log('info', 'Creating organization');
17
+ const organization = this.#mapperss.CreateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
18
+ await (em ?? this.em).transactional(async (innerEm) => {
19
+ await innerEm.persist(organization);
20
+ });
21
+ return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(organization);
22
+ }
23
+ async getOrganization(idDto, em) {
24
+ const organization = await (em ?? this.em).findOneOrFail('Organization', idDto);
25
+ return this.#mapperss.OrganizationDtoMapper.serializeEntityToDto(organization);
26
+ }
27
+ async updateOrganization(organizationDto, em) {
28
+ const updatedOrganization = this.#mapperss.UpdateOrganizationDtoMapper.deserializeDtoToEntity(organizationDto);
29
+ await (em ?? this.em).upsert(updatedOrganization);
30
+ return this.#mapperss.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/mappers';
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 mapperss: {
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, mapperss: {
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,0BAA0B,CAAC;AAClC,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,QAAQ,EAAE;QAClB,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,QAAQ,EAAE;QAClB,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;YAMW,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;IAUhC,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;IAShC,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/mappers';
2
+ export class BasePermissionService {
3
+ em;
4
+ roleServiceFactory;
5
+ openTelemetryCollector;
6
+ schemaValidator;
7
+ mapperss;
8
+ #mapperss;
9
+ constructor(em, roleServiceFactory, openTelemetryCollector, schemaValidator, mapperss) {
10
+ this.em = em;
11
+ this.roleServiceFactory = roleServiceFactory;
12
+ this.openTelemetryCollector = openTelemetryCollector;
13
+ this.schemaValidator = schemaValidator;
14
+ this.mapperss = mapperss;
15
+ this.#mapperss = transformIntoInternalDtoMapper(mapperss, 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.#mapperss.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.#mapperss.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.#mapperss.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.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission));
89
+ }
90
+ async getPermission(idDto, em) {
91
+ const permission = await (em ?? this.em).findOneOrFail('Permission', idDto);
92
+ return this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission);
93
+ }
94
+ async getBatchPermissions(idsDto, em) {
95
+ return (await (em ?? this.em).find('Permission', idsDto)).map((permission) => this.#mapperss.PermissionDtoMapper.serializeEntityToDto(permission));
96
+ }
97
+ // start: updatePermission helper functions
98
+ updatePermissionDto = async (permissionDto, em) => {
99
+ const permission = this.#mapperss.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.#mapperss.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.#mapperss.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/mappers';
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 mapperss: {
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, mapperss: {
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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"}