@autofleet/sequelize-utils 5.1.3 → 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
@@ -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
@@ -1,6 +1,8 @@
1
1
  import { Sequelize } from 'sequelize';
2
+ import addModelEventHooks from './model-event-hooks';
2
3
  declare const _default: (sequelize: Sequelize) => {
3
4
  transactionWithRetry: any;
4
5
  httpBasedTransaction: any;
6
+ addModelEventHooks: any;
5
7
  };
6
8
  export default _default;
package/dist/index.js CHANGED
@@ -1,13 +1,4 @@
1
1
  "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
12
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
4
  };
@@ -15,16 +6,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
6
  /* eslint-disable import/prefer-default-export */
16
7
  const sequelize_1 = require("sequelize");
17
8
  const debug_1 = __importDefault(require("debug"));
9
+ const model_event_hooks_1 = __importDefault(require("./model-event-hooks"));
18
10
  const log = debug_1.default('sequelize-utils');
19
11
  const rollbackErrorText = 'rollback has been called on this transaction';
20
12
  const abortErrorText = 'Transaction cancelled due to request cancellation';
21
13
  exports.default = (sequelize) => {
22
- const transactionWithRetry = (funcToRun, retriesCount = 2, options) => __awaiter(void 0, void 0, void 0, function* () {
14
+ const transactionWithRetry = async (funcToRun, retriesCount = 2, options) => {
23
15
  try {
24
- const transValue = yield sequelize.transaction(options || {}, (transaction) => __awaiter(void 0, void 0, void 0, function* () {
25
- const funcValue = yield funcToRun(transaction);
16
+ const transValue = await sequelize.transaction(options || {}, async (transaction) => {
17
+ const funcValue = await funcToRun(transaction);
26
18
  return funcValue;
27
- }));
19
+ });
28
20
  return transValue;
29
21
  }
30
22
  catch (e) {
@@ -38,22 +30,22 @@ exports.default = (sequelize) => {
38
30
  }
39
31
  throw e;
40
32
  }
41
- });
33
+ };
42
34
  // eslint-disable-next-line @typescript-eslint/ban-types
43
35
  const httpBasedTransaction = (req, cb) => {
44
36
  if (req.socket.destroyed) {
45
37
  log(abortErrorText);
46
38
  throw new Error(abortErrorText);
47
39
  }
48
- return sequelize.transaction((transaction) => __awaiter(void 0, void 0, void 0, function* () {
40
+ return sequelize.transaction(async (transaction) => {
49
41
  // https://github.com/nodejs/node/blob/e46c680bf2b211bbd52cf959ca17ee98c7f657f5/test/parallel/test-http-aborted.js#L9
50
- const rollback = () => __awaiter(void 0, void 0, void 0, function* () {
42
+ const rollback = async () => {
51
43
  log(abortErrorText);
52
- yield transaction.rollback();
53
- });
44
+ await transaction.rollback();
45
+ };
54
46
  req.socket.once('close', rollback);
55
47
  try {
56
- const response = yield cb(transaction);
48
+ const response = await cb(transaction);
57
49
  req.socket.removeListener('close', rollback);
58
50
  return response;
59
51
  }
@@ -64,10 +56,11 @@ exports.default = (sequelize) => {
64
56
  req.socket.removeListener('close', rollback);
65
57
  throw e;
66
58
  }
67
- }));
59
+ });
68
60
  };
69
61
  return {
70
62
  httpBasedTransaction,
71
63
  transactionWithRetry,
64
+ addModelEventHooks: model_event_hooks_1.default,
72
65
  };
73
66
  };
@@ -0,0 +1,2 @@
1
+ declare const _default: any;
2
+ export default _default;
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",
3
+ "version": "5.1.5",
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",
@@ -0,0 +1,4 @@
1
+ import Events from '@autofleet/events';
2
+ import logger from '../logger';
3
+
4
+ export default new Events({ logger });
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
+ addModelEventHooks: any
13
15
  } => {
14
16
  const transactionWithRetry = async (funcToRun: any, retriesCount = 2, options?: any): Promise<any> => {
15
17
  try {
@@ -63,5 +65,6 @@ export default (sequelize: Sequelize): {
63
65
  return {
64
66
  httpBasedTransaction,
65
67
  transactionWithRetry,
68
+ addModelEventHooks,
66
69
  };
67
70
  };
package/src/logger.ts ADDED
@@ -0,0 +1,3 @@
1
+ import Logger from '@autofleet/logger';
2
+
3
+ export default Logger();
@@ -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;
package/tsconfig.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "compilerOptions": {
3
- "target": "es6",
3
+ "target": "es2020",
4
4
  "module": "commonjs",
5
5
  "declaration": true,
6
6
  "outDir": "./dist",