@autofleet/sadot 0.0.1-beta → 0.0.1-beta.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.
Files changed (150) hide show
  1. package/dist/{src/api → api}/index.js +1 -0
  2. package/dist/api/index.js.map +1 -0
  3. package/dist/{src/api → api}/v1/definition/index.js +28 -25
  4. package/dist/api/v1/definition/index.js.map +1 -0
  5. package/dist/api/v1/definition/validations.js +36 -0
  6. package/dist/api/v1/definition/validations.js.map +1 -0
  7. package/dist/{src/api → api}/v1/errors.js +1 -0
  8. package/dist/api/v1/errors.js.map +1 -0
  9. package/dist/{src/api → api}/v1/index.js +2 -1
  10. package/dist/api/v1/index.js.map +1 -0
  11. package/dist/{src/events → events}/index.js +2 -21
  12. package/dist/events/index.js.map +1 -0
  13. package/dist/{src/hooks → hooks}/create.js +18 -15
  14. package/dist/hooks/create.js.map +1 -0
  15. package/dist/{src/hooks/enrich.js → hooks/find.js} +29 -52
  16. package/dist/hooks/find.js.map +1 -0
  17. package/dist/{src/hooks → hooks}/index.js +4 -5
  18. package/dist/hooks/index.js.map +1 -0
  19. package/dist/{src/hooks → hooks}/update.js +23 -8
  20. package/dist/hooks/update.js.map +1 -0
  21. package/dist/{src/hooks → hooks}/workaround.js +15 -5
  22. package/dist/hooks/workaround.js.map +1 -0
  23. package/dist/index.js +80 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/{src/models → models}/CustomFieldDefinition.js +17 -22
  26. package/dist/models/CustomFieldDefinition.js.map +1 -0
  27. package/dist/{src/models → models}/CustomFieldValue.js +39 -24
  28. package/dist/models/CustomFieldValue.js.map +1 -0
  29. package/dist/models/index.js +50 -0
  30. package/dist/models/index.js.map +1 -0
  31. package/dist/{src/models → models}/tests/AssociatedTestModel.js +1 -0
  32. package/dist/models/tests/AssociatedTestModel.js.map +1 -0
  33. package/dist/{src/models → models}/tests/TestModel.js +1 -0
  34. package/dist/models/tests/TestModel.js.map +1 -0
  35. package/dist/repository/definition.js +107 -0
  36. package/dist/repository/definition.js.map +1 -0
  37. package/dist/{src/repository → repository}/value.js +36 -27
  38. package/dist/repository/value.js.map +1 -0
  39. package/dist/{src/tests → tests}/api/test-api.js +22 -12
  40. package/dist/tests/api/test-api.js.map +1 -0
  41. package/dist/tests/helpers/index.js +28 -0
  42. package/dist/tests/helpers/index.js.map +1 -0
  43. package/dist/tests/mocks/index.js +60 -0
  44. package/dist/tests/mocks/index.js.map +1 -0
  45. package/dist/{src/tests → tests}/mocks/testModel.js +18 -10
  46. package/dist/tests/mocks/testModel.js.map +1 -0
  47. package/dist/tsconfig.tsbuildinfo +1 -0
  48. package/dist/{src/types → types}/definition/index.js +1 -0
  49. package/dist/types/definition/index.js.map +1 -0
  50. package/dist/{src/types → types}/index.js +1 -0
  51. package/dist/types/index.js.map +1 -0
  52. package/dist/{src/types → types}/value/index.js +1 -0
  53. package/dist/types/value/index.js.map +1 -0
  54. package/dist/{src/utils → utils}/db/index.js +1 -8
  55. package/dist/utils/db/index.js.map +1 -0
  56. package/dist/{src/utils → utils}/logger/index.js +2 -2
  57. package/dist/utils/logger/index.js.map +1 -0
  58. package/dist/{src/utils → utils}/validations/custom-fields.js +1 -0
  59. package/dist/utils/validations/custom-fields.js.map +1 -0
  60. package/dist/utils/validations/custom.js +59 -0
  61. package/dist/utils/validations/custom.js.map +1 -0
  62. package/dist/{src/utils → utils}/validations/index.js +1 -0
  63. package/dist/utils/validations/index.js.map +1 -0
  64. package/dist/utils/validations/type.js +32 -0
  65. package/dist/utils/validations/type.js.map +1 -0
  66. package/package.json +3 -6
  67. package/src/api/v1/definition/index.ts +13 -20
  68. package/src/api/v1/definition/validations.ts +27 -13
  69. package/src/api/v1/index.ts +1 -1
  70. package/src/events/index.ts +1 -23
  71. package/src/hooks/create.ts +6 -12
  72. package/src/hooks/find.ts +82 -23
  73. package/src/hooks/index.ts +2 -4
  74. package/src/hooks/update.ts +11 -5
  75. package/src/hooks/workaround.ts +2 -2
  76. package/src/index.ts +17 -60
  77. package/src/models/CustomFieldDefinition.ts +15 -23
  78. package/src/models/CustomFieldValue.ts +10 -10
  79. package/src/models/index.ts +16 -72
  80. package/src/models/tests/AssociatedTestModel.ts +1 -0
  81. package/src/models/tests/TestModel.ts +1 -0
  82. package/src/repository/definition.ts +41 -27
  83. package/src/repository/value.ts +11 -12
  84. package/src/tests/mocks/events.mock.ts +1 -1
  85. package/src/tests/mocks/{definition.mock.ts → index.ts} +6 -5
  86. package/src/tests/mocks/testModel.ts +7 -12
  87. package/src/types/index.ts +6 -4
  88. package/src/utils/db/index.ts +0 -7
  89. package/src/utils/logger/index.ts +1 -3
  90. package/src/utils/validations/custom.ts +44 -26
  91. package/src/utils/validations/type.ts +6 -23
  92. package/tsconfig.json +26 -9
  93. package/dist/jest.config.d.ts +0 -12
  94. package/dist/src/api/index.d.ts +0 -2
  95. package/dist/src/api/v1/definition/index.d.ts +0 -2
  96. package/dist/src/api/v1/definition/validations.d.ts +0 -2
  97. package/dist/src/api/v1/definition/validations.js +0 -36
  98. package/dist/src/api/v1/errors.d.ts +0 -2
  99. package/dist/src/api/v1/index.d.ts +0 -2
  100. package/dist/src/errors/index.d.ts +0 -16
  101. package/dist/src/errors/index.js +0 -45
  102. package/dist/src/events/index.d.ts +0 -4
  103. package/dist/src/hooks/create.d.ts +0 -9
  104. package/dist/src/hooks/enrich.d.ts +0 -5
  105. package/dist/src/hooks/find.d.ts +0 -1
  106. package/dist/src/hooks/find.js +0 -29
  107. package/dist/src/hooks/index.d.ts +0 -6
  108. package/dist/src/hooks/update.d.ts +0 -9
  109. package/dist/src/hooks/workaround.d.ts +0 -10
  110. package/dist/src/index.d.ts +0 -11
  111. package/dist/src/index.js +0 -105
  112. package/dist/src/models/CustomFieldDefinition.d.ts +0 -23
  113. package/dist/src/models/CustomFieldValue.d.ts +0 -15
  114. package/dist/src/models/index.d.ts +0 -8
  115. package/dist/src/models/index.js +0 -87
  116. package/dist/src/models/tests/AssociatedTestModel.d.ts +0 -12
  117. package/dist/src/models/tests/TestModel.d.ts +0 -11
  118. package/dist/src/repository/definition.d.ts +0 -17
  119. package/dist/src/repository/definition.js +0 -80
  120. package/dist/src/repository/value.d.ts +0 -24
  121. package/dist/src/tests/api/test-api.d.ts +0 -2
  122. package/dist/src/tests/helpers/database-config.d.ts +0 -15
  123. package/dist/src/tests/helpers/database-config.js +0 -16
  124. package/dist/src/tests/helpers/index.d.ts +0 -2
  125. package/dist/src/tests/helpers/index.js +0 -18
  126. package/dist/src/tests/mocks/definition.mock.d.ts +0 -37
  127. package/dist/src/tests/mocks/definition.mock.js +0 -64
  128. package/dist/src/tests/mocks/events.mock.d.ts +0 -3
  129. package/dist/src/tests/mocks/events.mock.js +0 -19
  130. package/dist/src/tests/mocks/testModel.d.ts +0 -12
  131. package/dist/src/types/definition/index.d.ts +0 -23
  132. package/dist/src/types/index.d.ts +0 -13
  133. package/dist/src/types/value/index.d.ts +0 -15
  134. package/dist/src/utils/constants/index.d.ts +0 -1
  135. package/dist/src/utils/constants/index.js +0 -5
  136. package/dist/src/utils/db/index.d.ts +0 -4
  137. package/dist/src/utils/logger/index.d.ts +0 -2
  138. package/dist/src/utils/validations/custom-fields.d.ts +0 -2
  139. package/dist/src/utils/validations/custom.d.ts +0 -15
  140. package/dist/src/utils/validations/custom.js +0 -42
  141. package/dist/src/utils/validations/index.d.ts +0 -2
  142. package/dist/src/utils/validations/type.d.ts +0 -18
  143. package/dist/src/utils/validations/type.js +0 -50
  144. package/dist/src/utils/validations/validators.d.ts +0 -12
  145. package/dist/src/utils/validations/validators.js +0 -33
  146. package/src/errors/index.ts +0 -42
  147. package/src/hooks/enrich.ts +0 -125
  148. package/src/tests/helpers/database-config.ts +0 -14
  149. package/src/utils/constants/index.ts +0 -2
  150. package/src/utils/validations/validators.ts +0 -34
