@memberjunction/server 2.1.1 → 2.1.3

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 (202) hide show
  1. package/dist/apolloServer/TransactionPlugin.d.ts +4 -0
  2. package/dist/apolloServer/TransactionPlugin.d.ts.map +1 -0
  3. package/dist/apolloServer/TransactionPlugin.js +46 -0
  4. package/dist/apolloServer/TransactionPlugin.js.map +1 -0
  5. package/dist/apolloServer/index.d.ts +11 -0
  6. package/dist/apolloServer/index.d.ts.map +1 -0
  7. package/dist/apolloServer/index.js +25 -0
  8. package/dist/apolloServer/index.js.map +1 -0
  9. package/dist/auth/exampleNewUserSubClass.d.ts +6 -0
  10. package/dist/auth/exampleNewUserSubClass.d.ts.map +1 -0
  11. package/dist/auth/exampleNewUserSubClass.js +49 -0
  12. package/dist/auth/exampleNewUserSubClass.js.map +1 -0
  13. package/dist/auth/index.d.ts +30 -0
  14. package/dist/auth/index.d.ts.map +1 -0
  15. package/dist/auth/index.js +121 -0
  16. package/dist/auth/index.js.map +1 -0
  17. package/dist/auth/newUsers.d.ts +5 -0
  18. package/dist/auth/newUsers.d.ts.map +1 -0
  19. package/{src/auth/newUsers.ts → dist/auth/newUsers.js} +20 -14
  20. package/dist/auth/newUsers.js.map +1 -0
  21. package/dist/auth/tokenExpiredError.d.ts +5 -0
  22. package/dist/auth/tokenExpiredError.d.ts.map +1 -0
  23. package/dist/auth/tokenExpiredError.js +12 -0
  24. package/dist/auth/tokenExpiredError.js.map +1 -0
  25. package/dist/cache.d.ts +3 -0
  26. package/dist/cache.d.ts.map +1 -0
  27. package/{src/cache.ts → dist/cache.js} +4 -6
  28. package/dist/cache.js.map +1 -0
  29. package/dist/config.d.ts +196 -0
  30. package/dist/config.d.ts.map +1 -0
  31. package/{src/config.ts → dist/config.js} +25 -49
  32. package/dist/config.js.map +1 -0
  33. package/dist/context.d.ts +17 -0
  34. package/dist/context.d.ts.map +1 -0
  35. package/dist/context.js +84 -0
  36. package/dist/context.js.map +1 -0
  37. package/dist/directives/Public.d.ts +4 -0
  38. package/dist/directives/Public.d.ts.map +1 -0
  39. package/dist/directives/Public.js +30 -0
  40. package/dist/directives/Public.js.map +1 -0
  41. package/dist/directives/index.d.ts +2 -0
  42. package/dist/directives/index.d.ts.map +1 -0
  43. package/dist/directives/index.js +2 -0
  44. package/dist/directives/index.js.map +1 -0
  45. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts +6 -0
  46. package/dist/entitySubclasses/DuplicateRunEntity.server.d.ts.map +1 -0
  47. package/dist/entitySubclasses/DuplicateRunEntity.server.js +33 -0
  48. package/dist/entitySubclasses/DuplicateRunEntity.server.js.map +1 -0
  49. package/dist/entitySubclasses/entityPermissions.server.d.ts +23 -0
  50. package/dist/entitySubclasses/entityPermissions.server.d.ts.map +1 -0
  51. package/dist/entitySubclasses/entityPermissions.server.js +93 -0
  52. package/dist/entitySubclasses/entityPermissions.server.js.map +1 -0
  53. package/dist/entitySubclasses/userViewEntity.server.d.ts +13 -0
  54. package/dist/entitySubclasses/userViewEntity.server.d.ts.map +1 -0
  55. package/dist/entitySubclasses/userViewEntity.server.js +161 -0
  56. package/dist/entitySubclasses/userViewEntity.server.js.map +1 -0
  57. package/dist/generated/generated.d.ts +6679 -0
  58. package/dist/generated/generated.d.ts.map +1 -0
  59. package/dist/generated/generated.js +40786 -0
  60. package/dist/generated/generated.js.map +1 -0
  61. package/dist/generic/DeleteOptionsInput.d.ts +5 -0
  62. package/dist/generic/DeleteOptionsInput.d.ts.map +1 -0
  63. package/dist/generic/DeleteOptionsInput.js +27 -0
  64. package/dist/generic/DeleteOptionsInput.js.map +1 -0
  65. package/dist/generic/KeyInputOutputTypes.d.ts +16 -0
  66. package/dist/generic/KeyInputOutputTypes.d.ts.map +1 -0
  67. package/dist/generic/KeyInputOutputTypes.js +65 -0
  68. package/dist/generic/KeyInputOutputTypes.js.map +1 -0
  69. package/dist/generic/KeyValuePairInput.d.ts +5 -0
  70. package/dist/generic/KeyValuePairInput.d.ts.map +1 -0
  71. package/dist/generic/KeyValuePairInput.js +27 -0
  72. package/dist/generic/KeyValuePairInput.js.map +1 -0
  73. package/dist/generic/PushStatusResolver.d.ts +14 -0
  74. package/dist/generic/PushStatusResolver.d.ts.map +1 -0
  75. package/dist/generic/PushStatusResolver.js +58 -0
  76. package/dist/generic/PushStatusResolver.js.map +1 -0
  77. package/dist/generic/ResolverBase.d.ts +39 -0
  78. package/dist/generic/ResolverBase.d.ts.map +1 -0
  79. package/dist/generic/ResolverBase.js +573 -0
  80. package/dist/generic/ResolverBase.js.map +1 -0
  81. package/dist/generic/RunViewResolver.d.ts +123 -0
  82. package/dist/generic/RunViewResolver.d.ts.map +1 -0
  83. package/dist/generic/RunViewResolver.js +728 -0
  84. package/dist/generic/RunViewResolver.js.map +1 -0
  85. package/dist/index.d.ts +26 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +108 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/orm.d.ts +4 -0
  90. package/dist/orm.d.ts.map +1 -0
  91. package/dist/orm.js +32 -0
  92. package/dist/orm.js.map +1 -0
  93. package/dist/resolvers/AskSkipResolver.d.ts +54 -0
  94. package/dist/resolvers/AskSkipResolver.d.ts.map +1 -0
  95. package/dist/resolvers/AskSkipResolver.js +805 -0
  96. package/dist/resolvers/AskSkipResolver.js.map +1 -0
  97. package/dist/resolvers/ColorResolver.d.ts +23 -0
  98. package/dist/resolvers/ColorResolver.d.ts.map +1 -0
  99. package/dist/resolvers/ColorResolver.js +97 -0
  100. package/dist/resolvers/ColorResolver.js.map +1 -0
  101. package/dist/resolvers/DatasetResolver.d.ts +42 -0
  102. package/dist/resolvers/DatasetResolver.d.ts.map +1 -0
  103. package/dist/resolvers/DatasetResolver.js +179 -0
  104. package/dist/resolvers/DatasetResolver.js.map +1 -0
  105. package/dist/resolvers/EntityCommunicationsResolver.d.ts +50 -0
  106. package/dist/resolvers/EntityCommunicationsResolver.d.ts.map +1 -0
  107. package/dist/resolvers/EntityCommunicationsResolver.js +280 -0
  108. package/dist/resolvers/EntityCommunicationsResolver.js.map +1 -0
  109. package/dist/resolvers/EntityRecordNameResolver.d.ts +21 -0
  110. package/dist/resolvers/EntityRecordNameResolver.d.ts.map +1 -0
  111. package/dist/resolvers/EntityRecordNameResolver.js +117 -0
  112. package/dist/resolvers/EntityRecordNameResolver.js.map +1 -0
  113. package/dist/resolvers/EntityResolver.d.ts +6 -0
  114. package/dist/resolvers/EntityResolver.d.ts.map +1 -0
  115. package/dist/resolvers/EntityResolver.js +57 -0
  116. package/dist/resolvers/EntityResolver.js.map +1 -0
  117. package/dist/resolvers/FileCategoryResolver.d.ts +6 -0
  118. package/dist/resolvers/FileCategoryResolver.d.ts.map +1 -0
  119. package/dist/resolvers/FileCategoryResolver.js +61 -0
  120. package/dist/resolvers/FileCategoryResolver.js.map +1 -0
  121. package/dist/resolvers/FileResolver.d.ts +24 -0
  122. package/dist/resolvers/FileResolver.d.ts.map +1 -0
  123. package/dist/resolvers/FileResolver.js +166 -0
  124. package/dist/resolvers/FileResolver.js.map +1 -0
  125. package/dist/resolvers/MergeRecordsResolver.d.ts +59 -0
  126. package/dist/resolvers/MergeRecordsResolver.d.ts.map +1 -0
  127. package/dist/resolvers/MergeRecordsResolver.js +282 -0
  128. package/dist/resolvers/MergeRecordsResolver.js.map +1 -0
  129. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts +29 -0
  130. package/dist/resolvers/PotentialDuplicateRecordResolver.d.ts.map +1 -0
  131. package/dist/resolvers/PotentialDuplicateRecordResolver.js +125 -0
  132. package/dist/resolvers/PotentialDuplicateRecordResolver.js.map +1 -0
  133. package/dist/resolvers/QueryResolver.d.ts +13 -0
  134. package/dist/resolvers/QueryResolver.d.ts.map +1 -0
  135. package/dist/resolvers/QueryResolver.js +77 -0
  136. package/dist/resolvers/QueryResolver.js.map +1 -0
  137. package/dist/resolvers/ReportResolver.d.ts +20 -0
  138. package/dist/resolvers/ReportResolver.d.ts.map +1 -0
  139. package/dist/resolvers/ReportResolver.js +182 -0
  140. package/dist/resolvers/ReportResolver.js.map +1 -0
  141. package/dist/resolvers/UserFavoriteResolver.d.ts +42 -0
  142. package/dist/resolvers/UserFavoriteResolver.d.ts.map +1 -0
  143. package/dist/resolvers/UserFavoriteResolver.js +230 -0
  144. package/dist/resolvers/UserFavoriteResolver.js.map +1 -0
  145. package/dist/resolvers/UserResolver.d.ts +10 -0
  146. package/dist/resolvers/UserResolver.d.ts.map +1 -0
  147. package/dist/resolvers/UserResolver.js +71 -0
  148. package/dist/resolvers/UserResolver.js.map +1 -0
  149. package/dist/resolvers/UserViewResolver.d.ts +13 -0
  150. package/dist/resolvers/UserViewResolver.d.ts.map +1 -0
  151. package/dist/resolvers/UserViewResolver.js +99 -0
  152. package/dist/resolvers/UserViewResolver.js.map +1 -0
  153. package/dist/types.d.ts +37 -0
  154. package/dist/types.d.ts.map +1 -0
  155. package/dist/types.js +2 -0
  156. package/dist/types.js.map +1 -0
  157. package/dist/util.d.ts +4 -0
  158. package/dist/util.d.ts.map +1 -0
  159. package/dist/util.js +85 -0
  160. package/dist/util.js.map +1 -0
  161. package/package.json +25 -21
  162. package/CHANGELOG.json +0 -3248
  163. package/CHANGELOG.md +0 -710
  164. package/src/apolloServer/TransactionPlugin.ts +0 -57
  165. package/src/apolloServer/index.ts +0 -33
  166. package/src/auth/exampleNewUserSubClass.ts +0 -74
  167. package/src/auth/index.ts +0 -151
  168. package/src/auth/tokenExpiredError.ts +0 -12
  169. package/src/context.ts +0 -111
  170. package/src/directives/Public.ts +0 -42
  171. package/src/directives/index.ts +0 -1
  172. package/src/entitySubclasses/DuplicateRunEntity.server.ts +0 -29
  173. package/src/entitySubclasses/entityPermissions.server.ts +0 -111
  174. package/src/entitySubclasses/userViewEntity.server.ts +0 -187
  175. package/src/generated/generated.ts +0 -25369
  176. package/src/generic/DeleteOptionsInput.ts +0 -13
  177. package/src/generic/KeyInputOutputTypes.ts +0 -35
  178. package/src/generic/KeyValuePairInput.ts +0 -14
  179. package/src/generic/PushStatusResolver.ts +0 -40
  180. package/src/generic/ResolverBase.ts +0 -767
  181. package/src/generic/RunViewResolver.ts +0 -582
  182. package/src/index.ts +0 -161
  183. package/src/orm.ts +0 -36
  184. package/src/resolvers/AskSkipResolver.ts +0 -926
  185. package/src/resolvers/ColorResolver.ts +0 -61
  186. package/src/resolvers/DatasetResolver.ts +0 -115
  187. package/src/resolvers/EntityCommunicationsResolver.ts +0 -216
  188. package/src/resolvers/EntityRecordNameResolver.ts +0 -78
  189. package/src/resolvers/EntityResolver.ts +0 -37
  190. package/src/resolvers/FileCategoryResolver.ts +0 -62
  191. package/src/resolvers/FileResolver.ts +0 -147
  192. package/src/resolvers/MergeRecordsResolver.ts +0 -182
  193. package/src/resolvers/PotentialDuplicateRecordResolver.ts +0 -91
  194. package/src/resolvers/QueryResolver.ts +0 -42
  195. package/src/resolvers/ReportResolver.ts +0 -147
  196. package/src/resolvers/UserFavoriteResolver.ts +0 -166
  197. package/src/resolvers/UserResolver.ts +0 -33
  198. package/src/resolvers/UserViewResolver.ts +0 -64
  199. package/src/types.ts +0 -40
  200. package/src/util.ts +0 -106
  201. package/tsconfig.json +0 -30
  202. package/typedoc.json +0 -4
