@autofleet/sequelize-utils 5.1.4 → 5.1.6
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.
- package/dist/events/index.d.ts +2 -0
- package/dist/events/index.js +8 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.js +7 -0
- package/dist/model-event-hooks.d.ts +8 -0
- package/dist/model-event-hooks.js +44 -0
- package/package.json +4 -1
- package/src/events/index.ts +4 -0
- package/src/index.ts +6 -1
- package/src/logger.ts +3 -0
- package/src/model-event-hooks.ts +51 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const events_1 = __importDefault(require("@autofleet/events"));
|
|
7
|
+
const logger_1 = __importDefault(require("../logger"));
|
|
8
|
+
exports.default = new events_1.default({ logger: logger_1.default });
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
/* eslint-disable import/prefer-default-export */
|
|
7
7
|
const sequelize_1 = require("sequelize");
|
|
8
8
|
const debug_1 = __importDefault(require("debug"));
|
|
9
|
+
const model_event_hooks_1 = __importDefault(require("./model-event-hooks"));
|
|
9
10
|
const log = debug_1.default('sequelize-utils');
|
|
10
11
|
const rollbackErrorText = 'rollback has been called on this transaction';
|
|
11
12
|
const abortErrorText = 'Transaction cancelled due to request cancellation';
|
|
@@ -57,8 +58,10 @@ exports.default = (sequelize) => {
|
|
|
57
58
|
}
|
|
58
59
|
});
|
|
59
60
|
};
|
|
61
|
+
const registerModelEventHooks = (modelTableMapping) => model_event_hooks_1.default(sequelize, modelTableMapping);
|
|
60
62
|
return {
|
|
61
63
|
httpBasedTransaction,
|
|
62
64
|
transactionWithRetry,
|
|
65
|
+
registerModelEventHooks,
|
|
63
66
|
};
|
|
64
67
|
};
|
package/dist/logger.d.ts
ADDED
package/dist/logger.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const logger_1 = __importDefault(require("@autofleet/logger"));
|
|
7
|
+
exports.default = logger_1.default();
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Sequelize } from 'sequelize';
|
|
2
|
+
interface ModelMapping {
|
|
3
|
+
[ModelName: string]: {
|
|
4
|
+
tableName: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
declare const addModelEventHooks: (sequelize: Sequelize, modelTableMapping: ModelMapping) => Promise<void>;
|
|
8
|
+
export default addModelEventHooks;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const events_1 = __importDefault(require("./events"));
|
|
7
|
+
const logger_1 = __importDefault(require("./logger"));
|
|
8
|
+
const addModelEventHooks = async (sequelize, modelTableMapping) => {
|
|
9
|
+
const updateEventToDimTable = (object, isDelete = false) => {
|
|
10
|
+
try {
|
|
11
|
+
const objectToSend = object.get();
|
|
12
|
+
if (isDelete) {
|
|
13
|
+
objectToSend.deletedAt = new Date();
|
|
14
|
+
}
|
|
15
|
+
const tableName = modelTableMapping[object.constructor.name]?.tableName;
|
|
16
|
+
const eventVersion = '1';
|
|
17
|
+
if (tableName) {
|
|
18
|
+
events_1.default.sendObject(tableName, eventVersion, objectToSend, Object.keys(object.rawAttributes));
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch (e) {
|
|
22
|
+
logger_1.default.error('dimTables error', { e });
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
sequelize.addHook('afterSave', async (savedObject, options) => {
|
|
26
|
+
logger_1.default.info('dimTables after save start', { savedObject });
|
|
27
|
+
if (options.transaction) {
|
|
28
|
+
options.transaction.afterCommit(() => updateEventToDimTable(savedObject));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
await updateEventToDimTable(savedObject);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
sequelize.addHook('afterDestroy', async (savedObject, options) => {
|
|
35
|
+
logger_1.default.info('dimTables after save start', { savedObject });
|
|
36
|
+
if (options.transaction) {
|
|
37
|
+
options.transaction.afterCommit(() => updateEventToDimTable(savedObject, true));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
await updateEventToDimTable(savedObject, true);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
exports.default = addModelEventHooks;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@autofleet/sequelize-utils",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -19,6 +19,9 @@
|
|
|
19
19
|
"author": "",
|
|
20
20
|
"license": "ISC",
|
|
21
21
|
"dependencies": {
|
|
22
|
+
"@autofleet/errors": "^1.1.0",
|
|
23
|
+
"@autofleet/events": "^1.5.7",
|
|
24
|
+
"@autofleet/logger": "^2.0.2",
|
|
22
25
|
"@autofleet/network": "^1.3.7",
|
|
23
26
|
"debug": "^4.3.2",
|
|
24
27
|
"jest": "^27.0.6",
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/* eslint-disable import/prefer-default-export */
|
|
2
2
|
import { DatabaseError, Sequelize, Transaction } from 'sequelize';
|
|
3
3
|
import debug from 'debug';
|
|
4
|
+
import addModelEventHooks from './model-event-hooks';
|
|
4
5
|
|
|
5
6
|
const log = debug('sequelize-utils');
|
|
6
7
|
|
|
@@ -9,7 +10,8 @@ const abortErrorText = 'Transaction cancelled due to request cancellation';
|
|
|
9
10
|
|
|
10
11
|
export default (sequelize: Sequelize): {
|
|
11
12
|
transactionWithRetry: any,
|
|
12
|
-
httpBasedTransaction: any
|
|
13
|
+
httpBasedTransaction: any,
|
|
14
|
+
registerModelEventHooks: any
|
|
13
15
|
} => {
|
|
14
16
|
const transactionWithRetry = async (funcToRun: any, retriesCount = 2, options?: any): Promise<any> => {
|
|
15
17
|
try {
|
|
@@ -60,8 +62,11 @@ export default (sequelize: Sequelize): {
|
|
|
60
62
|
});
|
|
61
63
|
};
|
|
62
64
|
|
|
65
|
+
const registerModelEventHooks = (modelTableMapping) => addModelEventHooks(sequelize, modelTableMapping);
|
|
66
|
+
|
|
63
67
|
return {
|
|
64
68
|
httpBasedTransaction,
|
|
65
69
|
transactionWithRetry,
|
|
70
|
+
registerModelEventHooks,
|
|
66
71
|
};
|
|
67
72
|
};
|
package/src/logger.ts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Sequelize } from 'sequelize';
|
|
2
|
+
import events from './events';
|
|
3
|
+
import logger from './logger';
|
|
4
|
+
|
|
5
|
+
interface ModelMapping {
|
|
6
|
+
[ModelName: string]: {
|
|
7
|
+
tableName: string
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const addModelEventHooks = async (sequelize: Sequelize, modelTableMapping: ModelMapping) => {
|
|
12
|
+
const updateEventToDimTable = (object, isDelete = false) => {
|
|
13
|
+
try {
|
|
14
|
+
const objectToSend = object.get();
|
|
15
|
+
if (isDelete) {
|
|
16
|
+
objectToSend.deletedAt = new Date();
|
|
17
|
+
}
|
|
18
|
+
const tableName = modelTableMapping[object.constructor.name]?.tableName;
|
|
19
|
+
const eventVersion = '1';
|
|
20
|
+
if (tableName) {
|
|
21
|
+
events.sendObject(
|
|
22
|
+
tableName,
|
|
23
|
+
eventVersion,
|
|
24
|
+
objectToSend,
|
|
25
|
+
Object.keys(object.rawAttributes),
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
} catch (e) {
|
|
29
|
+
logger.error('dimTables error', { e });
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
sequelize.addHook('afterSave', async (savedObject, options) => {
|
|
34
|
+
logger.info('dimTables after save start', { savedObject });
|
|
35
|
+
if (options.transaction) {
|
|
36
|
+
options.transaction.afterCommit(() => updateEventToDimTable(savedObject));
|
|
37
|
+
} else {
|
|
38
|
+
await updateEventToDimTable(savedObject);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
sequelize.addHook('afterDestroy', async (savedObject, options) => {
|
|
42
|
+
logger.info('dimTables after save start', { savedObject });
|
|
43
|
+
if (options.transaction) {
|
|
44
|
+
options.transaction.afterCommit(() => updateEventToDimTable(savedObject, true));
|
|
45
|
+
} else {
|
|
46
|
+
await updateEventToDimTable(savedObject, true);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
export default addModelEventHooks;
|