@@ -9,3 +9,4 @@ const v1_1 = __importDefault(require("./v1"));
9
9
  const router = (0, express_1.Router)({ mergeParams: true });
10
10
  router.use('/v1', v1_1.default);
11
11
  exports.default = router;
12
+ //# sourceMappingURL=index.js.map
@@ -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
  };
@@ -34,33 +43,30 @@ const validations_1 = require("./validations");
34
43
  const logger_1 = __importDefault(require("../../../utils/logger"));
35
44
  const router = (0, express_1.Router)({ mergeParams: true });
36
45
  const ENTITY = 'CustomFieldDefinition';
37
- const toPascalCase = (str) => str.replace(/(^\w|-\w)/g, (subStr) => subStr.replace(/-/, '').toUpperCase());
46
+ const toPascalCase = (str) => str.replace(/(^\w|-\w)/g, subStr => subStr.replace(/-/, '').toUpperCase());
38
47
  /**
39
48
  * Create
40
49
  */
41
- router.post('/', async (req, res) => {
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 = await (0, validations_1.validateCustomFieldDefinitionCreation)(req.body);
46
- const customFieldDefinition = await DefinitionRepo.create({
47
- ...validatedPayload,
48
- modelType,
49
- });
54
+ const validatedPayload = yield (0, validations_1.validateCustomFieldDefinitionCreation)(Object.assign(Object.assign({}, req.body), { modelType }));
55
+ const customFieldDefinition = yield DefinitionRepo.create(validatedPayload);
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', async (req, res) => {
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 = await DefinitionRepo.findById(customFieldDefinitionId);
69
+ const customFieldDefinition = yield DefinitionRepo.findById(customFieldDefinitionId);
64
70
  if (!customFieldDefinition) {
65
71
  throw new errors_1.ResourceNotFoundError();
66
72
  }
@@ -70,49 +76,46 @@ 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('/', async (req, res) => {
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 where = { modelType };
83
- if (entityIds?.length > 0) {
84
- where.entityId = entityIds;
85
- }
86
- const customFieldDefinitions = await DefinitionRepo.findAll({ ...where }, { withDisabled: true });
87
+ const customFieldDefinitions = yield DefinitionRepo.findAll({
88
+ modelType,
89
+ });
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', async (req, res) => {
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
- // eslint-disable-next-line max-len
102
- const validatedPayload = await (0, validations_1.validateCustomFieldDefinitionUpdate)(req.body);
103
- const customFieldDefinition = await DefinitionRepo.findByWhere({
104
+ const validatedPayload = yield (0, validations_1.validateCustomFieldDefinitionUpdate)(req.body);
105
+ const customFieldDefinition = yield DefinitionRepo.findByWhere({
104
106
  id: customFieldDefinitionId,
105
107
  modelType,
106
108
  });
107
109
  if (!customFieldDefinition) {
108
110
  throw new errors_1.ResourceNotFoundError();
109
111
  }
110
- const updatedCustomFieldDefinition = await DefinitionRepo.update(customFieldDefinitionId, { ...validatedPayload, modelType });
112
+ const updatedCustomFieldDefinition = yield DefinitionRepo.update(customFieldDefinitionId, validatedPayload);
111
113
  return res.status(200).json(updatedCustomFieldDefinition);
112
114
  }
113
115
  catch (err) {
114
116
  logger_1.default.error('Failed to patch custom field definition', err);
115
117
  return (0, errors_2.default)(err, res, { message: `Error in update ${ENTITY} request` });
116
118
  }
117
- });
119
+ }));
118
120
  exports.default = router;
