@memberjunction/external-change-detection 1.7.0

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.
@@ -0,0 +1,56 @@
1
+ import { BaseEngine, CompositeKey, EntityInfo, UserInfo } from "@memberjunction/core";
2
+ /**
3
+ * Represents a change to a single field in a record
4
+ */
5
+ export declare class FieldChange {
6
+ FieldName: string;
7
+ OldValue: any;
8
+ NewValue: any;
9
+ }
10
+ /**
11
+ * Represents a change to a single record in an entity
12
+ */
13
+ export declare class ChangeDetectionItem {
14
+ Entity: EntityInfo;
15
+ PrimaryKey: CompositeKey;
16
+ Type: 'Create' | 'Update' | 'Delete';
17
+ ChangedAt: Date;
18
+ Changes: FieldChange[];
19
+ }
20
+ /**
21
+ * Result type for a change detection operation
22
+ */
23
+ export declare class ChangeDetectionResult {
24
+ Success: boolean;
25
+ ErrorMessage?: string;
26
+ Changes: ChangeDetectionItem[];
27
+ }
28
+ /**
29
+ * Engine to handle detection of external changes and "replay" them in MemberJunction to invoke all standard functionality
30
+ * such as BaseEntity sub-classes as well as any custom logic that are tied to the system via Actions/AI Actions/etc...
31
+ */
32
+ export declare class ExternalChangeDetectorEngine extends BaseEngine<ExternalChangeDetectorEngine> {
33
+ Config(forceRefresh?: boolean, contextUser?: UserInfo): Promise<void>;
34
+ static get Instance(): ExternalChangeDetectorEngine;
35
+ private _EligibleEntities;
36
+ /**
37
+ * A list of the entities that are eligible for external change detection
38
+ */
39
+ get EligibleEntities(): EntityInfo[];
40
+ /**
41
+ * Detects external changes for a single entity
42
+ * @param entity
43
+ */
44
+ DetectChangesForEntity(entity: EntityInfo): Promise<ChangeDetectionResult>;
45
+ protected getPrimaryKeyString(entity: EntityInfo, tablePrefix: string): string;
46
+ protected generateDetectUpdatesQuery(entity: EntityInfo): string;
47
+ protected generateDetectCreationsQuery(entity: EntityInfo): string;
48
+ protected generateDetectDeletionsQuery(entity: EntityInfo): string;
49
+ /**
50
+ * Detects changes across all of the entities specified
51
+ * @returns
52
+ */
53
+ DetectChangesForEntities(entities: EntityInfo[]): Promise<ChangeDetectionResult>;
54
+ DetectChangesForAllEligibleEntities(): Promise<ChangeDetectionResult>;
55
+ }
56
+ //# sourceMappingURL=ChangeDetector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeDetector.d.ts","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAA4B,YAAY,EAAE,UAAU,EAAsB,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAIpI;;GAEG;AACH,qBAAa,WAAW;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC;CACxB;AAED;;GAEG;AACH,qBAAa,mBAAmB;IACrB,MAAM,EAAE,UAAU,CAAC;IACnB,UAAU,EAAE,YAAY,CAAC;IACzB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,WAAW,EAAE,CAAC;CACjC;AAED;;GAEG;AACH,qBAAa,qBAAqB;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,mBAAmB,EAAE,CAAC;CACzC;AAED;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,UAAU,CAAC,4BAA4B,CAAC;IACzE,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,QAAQ;IAalE,WAAkB,QAAQ,IAAI,4BAA4B,CAEzD;IAED,OAAO,CAAC,iBAAiB,CAAe;IACxC;;OAEG;IACH,IAAW,gBAAgB,IAAI,UAAU,EAAE,CAE1C;IAED;;;OAGG;IACU,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAoFvF,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAM9E,SAAS,CAAC,0BAA0B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAuBhE,SAAS,CAAC,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAelE,SAAS,CAAC,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAmBlE;;;OAGG;IACU,wBAAwB,CAAC,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAwBhF,mCAAmC,IAAI,OAAO,CAAC,qBAAqB,CAAC;CAGrF"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExternalChangeDetectorEngine = exports.ChangeDetectionResult = exports.ChangeDetectionItem = exports.FieldChange = void 0;
4
+ const core_1 = require("@memberjunction/core");
5
+ /**
6
+ * Represents a change to a single field in a record
7
+ */
8
+ class FieldChange {
9
+ }
10
+ exports.FieldChange = FieldChange;
11
+ /**
12
+ * Represents a change to a single record in an entity
13
+ */
14
+ class ChangeDetectionItem {
15
+ }
16
+ exports.ChangeDetectionItem = ChangeDetectionItem;
17
+ /**
18
+ * Result type for a change detection operation
19
+ */
20
+ class ChangeDetectionResult {
21
+ }
22
+ exports.ChangeDetectionResult = ChangeDetectionResult;
23
+ /**
24
+ * Engine to handle detection of external changes and "replay" them in MemberJunction to invoke all standard functionality
25
+ * such as BaseEntity sub-classes as well as any custom logic that are tied to the system via Actions/AI Actions/etc...
26
+ */
27
+ class ExternalChangeDetectorEngine extends core_1.BaseEngine {
28
+ async Config(forceRefresh, contextUser) {
29
+ const provider = core_1.Metadata.Provider;
30
+ const c = [
31
+ {
32
+ EntityName: "Entities",
33
+ PropertyName: "_EligibleEntities",
34
+ Filter: `ID IN (SELECT ID FROM ${provider.MJCoreSchemaName}.vwEntitiesWithExternalChangeTracking)` // limit to entities that are in this view. This view has the logic which basically is TrackRecordChanges=1 and also has an UpdatedAt field
35
+ }
36
+ ];
37
+ await this.Load(c, forceRefresh, contextUser);
38
+ }
39
+ static get Instance() {
40
+ return super.getInstance();
41
+ }
42
+ /**
43
+ * A list of the entities that are eligible for external change detection
44
+ */
45
+ get EligibleEntities() {
46
+ return this._EligibleEntities;
47
+ }
48
+ /**
49
+ * Detects external changes for a single entity
50
+ * @param entity
51
+ */
52
+ async DetectChangesForEntity(entity) {
53
+ try {
54
+ const sqlCreates = this.generateDetectCreationsQuery(entity);
55
+ const sqlUpdates = this.generateDetectUpdatesQuery(entity);
56
+ const sqlDeletes = this.generateDetectDeletionsQuery(entity);
57
+ const provider = core_1.Metadata.Provider;
58
+ const createResult = await provider.ExecuteSQL(sqlCreates);
59
+ const updateResult = await provider.ExecuteSQL(sqlUpdates);
60
+ const deleteResult = await provider.ExecuteSQL(sqlDeletes);
61
+ // we have the results for all of the queries, now we need to convert them into ChangeDetectionItems
62
+ const changes = [];
63
+ if (createResult && createResult.length > 0) {
64
+ createResult.forEach(row => {
65
+ const item = new ChangeDetectionItem();
66
+ item.Entity = entity;
67
+ item.PrimaryKey = new core_1.CompositeKey(entity.PrimaryKeys.map(pk => {
68
+ return {
69
+ FieldName: pk.Name,
70
+ Value: row[pk.Name]
71
+ };
72
+ }));
73
+ item.Type = 'Create';
74
+ item.ChangedAt = row.CreatedAt;
75
+ item.Changes = [];
76
+ changes.push(item);
77
+ });
78
+ }
79
+ if (updateResult && updateResult.length > 0) {
80
+ updateResult.forEach(row => {
81
+ const item = new ChangeDetectionItem();
82
+ item.Entity = entity;
83
+ item.PrimaryKey = new core_1.CompositeKey(entity.PrimaryKeys.map(pk => {
84
+ return {
85
+ FieldName: pk.Name,
86
+ Value: row[pk.Name]
87
+ };
88
+ }));
89
+ item.Type = 'Update';
90
+ item.ChangedAt = row.UpdatedAt;
91
+ item.Changes = [];
92
+ // push the item but first make sure it is NOT already in the changes from the
93
+ // create detection, if it is, we do not push it into changes
94
+ if (!changes.find(c => c.PrimaryKey.Equals(item.PrimaryKey))) {
95
+ changes.push(item);
96
+ }
97
+ });
98
+ }
99
+ if (deleteResult && deleteResult.length > 0) {
100
+ deleteResult.forEach(row => {
101
+ const item = new ChangeDetectionItem();
102
+ item.Entity = entity;
103
+ item.PrimaryKey = new core_1.CompositeKey(entity.PrimaryKeys.map(pk => {
104
+ return {
105
+ FieldName: pk.Name,
106
+ Value: row.RecordID
107
+ };
108
+ }));
109
+ item.Type = 'Delete';
110
+ item.ChangedAt = row.ChangeDate;
111
+ item.Changes = [];
112
+ changes.push(item);
113
+ });
114
+ }
115
+ return {
116
+ Success: true,
117
+ Changes: changes
118
+ };
119
+ }
120
+ catch (e) {
121
+ (0, core_1.LogError)(e);
122
+ return {
123
+ Success: false,
124
+ ErrorMessage: e.message,
125
+ Changes: []
126
+ };
127
+ }
128
+ }
129
+ getPrimaryKeyString(entity, tablePrefix) {
130
+ return entity.PrimaryKeys.length === 1 ?
131
+ `${tablePrefix}.${entity.PrimaryKeys[0].Name}` :
132
+ entity.PrimaryKeys.map(pk => `'${pk.Name}|' + CAST(${tablePrefix}.[${pk.Name}] AS NVARCHAR(MAX))`).join(` + '||' + `);
133
+ }
134
+ generateDetectUpdatesQuery(entity) {
135
+ const primaryKeyString = this.getPrimaryKeyString(entity, 'ot');
136
+ return `
137
+ SELECT
138
+ ${entity.PrimaryKeys.map(pk => `ot.[${pk.Name}]`).join(', ')}, ot.UpdatedAt
139
+ FROM
140
+ [${entity.SchemaName}].[${entity.BaseView}] ot
141
+ LEFT JOIN (
142
+ SELECT
143
+ RecordID, MAX(ChangedAt) AS last_change_time
144
+ FROM
145
+ __mj.vwRecordChanges
146
+ WHERE
147
+ Type IN ('Update', 'Create')
148
+ GROUP BY
149
+ RecordID
150
+ ) rc ON ${primaryKeyString} = rc.RecordID
151
+ WHERE
152
+ ot.UpdatedAt > COALESCE(rc.last_change_time, '1900-01-01');
153
+ `;
154
+ }
155
+ generateDetectCreationsQuery(entity) {
156
+ const primaryKeyString = this.getPrimaryKeyString(entity, 'ot');
157
+ return `
158
+ SELECT
159
+ ${entity.PrimaryKeys.map(pk => `ot.[${pk.Name}]`).join(', ')}, ot.CreatedAt
160
+ FROM
161
+ [${entity.SchemaName}].[${entity.BaseView}] ot
162
+ LEFT JOIN
163
+ __mj.vwRecordChanges rc ON ${primaryKeyString} = rc.RecordID AND rc.Type = 'Create'
164
+ WHERE
165
+ rc.RecordID IS NULL;
166
+ `;
167
+ }
168
+ generateDetectDeletionsQuery(entity) {
169
+ const primaryKeyString = this.getPrimaryKeyString(entity, 'ot');
170
+ return `
171
+ SELECT
172
+ rc.RecordID, rc.ChangedAt
173
+ FROM
174
+ __mj.vwRecordChanges rc
175
+ LEFT JOIN
176
+ [${entity.SchemaName}].[${entity.BaseView}] ot ON ${primaryKeyString} = rc.RecordID
177
+ WHERE
178
+ ${entity.PrimaryKeys.map(pk => `ot.[${pk.Name}] IS NULL`).join(' AND ')}
179
+ AND
180
+ rc.Type IN ('Create', 'Update');
181
+ `;
182
+ }
183
+ /**
184
+ * Detects changes across all of the entities specified
185
+ * @returns
186
+ */
187
+ async DetectChangesForEntities(entities) {
188
+ try {
189
+ const result = new ChangeDetectionResult();
190
+ result.Success = true;
191
+ result.Changes = [];
192
+ for (const entity of entities) {
193
+ const entityResult = await this.DetectChangesForEntity(entity);
194
+ result.Changes = result.Changes.concat(entityResult.Changes);
195
+ result.Success = result.Success && entityResult.Success;
196
+ }
197
+ return result;
198
+ }
199
+ catch (e) {
200
+ (0, core_1.LogError)(e);
201
+ return {
202
+ Success: false,
203
+ ErrorMessage: e.message,
204
+ Changes: []
205
+ };
206
+ }
207
+ }
208
+ async DetectChangesForAllEligibleEntities() {
209
+ return await this.DetectChangesForEntities(this.EligibleEntities);
210
+ }
211
+ }
212
+ exports.ExternalChangeDetectorEngine = ExternalChangeDetectorEngine;
213
+ //# sourceMappingURL=ChangeDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChangeDetector.js","sourceRoot":"","sources":["../src/ChangeDetector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './ChangeDetector';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./ChangeDetector"), exports);
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC"}
package/package.json ADDED
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@memberjunction/external-change-detection",
3
+ "version": "1.7.0",
4
+ "description": "Library used by server side applications to determine if changes have been made to entities by external systems/integrations",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "/dist"
9
+ ],
10
+ "scripts": {
11
+ "start": "ts-node-dev src/index.ts",
12
+ "build": "tsc",
13
+ "test": "echo \"Error: no test specified\" && exit 1"
14
+ },
15
+ "author": "MemberJunction.com",
16
+ "license": "ISC",
17
+ "devDependencies": {
18
+ "ts-node-dev": "^2.0.0",
19
+ "typescript": "^5.4.5"
20
+ },
21
+ "dependencies": {
22
+ "@memberjunction/core": "1.7.0",
23
+ "@memberjunction/core-entities": "1.7.0",
24
+ "@memberjunction/global": "1.7.0",
25
+ "@memberjunction/sqlserver-dataprovider": "1.6.2"
26
+ }
27
+ }