@@ -1,61 +0,0 @@
1
- import { AppContext } from '../types';
2
- import { Ctx, Field, Int, ObjectType, PubSub, PubSubEngine, Query, Resolver, Root, Subscription } from 'type-graphql';
3
- import { Public } from '../directives';
4
-
5
- @ObjectType()
6
- export class Color {
7
- @Field(() => Int)
8
- @Public()
9
- ID: number;
10
-
11
- @Field(() => String)
12
- @Public()
13
- name: string;
14
-
15
- @Field(() => String)
16
- @Public()
17
- createdZ: string;
18
- }
19
-
20
- @ObjectType()
21
- export class ColorNotification {
22
- @Public()
23
- @Field(() => String, { nullable: true })
24
- message?: string;
25
-
26
- @Public()
27
- @Field((_type) => Date)
28
- date!: Date;
29
- }
30
-
31
- export interface ColorNotificationPayload {
32
- message?: string;
33
- }
34
-
35
- @Resolver(Color)
36
- export class ColorResolver {
37
- @Subscription(() => ColorNotification, { topics: 'COLOR' })
38
- @Public()
39
- colorSubscription(@Root() { message }: ColorNotificationPayload): ColorNotification {
40
- return { message, date: new Date() };
41
- }
42
-
43
- @Query(() => [Color])
44
- @Public()
45
- async colors(@Ctx() _ctx: AppContext, @PubSub() pubSub: PubSubEngine) {
46
- const createdZ = new Date().toISOString();
47
-
48
- pubSub.publish('COLOR', {
49
- message: 'Colors were requested!',
50
- });
51
-
52
- return [
53
- { ID: 1, name: 'Red', createdZ },
54
- { ID: 2, name: 'Orange', createdZ },
55
- { ID: 3, name: 'Yellow', createdZ },
56
- { ID: 4, name: 'Green', createdZ },
57
- { ID: 5, name: 'Blue', createdZ },
58
- { ID: 6, name: 'Purple', createdZ },
59
- ];
60
- }
61
- }
@@ -1,115 +0,0 @@
1
- import { Arg, Ctx, Field, InputType, Int, ObjectType, Query, Resolver } from 'type-graphql';
2
- import { AppContext } from '../types';
3
- import { LogError, Metadata } from '@memberjunction/core';
4
-
5
- @ObjectType()
6
- export class DatasetResultType {
7
- @Field(() => String)
8
- DatasetID: string;
9
-
10
- @Field(() => String)
11
- DatasetName: string;
12
-
13
- @Field(() => Boolean)
14
- Success: boolean;
15
-
16
- @Field(() => String)
17
- Status: string;
18
-
19
- @Field(() => Date)
20
- LatestUpdateDate: Date;
21
-
22
- @Field(() => String)
23
- Results: string;
24
- }
25
-
26
- @InputType()
27
- export class DatasetItemFilterTypeGQL {
28
- @Field(() => String)
29
- ItemCode: string;
30
-
31
- @Field(() => String)
32
- Filter: string;
33
- }
34
-
35
-
36
- @Resolver(DatasetResultType)
37
- export class DatasetResolverExtended {
38
- @Query(() => DatasetResultType)
39
- async GetDatasetByName(
40
- @Arg('DatasetName', () => String) DatasetName: string,
41
- @Ctx() {}: AppContext,
42
- @Arg('ItemFilters', () => [DatasetItemFilterTypeGQL], { nullable: 'itemsAndList' }) ItemFilters?: DatasetItemFilterTypeGQL[]
43
- ) {
44
- try {
45
- const md = new Metadata();
46
- const result = await md.GetDatasetByName(DatasetName, ItemFilters);
47
- if (result) {
48
- return {
49
- DatasetID: result.DatasetID,
50
- DatasetName: result.DatasetName,
51
- Success: result.Success,
52
- Status: result.Status,
53
- LatestUpdateDate: result.LatestUpdateDate,
54
- Results: JSON.stringify(result.Results),
55
- };
56
- } else {
57
- throw new Error('Error retrieving Dataset: ' + DatasetName);
58
- }
59
- } catch (err) {
60
- LogError(err);
61
- throw new Error('Error retrieving Dataset: ' + DatasetName + '\n\n' + err);
62
- }
63
- }
64
- }
65
-
66
- @ObjectType()
67
- export class DatasetStatusResultType {
68
- @Field(() => String)
69
- DatasetID: string;
70
-
71
- @Field(() => String)
72
- DatasetName: string;
73
-
74
- @Field(() => Boolean)
75
- Success: boolean;
76
-
77
- @Field(() => String)
78
- Status: string;
79
-
80
- @Field(() => Date)
81
- LatestUpdateDate: Date;
82
-
83
- @Field(() => String)
84
- EntityUpdateDates: string;
85
- }
86
-
87
- @Resolver(DatasetStatusResultType)
88
- export class DatasetStatusResolver {
89
- @Query(() => DatasetStatusResultType)
90
- async GetDatasetStatusByName(
91
- @Arg('DatasetName', () => String) DatasetName: string,
92
- @Ctx() {}: AppContext,
93
- @Arg('ItemFilters', () => [DatasetItemFilterTypeGQL], { nullable: 'itemsAndList' }) ItemFilters?: DatasetItemFilterTypeGQL[]
94
- ) {
95
- try {
96
- const md = new Metadata();
97
- const result = await md.GetDatasetStatusByName(DatasetName, ItemFilters);
98
- if (result) {
99
- return {
100
- DatasetID: result.DatasetID,
101
- DatasetName: result.DatasetName,
102
- Success: result.Success,
103
- Status: result.Status,
104
- LatestUpdateDate: result.LatestUpdateDate,
105
- EntityUpdateDates: JSON.stringify(result.EntityUpdateDates),
106
- };
107
- } else {
108
- throw new Error('Error retrieving Dataset Status: ' + DatasetName);
109
- }
110
- } catch (err) {
111
- LogError(err);
112
- throw new Error('Error retrieving Dataset Status: ' + DatasetName + '\n\n' + err);
113
- }
114
- }
115
- }
@@ -1,216 +0,0 @@
1
- import { Arg, Ctx, Field, InputType, Int, ObjectType, Query, Resolver } from 'type-graphql';
2
- import { AppContext } from '../types';
3
- import { RunViewByIDInput } from '../generic/RunViewResolver';
4
- import { Message } from '@memberjunction/communication-types';
5
- import { EntityCommunicationsEngine } from '@memberjunction/entity-communications-server';
6
- import { RunViewParams } from '@memberjunction/core';
7
- import { GraphQLJSONObject } from 'graphql-type-json';
8
- import { TemplateEngineServer } from '@memberjunction/templates';
9
- import { EntityCommunicationParams } from '@memberjunction/entity-communications-base';
10
-
11
-
12
- @InputType()
13
- export class CommunicationProviderMessageType {
14
- @Field()
15
- ID: number;
16
-
17
- @Field()
18
- CommunicationProviderID: number;
19
-
20
- @Field()
21
- CommunicationBaseMessageTypeID: number;
22
-
23
- @Field()
24
- Name: string;
25
-
26
- @Field()
27
- Status: string;
28
-
29
- @Field()
30
- AdditionalAttributes: string;
31
-
32
- @Field()
33
- _mj_CreatedAt: Date;
34
-
35
- @Field()
36
- _mj_UpdatedAt: Date;
37
-
38
- @Field()
39
- CommunicationProvider?: string;
40
-
41
- @Field()
42
- CommunicationBaseMessageType?: string;
43
- }
44
-
45
- @InputType()
46
- export class TemplateInputType {
47
- @Field()
48
- ID: number;
49
-
50
- @Field()
51
- Name: string;
52
-
53
- @Field()
54
- Description: string;
55
-
56
- @Field({ nullable: true})
57
- UserPrompt?: string;
58
-
59
- @Field({ nullable: true})
60
- CategoryID?: number;
61
-
62
- @Field()
63
- UserID: number;
64
-
65
- @Field({ nullable: true})
66
- ActiveAt?: Date;
67
-
68
- @Field({ nullable: true})
69
- DisabledAt?: Date;
70
-
71
- @Field()
72
- IsActive: boolean;
73
-
74
- @Field()
75
- _mj_CreatedAt: Date;
76
-
77
- @Field()
78
- _mj_UpdatedAt: Date;
79
-
80
- @Field({ nullable: true})
81
- Category?: string;
82
-
83
- @Field({ nullable: true})
84
- User?: string;
85
- }
86
- @InputType()
87
- export class CommunicationMessageInput {
88
- /**
89
- * The type of message to send
90
- */
91
- @Field(() => CommunicationProviderMessageType)
92
- public MessageType: CommunicationProviderMessageType;
93
-
94
- /**
95
- * The sender of the message, typically an email address but can be anything that is provider-specific for example for a provider that is a social
96
- * media provider, it might be a user's social media handle
97
- */
98
- @Field()
99
- public From: string;
100
-
101
- /**
102
- * The recipient of the message, typically an email address but can be anything that is provider-specific for example for a provider that is a social
103
- * media provider, it might be a user's social media handle
104
- */
105
- @Field()
106
- public To: string;
107
-
108
- /**
109
- * The body of the message, used if BodyTemplate is not provided.
110
- */
111
- @Field({ nullable: true })
112
- public Body?: string;
113
- /**
114
- * Optional, when provided, Body is ignored and the template is used to render the message. In addition,
115
- * if BodyTemplate is provided it will be used to render the Body and if the template has HTML content it will
116
- * also be used to render the HTMLBody
117
- */
118
- @Field(() => TemplateInputType, { nullable: true })
119
- public BodyTemplate?: TemplateInputType;
120
-
121
- /**
122
- * The HTML body of the message
123
- */
124
- @Field({ nullable: true })
125
- public HTMLBody?: string;
126
- /**
127
- * Optional, when provided, HTMLBody is ignored and the template is used to render the message. This OVERRIDES
128
- * the BodyTemplate's HTML content even if BodyTemplate is provided. This allows for flexibility in that you can
129
- * specify a completely different HTMLBodyTemplate and not just relay on the TemplateContent of the BodyTemplate having
130
- * an HTML option.
131
- */
132
- @Field(() => TemplateInputType, { nullable: true })
133
- public HTMLBodyTemplate?: TemplateInputType;
134
-
135
- /**
136
- * The subject line for the message, used if SubjectTemplate is not provided and only supported by some providers
137
- */
138
- @Field({ nullable: true })
139
- public Subject?: string;
140
- /**
141
- * Optional, when provided, Subject is ignored and the template is used to render the message
142
- */
143
- @Field(() => TemplateInputType, { nullable: true })
144
- public SubjectTemplate?: TemplateInputType;
145
-
146
- /**
147
- * Optional, any context data that is needed to render the message template
148
- */
149
- @Field(() => GraphQLJSONObject, { nullable: true })
150
- public ContextData?: any;
151
- }
152
-
153
- @ObjectType()
154
- export class RunEntityCommunicationResultType {
155
- @Field()
156
- Success: boolean;
157
-
158
- @Field({nullable: true})
159
- ErrorMessage?: string;
160
-
161
- /**
162
- * Optional, any context data that is needed to render the message template
163
- */
164
- @Field(() => GraphQLJSONObject, { nullable: true })
165
- public Results?: any;
166
- }
167
-
168
- @Resolver(RunEntityCommunicationResultType)
169
- export class ReportResolver {
170
- @Query(() => RunEntityCommunicationResultType)
171
- async RunEntityCommunicationByViewID( @Arg('entityID', () => String) entityID: string,
172
- @Arg('runViewByIDInput', () => RunViewByIDInput) runViewByIDInput: RunViewByIDInput,
173
- @Arg('providerName', () => String) providerName: string,
174
- @Arg('providerMessageTypeName', () => String) providerMessageTypeName: string,
175
- @Arg('message', () => CommunicationMessageInput) message: CommunicationMessageInput,
176
- @Arg('previewOnly', () => Boolean) previewOnly: boolean,
177
- @Arg('includeProcessedMessages', () => Boolean) includeProcessedMessages: boolean,
178
- @Ctx() { userPayload }: AppContext): Promise<RunEntityCommunicationResultType> {
179
- try {
180
- await EntityCommunicationsEngine.Instance.Config(false, userPayload.userRecord);
181
- const newMessage = new Message(message as unknown as Message);
182
- await TemplateEngineServer.Instance.Config(false, userPayload.userRecord);
183
- // for the templates, replace the values from the input with the objects from the Template Engine we have here
184
- if (newMessage.BodyTemplate) {
185
- newMessage.BodyTemplate = TemplateEngineServer.Instance.FindTemplate(newMessage.BodyTemplate.Name);
186
- }
187
- if (newMessage.HTMLBodyTemplate) {
188
- newMessage.HTMLBodyTemplate = TemplateEngineServer.Instance.FindTemplate(newMessage.HTMLBodyTemplate.Name);
189
- }
190
- if (newMessage.SubjectTemplate) {
191
- newMessage.SubjectTemplate = TemplateEngineServer.Instance.FindTemplate(newMessage.SubjectTemplate.Name);
192
- }
193
- const params: EntityCommunicationParams = {
194
- EntityID: entityID,
195
- RunViewParams: <RunViewParams>runViewByIDInput,
196
- ProviderName: providerName,
197
- ProviderMessageTypeName: providerMessageTypeName,
198
- Message: newMessage,
199
- PreviewOnly: previewOnly,
200
- IncludeProcessedMessages: includeProcessedMessages
201
- }
202
- const result = await EntityCommunicationsEngine.Instance.RunEntityCommunication(params);
203
- return {
204
- Success: result.Success,
205
- ErrorMessage: result.ErrorMessage,
206
- Results: includeProcessedMessages && result.Results ? {Results: result.Results} : undefined
207
- };
208
- }
209
- catch (e) {
210
- return {
211
- Success: false,
212
- ErrorMessage: e.message
213
- }
214
- }
215
- }
216
- }
@@ -1,78 +0,0 @@
1
- import { Metadata, CompositeKey } from '@memberjunction/core';
2
- import { Arg, Ctx, Field, InputType, ObjectType, Query, Resolver } from 'type-graphql';
3
- import { AppContext } from '../types';
4
- import { CompositeKeyInputType, CompositeKeyOutputType } from '../generic/KeyInputOutputTypes';
5
-
6
- @InputType()
7
- export class EntityRecordNameInput {
8
- @Field(() => String)
9
- EntityName: string;
10
-
11
- @Field(() => CompositeKeyInputType)
12
- CompositeKey: CompositeKey;
13
- }
14
-
15
- @ObjectType()
16
- export class EntityRecordNameResult {
17
- @Field(() => Boolean)
18
- Success: boolean;
19
-
20
- @Field(() => String)
21
- Status: string;
22
-
23
- @Field(() => CompositeKeyOutputType)
24
- CompositeKey: CompositeKey;
25
-
26
- @Field(() => String)
27
- EntityName: string;
28
-
29
- @Field(() => String, { nullable: true })
30
- RecordName?: string;
31
- }
32
-
33
- @Resolver(EntityRecordNameResult)
34
- export class EntityRecordNameResolver {
35
- @Query(() => EntityRecordNameResult)
36
- async GetEntityRecordName(
37
- @Arg('EntityName', () => String) EntityName: string,
38
- @Arg('CompositeKey', () => CompositeKeyInputType) primaryKey: CompositeKey,
39
- @Ctx() {userPayload}: AppContext
40
- ): Promise<EntityRecordNameResult> {
41
- const md = new Metadata();
42
- return await this.InnerGetEntityRecordName(md, EntityName, primaryKey);
43
- }
44
-
45
- @Query(() => [EntityRecordNameResult])
46
- async GetEntityRecordNames(
47
- @Arg('info', () => [EntityRecordNameInput]) info: EntityRecordNameInput[],
48
- @Ctx() {}: AppContext
49
- ): Promise<EntityRecordNameResult[]> {
50
- const result: EntityRecordNameResult[] = [];
51
- const md = new Metadata();
52
- for (const i of info) {
53
- result.push(await this.InnerGetEntityRecordName(md, i.EntityName, i.CompositeKey));
54
- }
55
- return result;
56
- }
57
-
58
- async InnerGetEntityRecordName(md: Metadata, EntityName: string, primaryKey: CompositeKeyInputType): Promise<EntityRecordNameResult> {
59
- const pk = new CompositeKey(primaryKey.KeyValuePairs);
60
- const e = md.Entities.find((e) => e.Name === EntityName);
61
- if (e) {
62
- const recordName = await md.GetEntityRecordName(e.Name, pk);
63
- if (recordName)
64
- return { Success: true, Status: 'OK', CompositeKey: pk, RecordName: recordName, EntityName };
65
- else
66
- return {
67
- Success: false,
68
- Status: `Name for record, or record ${pk.ToString()} itself not found, could be an access issue if user doesn't have Row Level Access (RLS) if RLS is enabled for this entity`,
69
- CompositeKey: pk,
70
- EntityName
71
- };
72
- }
73
- else
74
- return { Success: false, Status: `Entity ${EntityName} not found`, CompositeKey: pk, EntityName };
75
- }
76
- }
77
-
78
- export default EntityRecordNameResolver;
@@ -1,37 +0,0 @@
1
- import { EntityPermissionType } from '@memberjunction/core';
2
- import { AppContext } from '../types';
3
- import { Arg, Ctx, Query, Resolver, InputType, Field } from 'type-graphql';
4
- import { Entity_, EntityResolverBase } from '../generated/generated';
5
-
6
-
7
-
8
- @Resolver(Entity_)
9
- export class EntityResolver extends EntityResolverBase {
10
- @Query(() => [Entity_])
11
- EntitiesBySchemas(
12
- @Ctx() { dataSource, userPayload }: AppContext,
13
- @Arg('IncludeSchemas', () => [String], { nullable: true }) IncludeSchemas?: string[],
14
- @Arg('ExcludeSchemas', () => [String], { nullable: true }) ExcludeSchemas?: string[]
15
- ) {
16
- this.CheckUserReadPermissions('Entities', userPayload);
17
- const rlsWhere = this.getRowLevelSecurityWhereClause('Entities', userPayload, EntityPermissionType.Read, ' WHERE');
18
- const includeSchemaSQL =
19
- IncludeSchemas && IncludeSchemas.length > 0 ? `SchemaName IN (${IncludeSchemas.map((s) => `'${s}'`).join(',')})` : '';
20
- const excludeSchemaSQL =
21
- ExcludeSchemas && ExcludeSchemas.length > 0 ? `SchemaName NOT IN (${ExcludeSchemas.map((s) => `'${s}'`).join(',')})` : '';
22
- let schemaSQL = '';
23
- if (includeSchemaSQL) schemaSQL = includeSchemaSQL;
24
- if (excludeSchemaSQL) {
25
- if (schemaSQL) schemaSQL = `${schemaSQL} AND ${excludeSchemaSQL}`;
26
- else schemaSQL = excludeSchemaSQL;
27
- }
28
- let totalWhere = '';
29
- if (schemaSQL) totalWhere = ` WHERE ${schemaSQL}`;
30
- if (rlsWhere) {
31
- if (totalWhere) totalWhere = `${totalWhere} AND ${rlsWhere}`;
32
- else totalWhere = ` WHERE ${rlsWhere}`;
33
- }
34
- const sSQL = `SELECT * FROM [${this.MJCoreSchema}].vwEntities${totalWhere}`;
35
- return dataSource.query(sSQL);
36
- }
37
- }
@@ -1,62 +0,0 @@
1
- import { CompositeKey, EntityPermissionType, Metadata, RunView } from '@memberjunction/core';
2
- import { FileCategoryEntity, FileEntity } from '@memberjunction/core-entities';
3
- import { AppContext, Arg, Ctx, DeleteOptionsInput, Int, Mutation } from '@memberjunction/server';
4
- import { mj_core_schema } from '../config';
5
- import { FileCategoryResolver as FileCategoryResolverBase, FileCategory_ } from '../generated/generated';
6
-
7
- export class FileResolver extends FileCategoryResolverBase {
8
- @Mutation(() => FileCategory_)
9
- async DeleteFileCategory(@Arg('ID', () => String) ID: string, @Arg('options___', () => DeleteOptionsInput) options: DeleteOptionsInput, @Ctx() { dataSource, userPayload }: AppContext) {
10
- const key = new CompositeKey();
11
- key.LoadFromSingleKeyValuePair('ID', ID);
12
- if (!(await this.BeforeDelete(dataSource, key))) {
13
- return null;
14
- }
15
-
16
- const md = new Metadata();
17
- const user = this.GetUserFromPayload(userPayload);
18
- const fileEntity = await md.GetEntityObject<FileEntity>('Files', user);
19
- const fileCategoryEntity = await md.GetEntityObject<FileCategoryEntity>('File Categories', user);
20
-
21
- fileEntity.CheckPermissions(EntityPermissionType.Update, true);
22
- fileCategoryEntity.CheckPermissions(EntityPermissionType.Delete, true);
23
-
24
- await fileCategoryEntity.Load(ID);
25
- const returnValue = fileCategoryEntity.GetAll();
26
-
27
- // Any files using the deleted category fall back to its parent
28
- await dataSource.transaction(async () => {
29
- // SHOULD USE BaseEntity for each of these records to ensure object model
30
- // is used everywhere - new code below. The below is SLOWER than a single
31
- // Update statement, but it ensures that the object model is used everywhere
32
- // in case there are sub-classes and business logic/etc for the updates
33
- // the direct SQL would bypass that logic.
34
-
35
- // const sSQL = `UPDATE [${mj_core_schema}].[File]
36
- // SET [CategoryID]=${fileCategoryEntity.ParentID}
37
- // WHERE [CategoryID]=${fileCategoryEntity.ID}`;
38
-
39
- // await dataSource.query(sSQL);
40
- const rv = new RunView();
41
- const filesResult = await rv.RunView({
42
- EntityName: 'Files',
43
- ExtraFilter: `CategoryID='${fileCategoryEntity.ID}'`,
44
- ResultType: 'entity_object'
45
- }, user);
46
- if (filesResult) {
47
- // iterate through each of the files in filesResult.Results
48
- // and update the CategoryID to fileCategoryEntity.ParentID
49
- for (const file of filesResult.Results) {
50
- const fileEntity = await md.GetEntityObject<FileEntity>('Files', user);
51
- await fileEntity.Load(file.ID);
52
- fileEntity.CategoryID = fileCategoryEntity.ParentID;
53
- await fileEntity.Save();
54
- }
55
- }
56
- await fileCategoryEntity.Delete();
57
- });
58
-
59
- await this.AfterDelete(dataSource, key); // fire event
60
- return returnValue;
61
- }
62
- }