121
+ //# 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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"}
@@ -0,0 +1,36 @@
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
+ exports.validateCustomFieldDefinitionUpdate = exports.validateCustomFieldDefinitionCreation = void 0;
7
+ const joi_1 = __importDefault(require("@hapi/joi"));
8
+ const CustomFieldDefinition_1 = require("../../../models/CustomFieldDefinition");
9
+ const CustomFieldDefinitionCreationSchema = joi_1.default.object({
10
+ name: joi_1.default.string().required(),
11
+ displayName: joi_1.default.string().required(),
12
+ validation: joi_1.default.object().required(),
13
+ fieldType: joi_1.default.string().valid(CustomFieldDefinition_1.CustomFieldDefinitionType.BOOLEAN, CustomFieldDefinition_1.CustomFieldDefinitionType.NUMBER, CustomFieldDefinition_1.CustomFieldDefinitionType.DATE, CustomFieldDefinition_1.CustomFieldDefinitionType.DATETIME, CustomFieldDefinition_1.CustomFieldDefinitionType.TEXT, CustomFieldDefinition_1.CustomFieldDefinitionType.IMAGE, CustomFieldDefinition_1.CustomFieldDefinitionType.ENUM).required(),
14
+ entityId: joi_1.default.string().guid().required(),
15
+ entityType: joi_1.default.string().required(),
16
+ modelType: joi_1.default.string().required(),
17
+ description: joi_1.default.string(),
18
+ required: joi_1.default.boolean(),
19
+ disabled: joi_1.default.boolean(),
20
+ });
21
+ const CustomFieldDefinitionUpdateSchema = joi_1.default.object({
22
+ displayName: joi_1.default.string(),
23
+ validation: joi_1.default.object(),
24
+ fieldType: joi_1.default.string().valid(CustomFieldDefinition_1.CustomFieldDefinitionType.BOOLEAN, CustomFieldDefinition_1.CustomFieldDefinitionType.NUMBER, CustomFieldDefinition_1.CustomFieldDefinitionType.DATE, CustomFieldDefinition_1.CustomFieldDefinitionType.DATETIME, CustomFieldDefinition_1.CustomFieldDefinitionType.TEXT, CustomFieldDefinition_1.CustomFieldDefinitionType.IMAGE, CustomFieldDefinition_1.CustomFieldDefinitionType.ENUM),
25
+ entityId: joi_1.default.string().guid(),
26
+ entityType: joi_1.default.string(),
27
+ modelType: joi_1.default.string(),
28
+ description: joi_1.default.string(),
29
+ required: joi_1.default.boolean(),
30
+ disabled: joi_1.default.boolean(),
31
+ });
32
+ const validateCustomFieldDefinitionCreation = payload => CustomFieldDefinitionCreationSchema.validateAsync(payload, { abortEarly: false });
33
+ exports.validateCustomFieldDefinitionCreation = validateCustomFieldDefinitionCreation;
34
+ const validateCustomFieldDefinitionUpdate = payload => CustomFieldDefinitionUpdateSchema.validateAsync(payload, { abortEarly: false });
35
+ exports.validateCustomFieldDefinitionUpdate = validateCustomFieldDefinitionUpdate;
36
+ //# 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,iFAAkF;AAElF,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,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAC3B,iDAAyB,CAAC,OAAO,EACjC,iDAAyB,CAAC,MAAM,EAChC,iDAAyB,CAAC,IAAI,EAC9B,iDAAyB,CAAC,QAAQ,EAClC,iDAAyB,CAAC,IAAI,EAC9B,iDAAyB,CAAC,KAAK,EAC/B,iDAAyB,CAAC,IAAI,CAC/B,CAAC,QAAQ,EAAE;IACZ,QAAQ,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE;IACxC,UAAU,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,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,aAAG,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAC3B,iDAAyB,CAAC,OAAO,EACjC,iDAAyB,CAAC,MAAM,EAChC,iDAAyB,CAAC,IAAI,EAC9B,iDAAyB,CAAC,QAAQ,EAClC,iDAAyB,CAAC,IAAI,EAC9B,iDAAyB,CAAC,KAAK,EAC/B,iDAAyB,CAAC,IAAI,CAC/B;IACD,QAAQ,EAAE,aAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE;IAC7B,UAAU,EAAE,aAAG,CAAC,MAAM,EAAE;IACxB,SAAS,EAAE,aAAG,CAAC,MAAM,EAAE;IACvB,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,OAAO,CAAC,EAAE,CAC7D,mCAAmC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AADvE,QAAA,qCAAqC,yCACkC;AAE7E,MAAM,mCAAmC,GAAG,OAAO,CAAC,EAAE,CAC3D,iCAAiC,CAAC,aAAa,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;AADrE,QAAA,mCAAmC,uCACkC"}
@@ -13,3 +13,4 @@ exports.default = (err, res, additionalData = {}) => {
13
13
  }
