@autofleet/sadot 0.0.2-beta → 0.1.1
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/{src/api → api}/index.js +1 -0
- package/dist/api/index.js.map +1 -0
- package/dist/{src/api → api}/v1/definition/index.js +27 -23
- package/dist/api/v1/definition/index.js.map +1 -0
- package/dist/{src/api → api}/v1/definition/validations.js +1 -0
- package/dist/api/v1/definition/validations.js.map +1 -0
- package/dist/{src/api → api}/v1/errors.js +1 -0
- package/dist/api/v1/errors.js.map +1 -0
- package/dist/{src/api → api}/v1/index.js +1 -0
- package/dist/api/v1/index.js.map +1 -0
- package/dist/{src/errors → errors}/index.js +1 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/{src/events → events}/index.js +2 -21
- package/dist/events/index.js.map +1 -0
- package/dist/{src/hooks → hooks}/create.js +15 -10
- package/dist/hooks/create.js.map +1 -0
- package/dist/{src/hooks → hooks}/enrich.js +34 -42
- package/dist/hooks/enrich.js.map +1 -0
- package/dist/{src/hooks → hooks}/find.js +6 -9
- package/dist/hooks/find.js.map +1 -0
- package/dist/{src/hooks → hooks}/index.js +1 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/{src/hooks → hooks}/update.js +12 -7
- package/dist/hooks/update.js.map +1 -0
- package/dist/{src/hooks → hooks}/workaround.js +13 -3
- package/dist/hooks/workaround.js.map +1 -0
- package/dist/{src/index.js → index.js} +20 -21
- package/dist/index.js.map +1 -0
- package/dist/{src/models → models}/CustomFieldDefinition.js +3 -2
- package/dist/models/CustomFieldDefinition.js.map +1 -0
- package/dist/{src/models → models}/CustomFieldValue.js +34 -20
- package/dist/models/CustomFieldValue.js.map +1 -0
- package/dist/models/index.js +63 -0
- package/dist/models/index.js.map +1 -0
- package/dist/{src/models → models}/tests/AssociatedTestModel.js +1 -0
- package/dist/models/tests/AssociatedTestModel.js.map +1 -0
- package/dist/{src/models → models}/tests/TestModel.js +1 -0
- package/dist/models/tests/TestModel.js.map +1 -0
- package/dist/repository/definition.js +97 -0
- package/dist/repository/definition.js.map +1 -0
- package/dist/{src/repository → repository}/value.js +29 -20
- package/dist/repository/value.js.map +1 -0
- package/dist/{src/tests → tests}/api/test-api.js +22 -12
- package/dist/tests/api/test-api.js.map +1 -0
- package/dist/{src/tests → tests}/helpers/database-config.js +1 -0
- package/dist/tests/helpers/database-config.js.map +1 -0
- package/dist/tests/helpers/index.js +28 -0
- package/dist/tests/helpers/index.js.map +1 -0
- package/dist/{src/tests → tests}/mocks/definition.mock.js +13 -18
- package/dist/tests/mocks/definition.mock.js.map +1 -0
- package/dist/{src/tests → tests}/mocks/events.mock.js +1 -0
- package/dist/tests/mocks/events.mock.js.map +1 -0
- package/dist/{src/tests → tests}/mocks/testModel.js +14 -4
- package/dist/tests/mocks/testModel.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/dist/{src/types → types}/definition/index.js +1 -0
- package/dist/types/definition/index.js.map +1 -0
- package/dist/{src/types → types}/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/{src/types → types}/value/index.js +1 -0
- package/dist/types/value/index.js.map +1 -0
- package/dist/{src/utils → utils}/db/index.js +1 -8
- package/dist/utils/db/index.js.map +1 -0
- package/dist/{src/utils → utils}/logger/index.js +2 -2
- package/dist/utils/logger/index.js.map +1 -0
- package/dist/{src/utils → utils}/validations/custom-fields.js +1 -0
- package/dist/utils/validations/custom-fields.js.map +1 -0
- package/dist/{src/utils → utils}/validations/custom.js +2 -1
- package/dist/utils/validations/custom.js.map +1 -0
- package/dist/{src/utils → utils}/validations/index.js +1 -0
- package/dist/utils/validations/index.js.map +1 -0
- package/dist/{src/utils → utils}/validations/type.js +2 -2
- package/dist/utils/validations/type.js.map +1 -0
- package/dist/{src/utils → utils}/validations/validators.js +1 -0
- package/dist/utils/validations/validators.js.map +1 -0
- package/package.json +1 -3
- package/src/api/v1/definition/index.ts +3 -10
- package/src/events/index.ts +1 -23
- package/src/hooks/create.ts +0 -2
- package/src/hooks/enrich.ts +18 -41
- package/src/hooks/find.ts +0 -2
- package/src/hooks/update.ts +0 -2
- package/src/index.ts +6 -19
- package/src/models/CustomFieldDefinition.ts +1 -1
- package/src/models/index.ts +17 -59
- package/src/repository/definition.ts +25 -22
- package/src/repository/value.ts +1 -2
- package/src/types/index.ts +4 -4
- package/src/utils/db/index.ts +0 -7
- package/src/utils/logger/index.ts +1 -3
- package/src/utils/validations/type.ts +1 -2
- package/tsconfig.json +25 -9
- package/dist/jest.config.d.ts +0 -12
- package/dist/src/api/index.d.ts +0 -2
- package/dist/src/api/v1/definition/index.d.ts +0 -2
- package/dist/src/api/v1/definition/validations.d.ts +0 -2
- package/dist/src/api/v1/errors.d.ts +0 -2
- package/dist/src/api/v1/index.d.ts +0 -2
- package/dist/src/errors/index.d.ts +0 -16
- package/dist/src/events/index.d.ts +0 -4
- package/dist/src/hooks/create.d.ts +0 -9
- package/dist/src/hooks/enrich.d.ts +0 -5
- package/dist/src/hooks/find.d.ts +0 -1
- package/dist/src/hooks/index.d.ts +0 -6
- package/dist/src/hooks/update.d.ts +0 -9
- package/dist/src/hooks/workaround.d.ts +0 -10
- package/dist/src/index.d.ts +0 -11
- package/dist/src/models/CustomFieldDefinition.d.ts +0 -23
- package/dist/src/models/CustomFieldValue.d.ts +0 -15
- package/dist/src/models/index.d.ts +0 -8
- package/dist/src/models/index.js +0 -87
- package/dist/src/models/tests/AssociatedTestModel.d.ts +0 -12
- package/dist/src/models/tests/TestModel.d.ts +0 -11
- package/dist/src/repository/definition.d.ts +0 -17
- package/dist/src/repository/definition.js +0 -80
- package/dist/src/repository/value.d.ts +0 -24
- package/dist/src/tests/api/test-api.d.ts +0 -2
- package/dist/src/tests/helpers/database-config.d.ts +0 -15
- package/dist/src/tests/helpers/index.d.ts +0 -2
- package/dist/src/tests/helpers/index.js +0 -18
- package/dist/src/tests/mocks/definition.mock.d.ts +0 -37
- package/dist/src/tests/mocks/events.mock.d.ts +0 -3
- package/dist/src/tests/mocks/testModel.d.ts +0 -12
- package/dist/src/types/definition/index.d.ts +0 -23
- package/dist/src/types/index.d.ts +0 -13
- package/dist/src/types/value/index.d.ts +0 -15
- package/dist/src/utils/constants/index.d.ts +0 -1
- package/dist/src/utils/constants/index.js +0 -5
- package/dist/src/utils/db/index.d.ts +0 -4
- package/dist/src/utils/logger/index.d.ts +0 -2
- package/dist/src/utils/validations/custom-fields.d.ts +0 -2
- package/dist/src/utils/validations/custom.d.ts +0 -15
- package/dist/src/utils/validations/index.d.ts +0 -2
- package/dist/src/utils/validations/type.d.ts +0 -18
- package/dist/src/utils/validations/validators.d.ts +0 -12
- package/src/utils/constants/index.ts +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":";;;;;AAAA,wBAAwB;AACxB,qCAAiC;AACjC,8CAAsB;AAEtB,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7C,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,YAAE,CAAC,CAAC;AAEtB,kBAAe,MAAM,CAAC"}
|
|
@@ -22,6 +22,15 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
25
34
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
26
35
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
27
36
|
};
|
|
@@ -38,29 +47,26 @@ const toPascalCase = (str) => str.replace(/(^\w|-\w)/g, (subStr) => subStr.repla
|
|
|
38
47
|
/**
|
|
39
48
|
* Create
|
|
40
49
|
*/
|
|
41
|
-
router.post('/',
|
|
50
|
+
router.post('/', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
42
51
|
const { modelName } = req.params;
|
|
43
52
|
const modelType = toPascalCase(modelName);
|
|
44
53
|
try {
|
|
45
|
-
const validatedPayload =
|
|
46
|
-
const customFieldDefinition =
|
|
47
|
-
...validatedPayload,
|
|
48
|
-
modelType,
|
|
49
|
-
});
|
|
54
|
+
const validatedPayload = yield (0, validations_1.validateCustomFieldDefinitionCreation)(req.body);
|
|
55
|
+
const customFieldDefinition = yield DefinitionRepo.create(Object.assign(Object.assign({}, validatedPayload), { modelType }));
|
|
50
56
|
return res.status(201).json(customFieldDefinition);
|
|
51
57
|
}
|
|
52
58
|
catch (err) {
|
|
53
59
|
logger_1.default.error('Failed to create custom field definition', err);
|
|
54
60
|
return (0, errors_2.default)(err, res, { message: `Error in create ${ENTITY} request` });
|
|
55
61
|
}
|
|
56
|
-
});
|
|
62
|
+
}));
|
|
57
63
|
/**
|
|
58
64
|
* Get by id
|
|
59
65
|
*/
|
|
60
|
-
router.get('/:customFieldDefinitionId',
|
|
66
|
+
router.get('/:customFieldDefinitionId', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
61
67
|
const { customFieldDefinitionId } = req.params;
|
|
62
68
|
try {
|
|
63
|
-
const customFieldDefinition =
|
|
69
|
+
const customFieldDefinition = yield DefinitionRepo.findById(customFieldDefinitionId);
|
|
64
70
|
if (!customFieldDefinition) {
|
|
65
71
|
throw new errors_1.ResourceNotFoundError();
|
|
66
72
|
}
|
|
@@ -70,49 +76,47 @@ router.get('/:customFieldDefinitionId', async (req, res) => {
|
|
|
70
76
|
logger_1.default.error('Failed to fetch custom field definition', err);
|
|
71
77
|
return (0, errors_2.default)(err, res, { message: `Error in get ${ENTITY} request` });
|
|
72
78
|
}
|
|
73
|
-
});
|
|
79
|
+
}));
|
|
74
80
|
/**
|
|
75
81
|
* Get all
|
|
76
82
|
*/
|
|
77
|
-
router.get('/',
|
|
83
|
+
router.get('/', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
78
84
|
const { modelName } = req.params;
|
|
79
|
-
const { entityIds } = req.query;
|
|
80
85
|
const modelType = toPascalCase(modelName);
|
|
81
86
|
try {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
const customFieldDefinitions = await DefinitionRepo.findAll({ ...where }, { withDisabled: true });
|
|
87
|
+
const customFieldDefinitions = yield DefinitionRepo.findAll({
|
|
88
|
+
modelType,
|
|
89
|
+
}, { withDisabled: true });
|
|
87
90
|
return res.json(customFieldDefinitions);
|
|
88
91
|
}
|
|
89
92
|
catch (err) {
|
|
90
93
|
logger_1.default.error('Failed to fetch custom field definitions', err);
|
|
91
94
|
return (0, errors_2.default)(err, res, { message: `Error in get all ${ENTITY} request` });
|
|
92
95
|
}
|
|
93
|
-
});
|
|
96
|
+
}));
|
|
94
97
|
/**
|
|
95
98
|
* Update
|
|
96
99
|
*/
|
|
97
|
-
router.patch('/:customFieldDefinitionId',
|
|
100
|
+
router.patch('/:customFieldDefinitionId', (req, res) => __awaiter(void 0, void 0, void 0, function* () {
|
|
98
101
|
const { customFieldDefinitionId, modelName } = req.params;
|
|
99
102
|
const modelType = toPascalCase(modelName);
|
|
100
103
|
try {
|
|
101
104
|
// eslint-disable-next-line max-len
|
|
102
|
-
const validatedPayload =
|
|
103
|
-
const customFieldDefinition =
|
|
105
|
+
const validatedPayload = yield (0, validations_1.validateCustomFieldDefinitionUpdate)(req.body);
|
|
106
|
+
const customFieldDefinition = yield DefinitionRepo.findByWhere({
|
|
104
107
|
id: customFieldDefinitionId,
|
|
105
108
|
modelType,
|
|
106
109
|
});
|
|
107
110
|
if (!customFieldDefinition) {
|
|
108
111
|
throw new errors_1.ResourceNotFoundError();
|
|
109
112
|
}
|
|
110
|
-
const updatedCustomFieldDefinition =
|
|
113
|
+
const updatedCustomFieldDefinition = yield DefinitionRepo.update(customFieldDefinitionId, Object.assign(Object.assign({}, validatedPayload), { modelType }));
|
|
111
114
|
return res.status(200).json(updatedCustomFieldDefinition);
|
|
112
115
|
}
|
|
113
116
|
catch (err) {
|
|
114
117
|
logger_1.default.error('Failed to patch custom field definition', err);
|
|
115
118
|
return (0, errors_2.default)(err, res, { message: `Error in update ${ENTITY} request` });
|
|
116
119
|
}
|
|
117
|
-
});
|
|
120
|
+
}));
|
|
118
121
|
exports.default = router;
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/api/v1/definition/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,3 +34,4 @@ const validateCustomFieldDefinitionCreation = (payload) => CustomFieldDefinition
|
|
|
34
34
|
exports.validateCustomFieldDefinitionCreation = validateCustomFieldDefinitionCreation;
|
|
35
35
|
const validateCustomFieldDefinitionUpdate = (payload) => CustomFieldDefinitionUpdateSchema.validateAsync(payload, { abortEarly: false });
|
|
36
36
|
exports.validateCustomFieldDefinitionUpdate = validateCustomFieldDefinitionUpdate;
|
|
37
|
+
//# sourceMappingURL=validations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validations.js","sourceRoot":"","sources":["../../../../src/api/v1/definition/validations.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,0DAA4E;AAE5E,MAAM,gBAAgB,GAAG,aAAG,CAAC,IAAI,CAAC,WAAW,EAAE;IAC7C,EAAE,EAAE,gCAAyB,CAAC,MAAM;IACpC,IAAI,EAAE,aAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,aAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;IACrD,SAAS,EAAE,aAAG,CAAC,GAAG,EAAE;CACrB,CAAC,CAAC;AAEH,MAAM,mCAAmC,GAAG,aAAG,CAAC,MAAM,CAAC;IACrD,IAAI,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,UAAU,EAAE,gBAAgB;IAC5B,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAyB,CAAC,CAAC,CAAC,QAAQ,EAAE;IACrF,QAAQ,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE;IACzB,QAAQ,EAAE,aAAG,CAAC,OAAO,EAAE;IACvB,QAAQ,EAAE,aAAG,CAAC,OAAO,EAAE;CACxB,CAAC,CAAC;AAEH,MAAM,iCAAiC,GAAG,aAAG,CAAC,MAAM,CAAC;IACnD,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE;IACzB,UAAU,EAAE,gBAAgB;IAC5B,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAyB,CAAC,CAAC;IAC1E,WAAW,EAAE,aAAG,CAAC,MAAM,EAAE;IACzB,QAAQ,EAAE,aAAG,CAAC,OAAO,EAAE;IACvB,QAAQ,EAAE,aAAG,CAAC,OAAO,EAAE;CACxB,CAAC,CAAC;AAEI,MAAM,qCAAqC,GAAG,CAAC,OAAO,EAAE,EAAE,CAC/D,mCAAmC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AADvE,QAAA,qCAAqC,yCACkC;AAE7E,MAAM,mCAAmC,GAAG,CAAC,OAAO,EAAE,EAAE,CAC7D,iCAAiC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AADrE,QAAA,mCAAmC,uCACkC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/api/v1/errors.ts"],"names":[],"mappings":";;AAAA,8CAA4D;AAC5D,mCAAoE;AACpE,yCAAuE;AAEvE,kBAAe,CAAC,GAAG,EAAE,GAAG,EAAE,cAAc,GAAG,EAAE,EAAE,EAAE;IAC/C,IAAI,KAAK,GAAG,GAAG,CAAC;IAChB,IAAI,GAAG,YAAY,qBAAoB,EAAE;QACvC,KAAK,GAAG,IAAI,mBAAU,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KACrC;IAED,IAAI,GAAG,YAAY,2BAAuB,EAAE;QAC1C,KAAK,GAAG,IAAI,mBAAU,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;KACrC;IAED,OAAO,IAAA,oBAAW,EAAC,KAAK,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC;AACjD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/v1/index.ts"],"names":[],"mappings":";;;;;AAAA,qCAAiC;AAEjC,8DAA4C;AAE5C,MAAM,MAAM,GAAG,IAAA,gBAAM,EAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AAE7C,MAAM,CAAC,GAAG,CAAC,sCAAsC,EAAE,oBAAgB,CAAC,CAAC;AAErE,kBAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":";;;AAAA,yCAAyC;AACzC,8CAA+C;AAE/C,MAAa,+BAAgC,SAAQ,mBAAU;IAC7D,YAAY,aAAuB;QACjC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6CAA6C,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,GAAG,gCAAgC,CAAC;IAClD,CAAC;CACF;AAND,0EAMC;AAED,MAAa,+BAAgC,SAAQ,mBAAU;IAC7D,YAAY,SAAiB;QAC3B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,SAAS,SAAS,oBAAoB,CAAC,CAAC;QAC9D,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,+BAA+B,CAAC;IACjD,CAAC;CACF;AAND,0EAMC;AAED,MAAa,gCAAiC,SAAQ,mBAAU;IAC9D,YAAY,SAAiB;QAC3B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,mBAAmB,SAAS,oBAAoB,CAAC,CAAC;QACxE,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,oCAAoC,CAAC;IACtD,CAAC;CACF;AAND,4EAMC;AAED,MAAa,iBAAkB,SAAQ,mBAAU;IAC/C,YAAY,KAAU,EAAE,SAAiB;QACvC,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,YAAY,SAAS,WAAW,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/E,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,eAAe,CAAC;IACjC,CAAC;CACF;AAND,8CAMC;AAED,MAAa,sBAAuB,SAAQ,mBAAU;IACpD,YAAY,UAAoB;QAC9B,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,6CAA6C,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC3F,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,OAAO,GAAG,oBAAoB,CAAC;IACtC,CAAC;CACF;AAND,wDAMC"}
|
|
@@ -7,19 +7,6 @@ exports.sendDimEvent = void 0;
|
|
|
7
7
|
const events_1 = __importDefault(require("@autofleet/events"));
|
|
8
8
|
const logger_1 = __importDefault(require("../utils/logger"));
|
|
9
9
|
const events = new events_1.default({ logger: logger_1.default });
|
|
10
|
-
const KEYS_TO_CONVERT = ['value'];
|
|
11
|
-
const stringifyBools = (savedObject, keysToConvert) => {
|
|
12
|
-
if (Object.keys(savedObject).some((key) => keysToConvert.includes(key))) {
|
|
13
|
-
const objectToReturn = { ...savedObject };
|
|
14
|
-
keysToConvert.forEach((key) => {
|
|
15
|
-
if (typeof savedObject[key] === 'boolean') {
|
|
16
|
-
objectToReturn[key] = savedObject[key].toString();
|
|
17
|
-
}
|
|
18
|
-
});
|
|
19
|
-
return objectToReturn;
|
|
20
|
-
}
|
|
21
|
-
return savedObject;
|
|
22
|
-
};
|
|
23
10
|
const modelTableMapping = {
|
|
24
11
|
CustomFieldDefinition: {
|
|
25
12
|
tableName: 'dim_custom_field_definition',
|
|
@@ -33,15 +20,9 @@ const modelTableMapping = {
|
|
|
33
20
|
const sendDimEvent = (instance) => {
|
|
34
21
|
const mapping = modelTableMapping[instance.constructor.name];
|
|
35
22
|
if (mapping) {
|
|
36
|
-
|
|
37
|
-
try {
|
|
38
|
-
objectToSend = stringifyBools(instance.get(), KEYS_TO_CONVERT);
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
logger_1.default.error('Failed to convert booleans in dim event payload', err);
|
|
42
|
-
}
|
|
43
|
-
events.sendObject(mapping.tableName, mapping.eventVersion, objectToSend);
|
|
23
|
+
events.sendObject(mapping.tableName, mapping.eventVersion, instance.get());
|
|
44
24
|
}
|
|
45
25
|
};
|
|
46
26
|
exports.sendDimEvent = sendDimEvent;
|
|
47
27
|
exports.default = events;
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/events/index.ts"],"names":[],"mappings":";;;;;;AAAA,+DAAuC;AACvC,6DAAqC;AAErC,MAAM,MAAM,GAAG,IAAI,gBAAM,CAAC,EAAE,MAAM,EAAN,gBAAM,EAAE,CAAC,CAAC;AAEtC,MAAM,iBAAiB,GAAG;IACxB,qBAAqB,EAAE;QACrB,SAAS,EAAE,6BAA6B;QACxC,YAAY,EAAE,GAAG;KAClB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,wBAAwB;QACnC,YAAY,EAAE,GAAG;KAClB;CACF,CAAC;AAEK,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAQ,EAAE;IAC7C,MAAM,OAAO,GAAG,iBAAiB,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,OAAO,EAAE;QACX,MAAM,CAAC,UAAU,CACf,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,YAAY,EACpB,QAAQ,CAAC,GAAG,EAAE,CACf,CAAC;KACH;AACH,CAAC,CAAC;AATW,QAAA,YAAY,gBASvB;AAEF,kBAAe,MAAM,CAAC"}
|
|
@@ -22,12 +22,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var
|
|
26
|
-
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
27
33
|
};
|
|
28
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
35
|
exports.beforeCreate = exports.beforeBulkCreate = void 0;
|
|
30
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
31
36
|
const ValueRepo = __importStar(require("../repository/value"));
|
|
32
37
|
const DefinitionRepo = __importStar(require("../repository/definition"));
|
|
33
38
|
const errors_1 = require("../errors");
|
|
@@ -44,27 +49,27 @@ exports.beforeBulkCreate = beforeBulkCreate;
|
|
|
44
49
|
* A hook to create the custom fields when updating a model instance.
|
|
45
50
|
* TODO - cleanup if update fail
|
|
46
51
|
*/
|
|
47
|
-
const beforeCreate = (scopeAttributes) =>
|
|
48
|
-
logger_1.default.debug('sadot - before create hook');
|
|
52
|
+
const beforeCreate = (scopeAttributes) => (instance, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
53
|
const { fields } = options;
|
|
50
54
|
const modelType = instance.constructor.name;
|
|
51
55
|
const identifiers = scopeAttributes.map((attribute) => instance[attribute]);
|
|
52
56
|
// get all model's required definitions
|
|
53
|
-
const requiredFieldsNames =
|
|
57
|
+
const requiredFieldsNames = yield DefinitionRepo.getRequiredFields(modelType, instance.id, identifiers);
|
|
54
58
|
const customFieldsIdx = fields.indexOf('customFields');
|
|
55
59
|
const { customFields } = instance;
|
|
56
60
|
if (customFieldsIdx > -1 && customFields) {
|
|
57
61
|
const fieldsNames = Object.keys(customFields);
|
|
58
62
|
const missingFields = requiredFieldsNames.filter((name) => !fieldsNames.includes(name));
|
|
59
|
-
if (missingFields
|
|
63
|
+
if ((missingFields === null || missingFields === void 0 ? void 0 : missingFields.length) > 0) {
|
|
60
64
|
throw new errors_1.MissingRequiredCustomFieldError(missingFields);
|
|
61
65
|
}
|
|
62
|
-
|
|
66
|
+
yield ValueRepo.updateValues(modelType, instance.id, identifiers, customFields, { transaction: options.transaction });
|
|
63
67
|
// eslint-disable-next-line no-param-reassign
|
|
64
68
|
fields.splice(customFieldsIdx, 1);
|
|
65
69
|
}
|
|
66
|
-
else if (requiredFieldsNames
|
|
70
|
+
else if ((requiredFieldsNames === null || requiredFieldsNames === void 0 ? void 0 : requiredFieldsNames.length) > 0) {
|
|
67
71
|
throw new errors_1.MissingRequiredCustomFieldError(requiredFieldsNames);
|
|
68
72
|
}
|
|
69
|
-
};
|
|
73
|
+
});
|
|
70
74
|
exports.beforeCreate = beforeCreate;
|
|
75
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../src/hooks/create.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAiD;AACjD,yEAA2D;AAC3D,sCAA4D;AAE5D;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAQ,EAAE;IAChD,sEAAsE;IACtE,6CAA6C;IAC7C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;AACjC,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B;AACF;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,eAAyB,EAAE,EAAE,CAAC,CACzD,QAAQ,EACR,OAAO,EACQ,EAAE;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC5E,uCAAuC;IACvC,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,SAAS,EAC1E,QAAQ,CAAC,EAAE,EACX,WAAW,CAAC,CAAC;IACf,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IAClC,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,YAAY,EAAE;QACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACxF,IAAI,CAAA,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,MAAM,IAAG,CAAC,EAAE;YAC7B,MAAM,IAAI,wCAA+B,CAAC,aAAa,CAAC,CAAC;SAC1D;QAED,MAAM,SAAS,CAAC,YAAY,CAC1B,SAAS,EACT,QAAQ,CAAC,EAAE,EACX,WAAW,EACX,YAAY,EACZ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CACrC,CAAC;QACF,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KACnC;SAAM,IAAI,CAAA,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,MAAM,IAAG,CAAC,EAAE;QAC1C,MAAM,IAAI,wCAA+B,CAAC,mBAAmB,CAAC,CAAC;KAChE;AACH,CAAC,CAAA,CAAC;AAhCW,QAAA,YAAY,gBAgCvB"}
|
|
@@ -22,56 +22,51 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var
|
|
26
|
-
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
27
33
|
};
|
|
28
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
35
|
/* eslint-disable no-param-reassign */
|
|
30
36
|
const ValueRepo = __importStar(require("../repository/value"));
|
|
31
37
|
const DefinitionRepo = __importStar(require("../repository/definition"));
|
|
32
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
33
38
|
/**
|
|
34
39
|
* Serialize custom fields value into the format of {[name] -> [fieldData]}
|
|
35
40
|
*/
|
|
36
|
-
const serializeCustomFields = (customFieldValues
|
|
37
|
-
const customFields = customFieldValues.reduce((acc, cfv) => ({
|
|
38
|
-
...acc,
|
|
39
|
-
...(customFieldDefinitionsHash[cfv.customFieldDefinitionId]
|
|
40
|
-
&& { [customFieldDefinitionsHash[cfv.customFieldDefinitionId].name]: cfv.value }),
|
|
41
|
-
}), {});
|
|
41
|
+
const serializeCustomFields = (customFieldValues) => {
|
|
42
|
+
const customFields = customFieldValues.reduce((acc, cfv) => (Object.assign(Object.assign({}, acc), { [cfv.customFieldDefinition.name]: cfv.value })), {});
|
|
42
43
|
return customFields;
|
|
43
44
|
};
|
|
44
45
|
/**
|
|
45
46
|
* A hook to attach the custom fields when fetching a model instances.
|
|
46
47
|
*/
|
|
47
|
-
const enrichResults = (
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
const enrichResults = (scopeAttributes) => (instancesOrInstance, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
+
var _a, _b, _c;
|
|
50
|
+
if (((_a = options.originalAttributes) === null || _a === void 0 ? void 0 : _a.length) > 0
|
|
51
|
+
&& !((_c = (_b = options.originalAttributes) === null || _b === void 0 ? void 0 : _b.includes) === null || _c === void 0 ? void 0 : _c.call(_b, 'customFields'))) {
|
|
50
52
|
return;
|
|
51
53
|
}
|
|
52
54
|
const primaryKey = 'id';
|
|
53
55
|
let instances = Array.isArray(instancesOrInstance)
|
|
54
56
|
? instancesOrInstance
|
|
55
57
|
: [instancesOrInstance];
|
|
56
|
-
instances = instances.filter(
|
|
58
|
+
instances = instances.filter((instance) => !!instance);
|
|
57
59
|
const identifiers = instances.map((instance) => scopeAttributes
|
|
58
60
|
.map((attr) => instance[attr])).flat();
|
|
59
|
-
const uniqueIdentifiers = [...new Set(identifiers)].filter(
|
|
60
|
-
const identifierCustomFieldDefinitionsMapping =
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
const definitionsMap = customFieldDefinitions.reduce((map, definition) => ({
|
|
66
|
-
...map,
|
|
67
|
-
[definition.id]: definition,
|
|
68
|
-
}), {});
|
|
69
|
-
customFieldDefinitions.forEach((cfd) => {
|
|
70
|
-
identifierCustomFieldDefinitionsMapping[cfd.entityId].push(cfd);
|
|
71
|
-
});
|
|
61
|
+
const uniqueIdentifiers = [...new Set(identifiers)].filter((identifier) => !!identifier);
|
|
62
|
+
const identifierCustomFieldDefinitionsMapping = {};
|
|
63
|
+
yield Promise.all(uniqueIdentifiers.map((identifier) => __awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const customFieldDefinitions = yield DefinitionRepo.findByEntityId(identifier, { transaction: options.transaction });
|
|
65
|
+
identifierCustomFieldDefinitionsMapping[identifier] = customFieldDefinitions;
|
|
66
|
+
})));
|
|
72
67
|
// Get the values per instates ids:
|
|
73
68
|
const instancesIds = instances.map((i) => i[primaryKey]);
|
|
74
|
-
const customFieldValues =
|
|
69
|
+
const customFieldValues = yield ValueRepo.findValuesByModelIds(instancesIds, { transaction: options.transaction });
|
|
75
70
|
// Group fields by modelId
|
|
76
71
|
const valuesGroupByInstance = customFieldValues.reduce((acc, v) => {
|
|
77
72
|
const { modelId } = v;
|
|
@@ -83,36 +78,33 @@ const enrichResults = (modelType, scopeAttributes) => async (instancesOrInstance
|
|
|
83
78
|
}, {});
|
|
84
79
|
// Attach custom fields to the instances
|
|
85
80
|
instances.forEach((instance) => {
|
|
81
|
+
var _a, _b;
|
|
86
82
|
const customFields = {};
|
|
87
83
|
const { id } = instance;
|
|
88
84
|
const instanceValues = valuesGroupByInstance[id];
|
|
89
85
|
if (instanceValues) {
|
|
90
|
-
const serializedCustomFields = serializeCustomFields(instanceValues
|
|
86
|
+
const serializedCustomFields = serializeCustomFields(instanceValues);
|
|
91
87
|
Object.assign(customFields, serializedCustomFields);
|
|
92
88
|
}
|
|
93
89
|
scopeAttributes.forEach((attribute) => {
|
|
94
90
|
const identifier = instance[attribute];
|
|
95
|
-
const
|
|
96
|
-
if (
|
|
97
|
-
|
|
91
|
+
const customFieldDefinitions = identifierCustomFieldDefinitionsMapping[identifier];
|
|
92
|
+
if ((customFieldDefinitions === null || customFieldDefinitions === void 0 ? void 0 : customFieldDefinitions.length) > 0) {
|
|
93
|
+
customFieldDefinitions.forEach((customFieldDefinition) => {
|
|
98
94
|
if (customFields[customFieldDefinition.name] === undefined) {
|
|
99
95
|
customFields[customFieldDefinition.name] = null;
|
|
100
96
|
}
|
|
101
97
|
});
|
|
102
98
|
}
|
|
103
99
|
});
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
else {
|
|
109
|
-
logger_1.default.info('sadot - enrichResults - no customFields');
|
|
110
|
-
}
|
|
111
|
-
options.attributesToRemove?.forEach?.((attribute) => {
|
|
112
|
-
delete instance.dataValues?.[attribute];
|
|
100
|
+
instance.customFields = customFields;
|
|
101
|
+
(_b = (_a = options.attributesToRemove) === null || _a === void 0 ? void 0 : _a.forEach) === null || _b === void 0 ? void 0 : _b.call(_a, (attribute) => {
|
|
102
|
+
var _a;
|
|
103
|
+
(_a = instance.dataValues) === null || _a === void 0 ? true : delete _a[attribute];
|
|
113
104
|
// if raw:
|
|
114
|
-
delete instance
|
|
105
|
+
instance === null || instance === void 0 ? true : delete instance[attribute];
|
|
115
106
|
});
|
|
116
107
|
});
|
|
117
|
-
};
|
|
108
|
+
});
|
|
118
109
|
exports.default = enrichResults;
|
|
110
|
+
//# sourceMappingURL=enrich.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"enrich.js","sourceRoot":"","sources":["../../src/hooks/enrich.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
2
|
+
/* eslint-disable no-param-reassign */
|
|
5
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
4
|
exports.beforeFind = void 0;
|
|
7
|
-
/* eslint-disable no-param-reassign */
|
|
8
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
9
5
|
const doScopeAttributesMissing = (scopeAttributes, queryAttributes) => {
|
|
6
|
+
var _a;
|
|
10
7
|
const attributes = scopeAttributes
|
|
11
8
|
.filter((attribute) => !queryAttributes.includes(attribute));
|
|
12
|
-
if (!queryAttributes.includes
|
|
9
|
+
if (!((_a = queryAttributes.includes) === null || _a === void 0 ? void 0 : _a.call(queryAttributes, 'id'))) {
|
|
13
10
|
attributes.push('id');
|
|
14
11
|
}
|
|
15
12
|
return attributes;
|
|
@@ -17,13 +14,13 @@ const doScopeAttributesMissing = (scopeAttributes, queryAttributes) => {
|
|
|
17
14
|
// eslint-disable-next-line import/prefer-default-export
|
|
18
15
|
const beforeFind = (scopeAttributes) => (options) => {
|
|
19
16
|
const { attributes: queryAttributes } = options;
|
|
20
|
-
if (queryAttributes
|
|
17
|
+
if (queryAttributes === null || queryAttributes === void 0 ? void 0 : queryAttributes.includes('customFields')) {
|
|
21
18
|
const missingScopeAttributes = doScopeAttributesMissing(scopeAttributes, queryAttributes);
|
|
22
|
-
|
|
23
|
-
if (missingScopeAttributes?.length > 0) {
|
|
19
|
+
if ((missingScopeAttributes === null || missingScopeAttributes === void 0 ? void 0 : missingScopeAttributes.length) > 0) {
|
|
24
20
|
queryAttributes.push(...missingScopeAttributes);
|
|
25
21
|
options.attributesToRemove = missingScopeAttributes;
|
|
26
22
|
}
|
|
27
23
|
}
|
|
28
24
|
};
|
|
29
25
|
exports.beforeFind = beforeFind;
|
|
26
|
+
//# sourceMappingURL=find.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/hooks/find.ts"],"names":[],"mappings":";AAAA,sCAAsC;;;AAEtC,MAAM,wBAAwB,GAAG,CAC/B,eAAyB,EACzB,eAAsC,EAC5B,EAAE;;IACZ,MAAM,UAAU,GAAG,eAAe;SAC/B,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/D,IAAI,CAAC,CAAA,MAAA,eAAe,CAAC,QAAQ,gEAAG,IAAI,CAAC,CAAA,EAAE;QACrC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvB;IACD,OAAO,UAAU,CAAC;AACpB,CAAC,CAAC;AAEF,wDAAwD;AACjD,MAAM,UAAU,GAAG,CAAC,eAAyB,EAAE,EAAE,CAAC,CAAC,OAAO,EAAQ,EAAE;IACzE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAChD,IAAI,eAAe,aAAf,eAAe,uBAAf,eAAe,CAAE,QAAQ,CAAC,cAAc,CAAC,EAAE;QAC7C,MAAM,sBAAsB,GAAG,wBAAwB,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;QAC1F,IAAI,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,MAAM,IAAG,CAAC,EAAE;YACtC,eAAe,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,CAAC;YAChD,OAAO,CAAC,kBAAkB,GAAG,sBAAsB,CAAC;SACrD;KACF;AACH,CAAC,CAAC;AATW,QAAA,UAAU,cASrB"}
|
|
@@ -16,3 +16,4 @@ Object.defineProperty(exports, "beforeBulkCreate", { enumerable: true, get: func
|
|
|
16
16
|
Object.defineProperty(exports, "beforeCreate", { enumerable: true, get: function () { return create_1.beforeCreate; } });
|
|
17
17
|
const workaround_1 = __importDefault(require("./workaround"));
|
|
18
18
|
exports.workaround = workaround_1.default;
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;AAAA,sDAAqC;AAOnC,wBAPK,gBAAa,CAOL;AANf,iCAAoC;AAOlC,2FAPO,iBAAU,OAOP;AANZ,qCAA0D;AAOxD,iGAPO,yBAAgB,OAOP;AAChB,6FARyB,qBAAY,OAQzB;AAPd,qCAA0D;AAQxD,iGARO,yBAAgB,OAQP;AAChB,6FATyB,qBAAY,OASzB;AARd,8DAAsC;AASpC,qBATK,oBAAU,CASL"}
|
|
@@ -22,12 +22,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
22
22
|
__setModuleDefault(result, mod);
|
|
23
23
|
return result;
|
|
24
24
|
};
|
|
25
|
-
var
|
|
26
|
-
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
27
33
|
};
|
|
28
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
29
35
|
exports.beforeUpdate = exports.beforeBulkUpdate = void 0;
|
|
30
|
-
const logger_1 = __importDefault(require("../utils/logger"));
|
|
31
36
|
const ValueRepo = __importStar(require("../repository/value"));
|
|
32
37
|
/**
|
|
33
38
|
* A hook to update the custom fields when updating a model (more then one instance).
|
|
@@ -42,17 +47,17 @@ exports.beforeBulkUpdate = beforeBulkUpdate;
|
|
|
42
47
|
* A hook to update the custom fields when updating a model instance.
|
|
43
48
|
* TODO - cleanup if update fail
|
|
44
49
|
*/
|
|
45
|
-
const beforeUpdate = (scopeAttributes) =>
|
|
46
|
-
logger_1.default.debug('sadot - before update hook');
|
|
50
|
+
const beforeUpdate = (scopeAttributes) => (instance, options) => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
51
|
const { fields } = options;
|
|
48
52
|
const modelType = instance.constructor.name;
|
|
49
53
|
const identifiers = scopeAttributes.map((attribute) => instance[attribute]);
|
|
50
54
|
const customFieldsIdx = fields.indexOf('customFields');
|
|
51
55
|
if (customFieldsIdx > -1) {
|
|
52
56
|
const { customFields } = instance;
|
|
53
|
-
|
|
57
|
+
yield ValueRepo.updateValues(modelType, instance.id, identifiers, customFields, { transaction: options.transaction });
|
|
54
58
|
// eslint-disable-next-line no-param-reassign
|
|
55
59
|
fields.splice(customFieldsIdx, 1);
|
|
56
60
|
}
|
|
57
|
-
};
|
|
61
|
+
});
|
|
58
62
|
exports.beforeUpdate = beforeUpdate;
|
|
63
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/hooks/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAiD;AAEjD;;GAEG;AACI,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAQ,EAAE;IAChD,sEAAsE;IACtE,6CAA6C;IAC7C,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;AACjC,CAAC,CAAC;AAJW,QAAA,gBAAgB,oBAI3B;AAEF;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,eAAyB,EAAE,EAAE,CAAC,CACzD,QAAQ,EACR,OAAO,EACQ,EAAE;IACjB,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3B,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC;IAC5C,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5E,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACvD,IAAI,eAAe,GAAG,CAAC,CAAC,EAAE;QACxB,MAAM,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;QAClC,MAAM,SAAS,CAAC,YAAY,CAC1B,SAAS,EACT,QAAQ,CAAC,EAAE,EACX,WAAW,EACX,YAAY,EACZ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CACrC,CAAC;QACF,6CAA6C;QAC7C,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;KACnC;AACH,CAAC,CAAA,CAAC;AArBW,QAAA,YAAY,gBAqBvB"}
|
|
@@ -7,8 +7,17 @@
|
|
|
7
7
|
* which manually calls the afterFind hook of each model, recursively
|
|
8
8
|
* https://github.com/sequelize/sequelize/issues/4627
|
|
9
9
|
*/
|
|
10
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
11
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
12
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
13
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
14
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
15
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
16
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
17
|
+
});
|
|
18
|
+
};
|
|
10
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
const handleChildrenAfterFindHook =
|
|
20
|
+
const handleChildrenAfterFindHook = (instances, options, level = 0) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
21
|
if (!instances)
|
|
13
22
|
return Promise.resolve();
|
|
14
23
|
if (Array.isArray(instances)) {
|
|
@@ -24,7 +33,7 @@ const handleChildrenAfterFindHook = async (instances, options, level = 0) => {
|
|
|
24
33
|
* Only run children "afterFind" hooks.
|
|
25
34
|
*/
|
|
26
35
|
if (level >= 1) {
|
|
27
|
-
|
|
36
|
+
yield constructor.runHooks('afterFind', instance, options);
|
|
28
37
|
}
|
|
29
38
|
const { associations } = constructor;
|
|
30
39
|
const associatedNames = Object.keys(instance).filter((attribute) => Object.keys(associations).includes(attribute));
|
|
@@ -33,5 +42,6 @@ const handleChildrenAfterFindHook = async (instances, options, level = 0) => {
|
|
|
33
42
|
return handleChildrenAfterFindHook(childInstances, options, level + 1);
|
|
34
43
|
}
|
|
35
44
|
return Promise.resolve();
|
|
36
|
-
};
|
|
45
|
+
});
|
|
37
46
|
exports.default = handleChildrenAfterFindHook;
|
|
47
|
+
//# sourceMappingURL=workaround.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workaround.js","sourceRoot":"","sources":["../../src/hooks/workaround.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;;;;;;;;;AAEH,MAAM,2BAA2B,GAAG,CAAO,SAAS,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,EAAE,EAAE;IAC1E,IAAI,CAAC,SAAS;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAEzC,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;YAC5C,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC,WAAW,CAAC;YAC1D,OAAO,2BAA2B,CAChC,QAAQ,EACR,eAAe,EACf,KAAK,CACN,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC;KACL;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAEjC;;;WAGO;IACP,IAAI,KAAK,IAAI,CAAC,EAAE;QACd,MAAM,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KAC5D;IAED,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,CAAC;IACrC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CACjE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAEjD,IAAI,eAAe,CAAC,MAAM,EAAE;QAC1B,MAAM,cAAc,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACrE,OAAO,2BAA2B,CAAC,cAAc,EAAE,OAAO,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;KACxE;IAED,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AAC3B,CAAC,CAAA,CAAC;AAEF,kBAAe,2BAA2B,CAAC"}
|