14
14
  return (0, errors_1.handleError)(error, res, additionalData);
15
15
  };
16
+ //# sourceMappingURL=errors.js.map
@@ -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"}
@@ -6,5 +6,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const express_1 = require("express");
7
7
  const definition_1 = __importDefault(require("./definition"));
8
8
  const router = (0, express_1.Router)({ mergeParams: true });
9
- router.use('/custom-field-definitions/:modelName', definition_1.default);
9
+ router.use('/:modelName/custom-field-definitions', definition_1.default);
10
10
  exports.default = router;
11
+ //# sourceMappingURL=index.js.map
@@ -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"}
@@ -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
- let objectToSend = instance.get();
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,15 +22,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- const errors_1 = require("../errors");
34
38
  /**
35
39
  * A hook to create the custom fields when updating a model (more then one instance).
36
40
  */
@@ -44,27 +48,26 @@ exports.beforeBulkCreate = beforeBulkCreate;
44
48
  * A hook to create the custom fields when updating a model instance.
45
49
  * TODO - cleanup if update fail
46
50
  */
47
- const beforeCreate = (scopeAttributes) => async (instance, options) => {
48
- logger_1.default.debug('sadot - before create hook');
51
+ const beforeCreate = (scopeAttributes) => (instance, options) => __awaiter(void 0, void 0, void 0, function* () {
49
52
  const { fields } = options;
50
53
  const modelType = instance.constructor.name;
51
- const identifiers = scopeAttributes.map((attribute) => instance[attribute]);
54
+ const identifiers = scopeAttributes.map(attribute => instance[attribute]);
52
55
  // get all model's required definitions
53
- const requiredFieldsNames = await DefinitionRepo.getRequiredFields(modelType, instance.id, identifiers);
56
+ const requiredFieldsNames = yield DefinitionRepo.getRequiredFields(modelType, instance.id, identifiers);
54
57
  const customFieldsIdx = fields.indexOf('customFields');
55
58
  const { customFields } = instance;
56
59
  if (customFieldsIdx > -1 && customFields) {
57
60
  const fieldsNames = Object.keys(customFields);
58
- const missingFields = requiredFieldsNames.filter((name) => !fieldsNames.includes(name));
59
- if (missingFields?.length > 0) {
60
- throw new errors_1.MissingRequiredCustomFieldError(missingFields);
61
+ if (requiredFieldsNames.some(name => !fieldsNames.includes(name))) {
62
+ throw new Error('some fields are required');
61
63
  }
62
- await ValueRepo.updateValues(modelType, instance.id, identifiers, customFields, { transaction: options.transaction });
64
+ yield ValueRepo.updateValues(modelType, instance.id, customFields, { transaction: options.transaction });
63
65
  // eslint-disable-next-line no-param-reassign
64
66
  fields.splice(customFieldsIdx, 1);
65
67
  }
66
- else if (requiredFieldsNames?.length > 0) {
67
- throw new errors_1.MissingRequiredCustomFieldError(requiredFieldsNames);
68
+ else if ((requiredFieldsNames === null || requiredFieldsNames === void 0 ? void 0 : requiredFieldsNames.length) > 0) {
69
+ throw new Error('some fields are required');
68
70
  }
69
- };
71
+ });
70
72
  exports.beforeCreate = beforeCreate;
73
+ //# 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;AAE3D;;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,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,uCAAuC;IACvC,MAAM,mBAAmB,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;IACxG,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,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC7C;QAED,MAAM,SAAS,CAAC,YAAY,CAC1B,SAAS,EACT,QAAQ,CAAC,EAAE,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,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;AACH,CAAC,CAAA,CAAC;AA5BW,QAAA,YAAY,gBA4BvB"}
@@ -22,56 +22,43 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
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
- /* eslint-disable no-param-reassign */
30
35
  const ValueRepo = __importStar(require("../repository/value"));
31
36
  const DefinitionRepo = __importStar(require("../repository/definition"));
32
- const logger_1 = __importDefault(require("../utils/logger"));
33
37
  /**
34
38
  * Serialize custom fields value into the format of {[name] -> [fieldData]}
35
39
  */
36
- const serializeCustomFields = (customFieldValues, customFieldDefinitionsHash) => {
37
- const customFields = customFieldValues.reduce((acc, cfv) => ({
38
- ...acc,
39
- ...(customFieldDefinitionsHash[cfv.customFieldDefinitionId]
40
- && { [customFieldDefinitionsHash[cfv.customFieldDefinitionId].name]: cfv.value }),
41
- }), {});
40
+ const serializeCustomFields = (customFieldValues) => {
41
+ const customFields = customFieldValues.reduce((acc, cfv) => (Object.assign(Object.assign({}, acc), { [cfv.customFieldDefinition.name]: cfv.value })), {});
42
42
  return customFields;
43
43
  };
44
44
  /**
45
45
  * A hook to attach the custom fields when fetching a model instances.
46
46
  */
47
- const enrichResults = (modelType, scopeAttributes) => async (instancesOrInstance, options) => {
48
- if (options.originalAttributes?.length > 0
49
- && !options.originalAttributes?.includes?.('customFields')) {
50
- return;
51
- }
47
+ const afterFind = (scopeAttributes) => (instancesOrInstance, options) => __awaiter(void 0, void 0, void 0, function* () {
52
48
  const primaryKey = 'id';
53
- let instances = Array.isArray(instancesOrInstance)
49
+ const instances = Array.isArray(instancesOrInstance)
54
50
  ? instancesOrInstance
55
51
  : [instancesOrInstance];
56
- instances = instances.filter(Boolean);
57
- const identifiers = instances.map((instance) => scopeAttributes
58
- .map((attr) => instance[attr])).flat();
59
- const uniqueIdentifiers = [...new Set(identifiers)].filter(Boolean);
60
- const identifierCustomFieldDefinitionsMapping = uniqueIdentifiers.reduce((map, identifier) => ({
61
- ...map,
62
- [identifier]: [],
63
- }), {});
64
- const customFieldDefinitions = await DefinitionRepo.findByEntityIds(modelType, uniqueIdentifiers, { transaction: options.transaction });
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
- });
52
+ const identifiers = instances.map(instance => scopeAttributes.map(attr => instance[attr])).flat();
53
+ const uniqueIdentifiers = [...new Set(identifiers)];
54
+ const identifierCustomFieldDefinitionsMapping = {};
55
+ yield Promise.all(uniqueIdentifiers.map((identifier) => __awaiter(void 0, void 0, void 0, function* () {
56
+ const customFieldDefinitions = yield DefinitionRepo.findByEntityId(identifier, options.transaction);
57
+ identifierCustomFieldDefinitionsMapping[identifier] = customFieldDefinitions;
58
+ })));
72
59
  // Get the values per instates ids:
73
- const instancesIds = instances.map((i) => i[primaryKey]);
74
- const customFieldValues = await ValueRepo.findValuesByModelIds(instancesIds, { transaction: options.transaction });
60
+ const instancesIds = instances.map(i => i[primaryKey]);
61
+ const customFieldValues = yield ValueRepo.findValuesByModelIds(instancesIds, { transaction: options.transaction });
75
62
  // Group fields by modelId
76
63
  const valuesGroupByInstance = customFieldValues.reduce((acc, v) => {
77
64
  const { modelId } = v;
@@ -87,32 +74,22 @@ const enrichResults = (modelType, scopeAttributes) => async (instancesOrInstance
87
74
  const { id } = instance;
88
75
  const instanceValues = valuesGroupByInstance[id];
89
76
  if (instanceValues) {
90
- const serializedCustomFields = serializeCustomFields(instanceValues, definitionsMap);
77
+ const serializedCustomFields = serializeCustomFields(instanceValues);
91
78
  Object.assign(customFields, serializedCustomFields);
92
79
  }
93
80
  scopeAttributes.forEach((attribute) => {
94
81
  const identifier = instance[attribute];
95
- const entityCustomFieldDefinitions = identifierCustomFieldDefinitionsMapping[identifier];
96
- if (entityCustomFieldDefinitions?.length > 0) {
97
- entityCustomFieldDefinitions.forEach((customFieldDefinition) => {
82
+ const customFieldDefinitions = identifierCustomFieldDefinitionsMapping[identifier];
83
+ if ((customFieldDefinitions === null || customFieldDefinitions === void 0 ? void 0 : customFieldDefinitions.length) > 0) {
84
+ customFieldDefinitions.forEach((customFieldDefinition) => {
98
85
  if (customFields[customFieldDefinition.name] === undefined) {
99
86
  customFields[customFieldDefinition.name] = null;
100
87
  }
101
88
  });
102
89
  }
103
90
  });
104
- if (customFields && Object.keys(customFields).length > 0) {
105
- logger_1.default.info('sadot - enrichResults - customFields', customFields);
106
- instance.customFields = customFields;
107
- }
108
- else {
109
- logger_1.default.info('sadot - enrichResults - no customFields');
110
- }
111
- options.attributesToRemove?.forEach?.((attribute) => {
112
- delete instance.dataValues?.[attribute];
113
- // if raw:
114
- delete instance?.[attribute];
115
- });
91
+ instance.setDataValue('customFields', customFields);
116
92
  });
117
- };
118
- exports.default = enrichResults;
93
+ });
94
+ exports.default = afterFind;
95
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/hooks/find.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,+DAAiD;AACjD,yEAA2D;AAI3D;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,iBAAqC,EAA0B,EAAE;IAC9F,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,iCACvD,GAAG,KACN,CAAC,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,IAC3C,EAAE,EAAE,CAAC,CAAC;IACR,OAAO,YAAY,CAAC;AACtB,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,SAAS,GAAG,CAAC,eAAyB,EAAE,EAAE,CAAC,CAC/C,mBAAgC,EAChC,OAAO,EACQ,EAAE;IACjB,MAAM,UAAU,GAAG,IAAI,CAAC;IACxB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAClD,CAAC,CAAC,mBAAmB;QACrB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;IAE1B,MAAM,WAAW,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClG,MAAM,iBAAiB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,MAAM,uCAAuC,GAAG,EAAE,CAAC;IACnD,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAO,UAAU,EAAE,EAAE;QAC3D,MAAM,sBAAsB,GAAG,MAAM,cAAc,CAAC,cAAc,CAChE,UAAU,EACV,OAAO,CAAC,WAAW,CACpB,CAAC;QACF,uCAAuC,CAAC,UAAU,CAAC,GAAG,sBAAsB,CAAC;IAC/E,CAAC,CAAA,CAAC,CAAC,CAAC;IAEJ,mCAAmC;IACnC,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEvD,MAAM,iBAAiB,GAAG,MAAM,SAAS,CAAC,oBAAoB,CAC5D,YAAY,EACZ,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CACrC,CAAC;IAEF,0BAA0B;IAC1B,MAAM,qBAAqB,GAEvB,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;YACjB,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;SACnB;QACD,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,wCAAwC;IACxC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;QAC7B,MAAM,YAAY,GAAG,EAAE,CAAC;QACxB,MAAM,EAAE,EAAE,EAAE,GAAG,QAAQ,CAAC;QACxB,MAAM,cAAc,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,cAAc,EAAE;YAClB,MAAM,sBAAsB,GAAG,qBAAqB,CAAC,cAAc,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,sBAAsB,CAAC,CAAC;SACrD;QAED,eAAe,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;YACpC,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,sBAAsB,GAAG,uCAAuC,CAAC,UAAU,CAAC,CAAC;YACnF,IAAI,CAAA,sBAAsB,aAAtB,sBAAsB,uBAAtB,sBAAsB,CAAE,MAAM,IAAG,CAAC,EAAE;gBACtC,sBAAsB,CAAC,OAAO,CAAC,CAAC,qBAAqB,EAAE,EAAE;oBACvD,IAAI,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE;wBAC1D,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;qBACjD;gBACH,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,YAAY,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,kBAAe,SAAS,CAAC"}
@@ -3,11 +3,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.workaround = exports.beforeCreate = exports.beforeBulkCreate = exports.beforeUpdate = exports.beforeBulkUpdate = exports.beforeFind = exports.enrichResults = void 0;
7
- const enrich_1 = __importDefault(require("./enrich"));
8
- exports.enrichResults = enrich_1.default;
9
- const find_1 = require("./find");
10
- Object.defineProperty(exports, "beforeFind", { enumerable: true, get: function () { return find_1.beforeFind; } });
6
+ exports.workaround = exports.beforeCreate = exports.beforeBulkCreate = exports.beforeUpdate = exports.beforeBulkUpdate = exports.afterFind = void 0;
7
+ const find_1 = __importDefault(require("./find"));
8
+ exports.afterFind = find_1.default;
11
9
  const update_1 = require("./update");
12
10
  Object.defineProperty(exports, "beforeBulkUpdate", { enumerable: true, get: function () { return update_1.beforeBulkUpdate; } });
13
11
  Object.defineProperty(exports, "beforeUpdate", { enumerable: true, get: function () { return update_1.beforeUpdate; } });
@@ -16,3 +14,4 @@ Object.defineProperty(exports, "beforeBulkCreate", { enumerable: true, get: func
16
14
  Object.defineProperty(exports, "beforeCreate", { enumerable: true, get: function () { return create_1.beforeCreate; } });
17
15
  const workaround_1 = __importDefault(require("./workaround"));
18
16
  exports.workaround = workaround_1.default;
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA+B;AAM7B,oBANK,cAAS,CAML;AALX,qCAA0D;AAMxD,iGANO,yBAAgB,OAMP;AAChB,6FAPyB,qBAAY,OAOzB;AANd,qCAA0D;AAOxD,iGAPO,yBAAgB,OAOP;AAChB,6FARyB,qBAAY,OAQzB;AAPd,8DAAsC;AAQpC,qBARK,oBAAU,CAQL"}
@@ -22,13 +22,19 @@ var __importStar = (this && this.__importStar) || function (mod) {
22
22
  __setModuleDefault(result, mod);
23
23
  return result;
24
24
  };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
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"));
37
+ const DefinitionRepo = __importStar(require("../repository/definition"));
32
38
  /**
33
39
  * A hook to update the custom fields when updating a model (more then one instance).
34
40
  */
@@ -42,17 +48,26 @@ exports.beforeBulkUpdate = beforeBulkUpdate;
42
48
  * A hook to update the custom fields when updating a model instance.
43
49
  * TODO - cleanup if update fail
44
50
  */
45
- const beforeUpdate = (scopeAttributes) => async (instance, options) => {
46
- logger_1.default.debug('sadot - before update hook');
51
+ const beforeUpdate = (scopeAttributes) => (instance, options) => __awaiter(void 0, void 0, void 0, function* () {
47
52
  const { fields } = options;
48
53
  const modelType = instance.constructor.name;
49
- const identifiers = scopeAttributes.map((attribute) => instance[attribute]);
54
+ const identifiers = scopeAttributes.map(attribute => instance[attribute]);
55
+ // get all model's required definitions
56
+ const requiredNullFieldsNames = yield DefinitionRepo.getRequiredFields(modelType, instance.id, identifiers, true);
50
57
  const customFieldsIdx = fields.indexOf('customFields');
51
58
  if (customFieldsIdx > -1) {
52
59
  const { customFields } = instance;
53
- await ValueRepo.updateValues(modelType, instance.id, identifiers, customFields, { transaction: options.transaction });
60
+ const fieldsNames = Object.keys(customFields);
61
+ if (requiredNullFieldsNames.some(name => !fieldsNames.includes(name))) {
62
+ throw new Error('some fields are required');
63
+ }
64
+ yield ValueRepo.updateValues(modelType, instance.id, customFields, { transaction: options.transaction });
54
65
  // eslint-disable-next-line no-param-reassign
55
66
  fields.splice(customFieldsIdx, 1);
56
67
  }
57
- };
68
+ else if ((requiredNullFieldsNames === null || requiredNullFieldsNames === void 0 ? void 0 : requiredNullFieldsNames.length) > 0) {
69
+ throw new Error('some fields are required');
70
+ }
71
+ });
58
72
  exports.beforeUpdate = beforeUpdate;
73
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/hooks/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+DAAiD;AACjD,yEAA2D;AAE3D;;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,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,uCAAuC;IACvC,MAAM,uBAAuB,GAAG,MAAM,cAAc,CAAC,iBAAiB,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IAElH,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,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9C,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE;YACrE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;SAC7C;QACD,MAAM,SAAS,CAAC,YAAY,CAC1B,SAAS,EACT,QAAQ,CAAC,EAAE,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,uBAAuB,aAAvB,uBAAuB,uBAAvB,uBAAuB,CAAE,MAAM,IAAG,CAAC,EAAE;QAC9C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;AACH,CAAC,CAAA,CAAC;AA5BW,QAAA,YAAY,gBA4BvB"}
@@ -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 = async (instances, options, level = 0) => {
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,14 +33,15 @@ const handleChildrenAfterFindHook = async (instances, options, level = 0) => {
24
33
  * Only run children "afterFind" hooks.
25
34
  */
26
35
  if (level >= 1) {
27
- await constructor.runHooks('afterFind', instance, options);
36
+ yield constructor.runHooks('afterFind', instance, options);
28
37
  }
29
38
  const { associations } = constructor;
30
- const associatedNames = Object.keys(instance).filter((attribute) => Object.keys(associations).includes(attribute));
39
+ const associatedNames = Object.keys(instance).filter(attribute => Object.keys(associations).includes(attribute));
31
40
  if (associatedNames.length) {
32
- const childInstances = associatedNames.map((name) => instance[name]);
41
+ const childInstances = associatedNames.map(name => instance[name]);
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,SAAS,CAAC,EAAE,CAC/D,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,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,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"}