@autofleet/sadot 0.0.1-beta → 0.0.1-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) 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 +58 -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 +5 -12
  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 +17 -79
  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/definition/index.ts +1 -0
  88. package/src/types/index.ts +6 -4
  89. package/src/types/value/index.ts +2 -1
  90. package/src/utils/db/index.ts +0 -7
  91. package/src/utils/logger/index.ts +1 -3
  92. package/src/utils/validations/custom.ts +45 -28
  93. package/src/utils/validations/type.ts +6 -23
  94. package/tsconfig.json +26 -9
  95. package/dist/jest.config.d.ts +0 -12
  96. package/dist/src/api/index.d.ts +0 -2
  97. package/dist/src/api/v1/definition/index.d.ts +0 -2
  98. package/dist/src/api/v1/definition/validations.d.ts +0 -2
  99. package/dist/src/api/v1/definition/validations.js +0 -36
  100. package/dist/src/api/v1/errors.d.ts +0 -2
  101. package/dist/src/api/v1/index.d.ts +0 -2
  102. package/dist/src/errors/index.d.ts +0 -16
  103. package/dist/src/errors/index.js +0 -45
  104. package/dist/src/events/index.d.ts +0 -4
  105. package/dist/src/hooks/create.d.ts +0 -9
  106. package/dist/src/hooks/enrich.d.ts +0 -5
  107. package/dist/src/hooks/find.d.ts +0 -1
  108. package/dist/src/hooks/find.js +0 -29
  109. package/dist/src/hooks/index.d.ts +0 -6
  110. package/dist/src/hooks/update.d.ts +0 -9
  111. package/dist/src/hooks/workaround.d.ts +0 -10
  112. package/dist/src/index.d.ts +0 -11
  113. package/dist/src/index.js +0 -105
  114. package/dist/src/models/CustomFieldDefinition.d.ts +0 -23
  115. package/dist/src/models/CustomFieldValue.d.ts +0 -15
  116. package/dist/src/models/index.d.ts +0 -8
  117. package/dist/src/models/index.js +0 -87
  118. package/dist/src/models/tests/AssociatedTestModel.d.ts +0 -12
  119. package/dist/src/models/tests/TestModel.d.ts +0 -11
  120. package/dist/src/repository/definition.d.ts +0 -17
  121. package/dist/src/repository/definition.js +0 -80
  122. package/dist/src/repository/value.d.ts +0 -24
  123. package/dist/src/tests/api/test-api.d.ts +0 -2
  124. package/dist/src/tests/helpers/database-config.d.ts +0 -15
  125. package/dist/src/tests/helpers/database-config.js +0 -16
  126. package/dist/src/tests/helpers/index.d.ts +0 -2
  127. package/dist/src/tests/helpers/index.js +0 -18
  128. package/dist/src/tests/mocks/definition.mock.d.ts +0 -37
  129. package/dist/src/tests/mocks/definition.mock.js +0 -64
  130. package/dist/src/tests/mocks/events.mock.d.ts +0 -3
  131. package/dist/src/tests/mocks/events.mock.js +0 -19
  132. package/dist/src/tests/mocks/testModel.d.ts +0 -12
  133. package/dist/src/types/definition/index.d.ts +0 -23
  134. package/dist/src/types/index.d.ts +0 -13
  135. package/dist/src/types/value/index.d.ts +0 -15
  136. package/dist/src/utils/constants/index.d.ts +0 -1
  137. package/dist/src/utils/constants/index.js +0 -5
  138. package/dist/src/utils/db/index.d.ts +0 -4
  139. package/dist/src/utils/logger/index.d.ts +0 -2
  140. package/dist/src/utils/validations/custom-fields.d.ts +0 -2
  141. package/dist/src/utils/validations/custom.d.ts +0 -15
  142. package/dist/src/utils/validations/custom.js +0 -42
  143. package/dist/src/utils/validations/index.d.ts +0 -2
  144. package/dist/src/utils/validations/type.d.ts +0 -18
  145. package/dist/src/utils/validations/type.js +0 -50
  146. package/dist/src/utils/validations/validators.d.ts +0 -12
  147. package/dist/src/utils/validations/validators.js +0 -33
  148. package/src/errors/index.ts +0 -42
  149. package/src/hooks/enrich.ts +0 -125
  150. package/src/tests/helpers/database-config.ts +0 -14
  151. package/src/utils/constants/index.ts +0 -2
  152. package/src/utils/validations/validators.ts +0 -34
package/dist/index.js ADDED
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
17
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
18
+ return new (P || (P = Promise))(function (resolve, reject) {
19
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
20
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
21
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
22
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
23
+ });
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const sequelize_1 = require("sequelize");
30
+ const models_1 = require("./models");
31
+ const api_1 = __importDefault(require("./api"));
32
+ const hooks_1 = require("./hooks");
33
+ const db_1 = __importDefault(require("./utils/db"));
34
+ const logger_1 = __importDefault(require("./utils/logger"));
35
+ __exportStar(require("./utils/validations/custom-fields"), exports);
36
+ const addHooks = (models, getModel) => {
37
+ models.forEach(({ name, scopeAttributes }) => __awaiter(void 0, void 0, void 0, function* () {
38
+ try {
39
+ const model = getModel(name);
40
+ if (!model)
41
+ return;
42
+ model.rawAttributes.customFields = {
43
+ type: sequelize_1.DataTypes.VIRTUAL,
44
+ };
45
+ model.refreshAttributes();
46
+ // TODO: Uncomment after tests are passed
47
+ // model.addHook('afterFind', workaround);
48
+ model.addHook('afterFind', hooks_1.afterFind);
49
+ model.addHook('beforeBulkCreate', hooks_1.beforeBulkCreate);
50
+ model.addHook('afterFind', (0, hooks_1.afterFind)(scopeAttributes));
51
+ model.addHook('beforeBulkUpdate', hooks_1.beforeBulkUpdate);
52
+ model.addHook('beforeCreate', (0, hooks_1.beforeCreate)(scopeAttributes));
53
+ model.addHook('beforeUpdate', (0, hooks_1.beforeUpdate)(scopeAttributes));
54
+ }
55
+ catch (e) {
56
+ logger_1.default.error(`Could not add custom fields hook to model ${name}. `, e);
57
+ }
58
+ }));
59
+ };
60
+ /**
61
+ * Adding custom fields enrichment to the models inside the MODELS_FILE_NAME json file
62
+ * @see {@link 'custom-fields/config'} for configurations
63
+ */
64
+ const useCustomFields = (app, getModel, options) => __awaiter(void 0, void 0, void 0, function* () {
65
+ const { innerSequelize, models } = options;
66
+ // deepAfterFindWorkAround(sequelize);
67
+ if (app) {
68
+ app.use('/api', api_1.default);
69
+ }
70
+ if (!innerSequelize) {
71
+ const moreInnerSequelize = (0, db_1.default)(options.databaseConfig);
72
+ yield (0, models_1.initTables)(moreInnerSequelize);
73
+ }
74
+ else {
75
+ yield (0, models_1.initTables)(innerSequelize);
76
+ }
77
+ addHooks(models, getModel);
78
+ });
79
+ exports.default = useCustomFields;
80
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yCAAsC;AACtC,qCAAsC;AACtC,gDAAwB;AACxB,mCAAoG;AACpG,oDAAgC;AAChC,4DAAoC;AAGpC,oEAAkD;AAElD,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAE,QAAsB,EAAE,EAAE;IAClE,MAAM,CAAC,OAAO,CAAC,CAAO,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE;QACjD,IAAI;YACF,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,IAAI,CAAC,KAAK;gBAAE,OAAO;YACnB,KAAK,CAAC,aAAa,CAAC,YAAY,GAAG;gBACjC,IAAI,EAAE,qBAAS,CAAC,OAAO;aACxB,CAAC;YACF,KAAK,CAAC,iBAAiB,EAAE,CAAC;YAC1B,yCAAyC;YACzC,0CAA0C;YAC1C,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,iBAAS,CAAC,CAAC;YACtC,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,wBAAgB,CAAC,CAAC;YACpD,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,IAAA,iBAAS,EAAC,eAAe,CAAC,CAAC,CAAC;YACvD,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,wBAAgB,CAAC,CAAC;YACpD,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAA,oBAAY,EAAC,eAAe,CAAC,CAAC,CAAC;YAC7D,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,IAAA,oBAAY,EAAC,eAAe,CAAC,CAAC,CAAC;SAC9D;QAAC,OAAO,CAAC,EAAE;YACV,gBAAM,CAAC,KAAK,CAAC,6CAA6C,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;SACxE;IACH,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,eAAe,GAAG,CACtB,GAAuB,EACvB,QAAsB,EACtB,OAA2B,EACZ,EAAE;IACjB,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC3C,sCAAsC;IACtC,IAAI,GAAG,EAAE;QACP,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,aAAG,CAAC,CAAC;KACtB;IACD,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,kBAAkB,GAAG,IAAA,YAAM,EAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAC1D,MAAM,IAAA,mBAAU,EAAC,kBAAkB,CAAC,CAAC;KACtC;SAAM;QACL,MAAM,IAAA,mBAAU,EAAC,cAAc,CAAC,CAAC;KAClC;IACD,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC,CAAA,CAAC;AAEF,kBAAe,eAAe,CAAC"}
@@ -9,17 +9,27 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CustomFieldDefinitionType = void 0;
12
13
  /* eslint-disable @typescript-eslint/no-unused-vars */
13
- /* eslint-disable indent */
14
14
  const sequelize_typescript_1 = require("sequelize-typescript");
15
- const custom_1 = require("../utils/validations/custom");
16
- const type_1 = require("../utils/validations/type");
17
15
  const _1 = require(".");
18
16
  const events_1 = require("../events");
19
- const errors_1 = require("../errors");
17
+ /**
18
+ * Supported custom field types
19
+ */
20
+ var CustomFieldDefinitionType;
21
+ (function (CustomFieldDefinitionType) {
22
+ CustomFieldDefinitionType["NUMBER"] = "number";
23
+ CustomFieldDefinitionType["BOOLEAN"] = "boolean";
24
+ CustomFieldDefinitionType["DATE"] = "date";
25
+ CustomFieldDefinitionType["DATETIME"] = "datetime";
26
+ CustomFieldDefinitionType["TEXT"] = "text";
27
+ CustomFieldDefinitionType["IMAGE"] = "image";
28
+ CustomFieldDefinitionType["ENUM"] = "enum";
29
+ })(CustomFieldDefinitionType = exports.CustomFieldDefinitionType || (exports.CustomFieldDefinitionType = {}));
20
30
  let CustomFieldDefinition = class CustomFieldDefinition extends sequelize_typescript_1.Model {
21
31
  static displayNameDefaultValue(instance) {
22
- if (!instance?.displayName) {
32
+ if (!(instance === null || instance === void 0 ? void 0 : instance.displayName)) {
23
33
  // eslint-disable-next-line no-param-reassign
24
34
  instance.displayName = instance.name;
25
35
  }
@@ -56,11 +66,6 @@ __decorate([
56
66
  __metadata("design:type", String)
57
67
  ], CustomFieldDefinition.prototype, "displayName", void 0);
58
68
  __decorate([
59
- (0, sequelize_typescript_1.Is)('SupportedType', (value) => {
60
- if (!Object.values(type_1.CustomFieldDefinitionType).includes(value)) {
61
- throw new errors_1.UnsupportedCustomFieldTypeError(`"${value}" is not a supported type.`);
62
- }
63
- }),
64
69
  (0, sequelize_typescript_1.Column)({
65
70
  type: sequelize_typescript_1.DataType.STRING,
66
71
  allowNull: false,
@@ -146,20 +151,10 @@ CustomFieldDefinition = __decorate([
146
151
  (0, sequelize_typescript_1.DefaultScope)(() => ({ where: { disabled: false } })),
147
152
  (0, sequelize_typescript_1.Table)({
148
153
  indexes: [
149
- {
150
- name: 'unique_name_model_type',
151
- fields: ['model_type', 'entity_id', 'name'],
152
- unique: true,
153
- },
154
+ { name: "unique_name_model_type", fields: ["name", "model_type", "entity_id"], unique: true },
154
155
  ],
155
156
  timestamps: true,
156
- validate: {
157
- validationByType() {
158
- if (!(0, custom_1.validateValidation)(this.fieldType, this.validation)) {
159
- throw new errors_1.UnsupportedCustomValidationError(`Validation provided for "${this.fieldType}" is not supported`);
160
- }
161
- },
162
- },
163
157
  })
164
158
  ], CustomFieldDefinition);
165
159
  exports.default = CustomFieldDefinition;
160
+ //# sourceMappingURL=CustomFieldDefinition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFieldDefinition.js","sourceRoot":"","sources":["../../src/models/CustomFieldDefinition.ts"],"names":[],"mappings":"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"}
@@ -31,46 +31,60 @@ var __importStar = (this && this.__importStar) || function (mod) {
31
31
  var __metadata = (this && this.__metadata) || function (k, v) {
32
32
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
33
  };
34
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
35
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
36
+ return new (P || (P = Promise))(function (resolve, reject) {
37
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
38
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
39
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
40
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
41
+ });
42
+ };
34
43
  var __importDefault = (this && this.__importDefault) || function (mod) {
35
44
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
45
  };
37
46
  Object.defineProperty(exports, "__esModule", { value: true });
38
47
  /* eslint-disable @typescript-eslint/no-unused-vars */
39
- /* eslint-disable indent */
40
48
  const sequelize_typescript_1 = require("sequelize-typescript");
41
49
  const events_1 = require("../events");
42
50
  const _1 = require(".");
43
51
  const validations_1 = __importDefault(require("../utils/validations"));
44
52
  const CustomFieldDefinitionRepo = __importStar(require("../repository/definition"));
45
- const errors_1 = require("../errors");
53
+ const logger_1 = __importDefault(require("../utils/logger"));
46
54
  let CustomFieldValue = class CustomFieldValue extends sequelize_typescript_1.Model {
47
- static async validateValues(instances) {
48
- const ids = instances.map((instance) => instance.customFieldDefinitionId);
49
- const uniqueIds = [...new Set(ids)];
50
- const definitions = await CustomFieldDefinitionRepo.findByIds(uniqueIds, { withDisabled: true });
51
- if (!definitions || definitions.length !== uniqueIds.length) {
52
- throw new Error('Definitions not found');
53
- }
54
- instances.forEach((instance) => {
55
- const { validation, fieldType, } = definitions
56
- .find((definition) => definition.id === instance.customFieldDefinitionId);
55
+ static validateValues(instances) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ logger_1.default.info('CustomFieldValue BeforeBulkCreate/BeforeBulkUpdate', { instances });
58
+ const ids = instances.map(instance => instance.customFieldDefinitionId);
59
+ const uniqueIds = [...new Set(ids)];
60
+ const definitions = yield CustomFieldDefinitionRepo.findByIds(uniqueIds, { withDisabled: true });
61
+ if (!definitions || definitions.length !== uniqueIds.length) {
62
+ throw new Error('Definitions not found');
63
+ }
64
+ instances.forEach((instance) => {
65
+ const { validation, fieldType, } = definitions
66
+ .find(definition => definition.id === instance.customFieldDefinitionId);
67
+ const isValid = (0, validations_1.default)(instance.value, fieldType, validation);
68
+ if (!isValid) {
69
+ throw new Error('Invalid value');
70
+ }
71
+ });
72
+ });
73
+ }
74
+ static validateValue(instance) {
75
+ return __awaiter(this, void 0, void 0, function* () {
76
+ logger_1.default.info('CustomFieldValue BeforeCreate/BeforeUpdate', { instance });
77
+ const { customFieldDefinitionId } = instance;
78
+ const cfd = yield CustomFieldDefinitionRepo.findById(customFieldDefinitionId, { withDisabled: true });
79
+ const { validation, fieldType } = cfd;
57
80
  const isValid = (0, validations_1.default)(instance.value, fieldType, validation);
58
81
  if (!isValid) {
59
- throw new errors_1.InvalidValueError(instance.value, fieldType);
82
+ throw new Error('Invalid value');
60
83
  }
61
84
  });
62
85
  }
63
- static async validateValue(instance) {
64
- const { customFieldDefinitionId } = instance;
65
- // eslint-disable-next-line max-len
66
- const cfd = await CustomFieldDefinitionRepo.findById(customFieldDefinitionId, { withDisabled: true });
67
- const { validation, fieldType } = cfd;
68
- const isValid = (0, validations_1.default)(instance.value, fieldType, validation);
69
- if (!isValid) {
70
- throw new errors_1.InvalidValueError(instance.value, fieldType);
71
- }
72
- }
73
86
  static afterSaveHandler(instance, options) {
87
+ logger_1.default.info('CustomFieldValue afterSave', { instance });
74
88
  if (options.transaction) {
75
89
  options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance[0]));
76
90
  }
@@ -99,7 +113,7 @@ __decorate([
99
113
  __decorate([
100
114
  (0, sequelize_typescript_1.Column)({
101
115
  type: sequelize_typescript_1.DataType.JSONB,
102
- allowNull: true,
116
+ allowNull: false,
103
117
  }),
104
118
  __metadata("design:type", Object)
105
119
  ], CustomFieldValue.prototype, "value", void 0);
@@ -146,3 +160,4 @@ CustomFieldValue = __decorate([
146
160
  })
147
161
  ], CustomFieldValue);
148
162
  exports.default = CustomFieldValue;
163
+ //# sourceMappingURL=CustomFieldValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CustomFieldValue.js","sourceRoot":"","sources":["../../src/models/CustomFieldValue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.initTables = exports.AssociatedTestModel = exports.TestModel = exports.CustomFieldDefinition = exports.CustomFieldValue = void 0;
16
+ const logger_1 = __importDefault(require("../utils/logger"));
17
+ // import addPermanentHooks from '../hooks/permanent-hooks';
18
+ const CustomFieldDefinition_1 = __importDefault(require("./CustomFieldDefinition"));
19
+ exports.CustomFieldDefinition = CustomFieldDefinition_1.default;
20
+ const CustomFieldValue_1 = __importDefault(require("./CustomFieldValue"));
21
+ exports.CustomFieldValue = CustomFieldValue_1.default;
22
+ const TestModel_1 = __importDefault(require("./tests/TestModel"));
23
+ exports.TestModel = TestModel_1.default;
24
+ const AssociatedTestModel_1 = __importDefault(require("./tests/AssociatedTestModel"));
25
+ exports.AssociatedTestModel = AssociatedTestModel_1.default;
26
+ // export const CustomFieldDefinition = CustomFieldDefinitionModel;
27
+ // export { default as CustomFieldDefinition } from './custom-field-definition.model';
28
+ const productionModels = [CustomFieldDefinition_1.default, CustomFieldValue_1.default];
29
+ const testModels = [...productionModels, TestModel_1.default, AssociatedTestModel_1.default];
30
+ const initTables = (sequelize) => __awaiter(void 0, void 0, void 0, function* () {
31
+ logger_1.default.info('custom-fields: initialize custom-fields tables');
32
+ // Detect models and import them to the orm
33
+ // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
34
+ if (!sequelize.addModels) {
35
+ throw new Error('sequelize instance must have addModels function');
36
+ }
37
+ sequelize.addModels(process.env.NODE_ENV === 'test' ? testModels : productionModels);
38
+ yield sequelize.dropSchema('custom-fields', { logging: false });
39
+ yield sequelize.createSchema('custom-fields', { logging: false });
40
+ logger_1.default.info('custom-fields: models added');
41
+ yield CustomFieldDefinition_1.default.sync({ alter: true });
42
+ yield CustomFieldValue_1.default.sync({ alter: true });
43
+ if (process.env.NODE_ENV === 'test') {
44
+ yield TestModel_1.default.sync({ alter: true });
45
+ yield AssociatedTestModel_1.default.sync({ alter: true });
46
+ }
47
+ logger_1.default.info('custom-fields: models synced');
48
+ });
49
+ exports.initTables = initTables;
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,6DAAqC;AACrC,4DAA4D;AAE5D,oFAA4D;AAiCjC,gCAjCpB,+BAAqB,CAiCoB;AAhChD,0EAAkD;AAgCzC,2BAhCF,0BAAgB,CAgCE;AA/BzB,kEAA0C;AA+BQ,oBA/B3C,mBAAS,CA+B2C;AA9B3D,sFAA8D;AA8BD,8BA9BtD,6BAAmB,CA8BsD;AA5BhF,mEAAmE;AACnE,sFAAsF;AAEtF,MAAM,gBAAgB,GAAG,CAAC,+BAAqB,EAAE,0BAAgB,CAAC,CAAC;AACnE,MAAM,UAAU,GAAG,CAAC,GAAG,gBAAgB,EAAE,mBAAS,EAAE,6BAAmB,CAAC,CAAC;AAEzE,MAAM,UAAU,GAAG,CAAO,SAAoB,EAAiB,EAAE;IAC/D,gBAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC9D,2CAA2C;IAC3C,4EAA4E;IAC5E,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;KACpE;IACD,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IACrF,MAAM,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,SAAS,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAElE,gBAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAC3C,MAAM,+BAAqB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,0BAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;QACnC,MAAM,mBAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,6BAAmB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;KACjD;IACD,gBAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC9C,CAAC,CAAA,CAAC;AAEgF,gCAAU"}
@@ -69,3 +69,4 @@ AssociatedTestModel = __decorate([
69
69
  (0, sequelize_typescript_1.Table)({ schema: 'custom-fields', createdAt: false, updatedAt: false })
70
70
  ], AssociatedTestModel);
71
71
  exports.default = AssociatedTestModel;
72
+ //# sourceMappingURL=AssociatedTestModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AssociatedTestModel.js","sourceRoot":"","sources":["../../../src/models/tests/AssociatedTestModel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,+DAQ8B;AAC9B,4DAAoC;AAGpC,IAAM,mBAAmB,GAAzB,MAAM,mBAAoB,SAAQ,4BAAK;CAyCtC,CAAA;AAxCC;IAAC,iCAAU;IACV,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,+BAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,KAAK;KACjB,CAAC;;+CACU;AAEZ;IAAC,IAAA,iCAAU,EAAC,GAAG,EAAE,CAAC,mBAAS,CAAC;IAC3B,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;wDACmB;AAErB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;oDACc;AAEhB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC;;4DACsB;AAExB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC;;2DACqB;AAEvB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;KACvB,CAAC;;6DACyB;AAE3B;IAAC,IAAA,gCAAS,EAAC,GAAG,EAAE,CAAC,mBAAS,CAAC;8BAChB,mBAAS;sDAAC;AAxCjB,mBAAmB;IADxB,IAAA,4BAAK,EAAC,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;GACjE,mBAAmB,CAyCxB;AAED,kBAAe,mBAAmB,CAAC"}
@@ -61,3 +61,4 @@ TestModel = __decorate([
61
61
  (0, sequelize_typescript_1.Table)({ schema: 'custom-fields', createdAt: false, updatedAt: false })
62
62
  ], TestModel);
63
63
  exports.default = TestModel;
64
+ //# sourceMappingURL=TestModel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestModel.js","sourceRoot":"","sources":["../../../src/models/tests/TestModel.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,sDAAsD;AACtD,+DAO8B;AAC9B,gFAAwD;AAGxD,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,4BAAK;CAkC5B,CAAA;AAjCC;IAAC,iCAAU;IACV,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,YAAY,EAAE,+BAAQ,CAAC,MAAM;QAC7B,SAAS,EAAE,KAAK;KACjB,CAAC;;qCACU;AAEZ;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,KAAK;KACjB,CAAC;;0CACc;AAEhB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC;;kDACsB;AAExB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,IAAI;QACnB,SAAS,EAAE,IAAI;KAChB,CAAC;;iDACqB;AAEvB;IAAC,IAAA,6BAAM,EAAC;QACN,IAAI,EAAE,+BAAQ,CAAC,OAAO;KACvB,CAAC;;gDACsB;AAExB;IAAC,IAAA,8BAAO,EAAC,GAAG,EAAE,CAAC,6BAAmB,CAAC;;mDACK;AAjCpC,SAAS;IADd,IAAA,4BAAK,EAAC,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;GACjE,SAAS,CAkCd;AAED,kBAAe,SAAS,CAAC"}
@@ -0,0 +1,107 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.getRequiredFields = exports.destroy = exports.disable = exports.update = exports.findDefinitionsByModels = exports.findByWhere = exports.findByEntityId = exports.findById = exports.findByIds = exports.findAll = exports.create = void 0;
13
+ const sequelize_1 = require("sequelize");
14
+ const models_1 = require("../models");
15
+ const create = (data) => models_1.CustomFieldDefinition.create(data);
16
+ exports.create = create;
17
+ const findAll = (query, options = { withDisabled: false }) => {
18
+ if (options.withDisabled) {
19
+ return models_1.CustomFieldDefinition.unscoped().findAll({
20
+ where: query,
21
+ include: [models_1.CustomFieldValue],
22
+ });
23
+ }
24
+ return models_1.CustomFieldDefinition.findAll({
25
+ where: query,
26
+ include: [models_1.CustomFieldValue],
27
+ });
28
+ };
29
+ exports.findAll = findAll;
30
+ const findByIds = (ids, options = { withDisabled: false }) => (0, exports.findAll)({ id: { [sequelize_1.Op.in]: ids } }, options);
31
+ exports.findByIds = findByIds;
32
+ const findById = (id, options = { withDisabled: false }) => {
33
+ const { withDisabled } = options;
34
+ if (withDisabled) {
35
+ return models_1.CustomFieldDefinition.unscoped().findByPk(id, {
36
+ include: [models_1.CustomFieldValue],
37
+ });
38
+ }
39
+ return models_1.CustomFieldDefinition.findByPk(id, {
40
+ include: [models_1.CustomFieldValue],
41
+ });
42
+ };
43
+ exports.findById = findById;
44
+ const findByEntityId = (entityId, options = {}) => __awaiter(void 0, void 0, void 0, function* () {
45
+ return models_1.CustomFieldDefinition.findAll({
46
+ where: { entityId },
47
+ transaction: options.transaction,
48
+ });
49
+ });
50
+ exports.findByEntityId = findByEntityId;
51
+ const findByWhere = (where) => models_1.CustomFieldDefinition.findOne({
52
+ where,
53
+ include: [models_1.CustomFieldValue],
54
+ });
55
+ exports.findByWhere = findByWhere;
56
+ const findDefinitionsByModels = (modelTypes, options) => __awaiter(void 0, void 0, void 0, function* () {
57
+ const query = { modelType: { [sequelize_1.Op.in]: modelTypes } };
58
+ return models_1.CustomFieldDefinition.findAll({
59
+ where: query,
60
+ include: [models_1.CustomFieldValue],
61
+ transaction: options === null || options === void 0 ? void 0 : options.transaction,
62
+ });
63
+ });
64
+ exports.findDefinitionsByModels = findDefinitionsByModels;
65
+ const update = (id, data) => __awaiter(void 0, void 0, void 0, function* () {
66
+ const updatedDefinition = (yield models_1.CustomFieldDefinition.update(data, {
67
+ where: { id },
68
+ returning: true,
69
+ individualHooks: true,
70
+ }))[1][0];
71
+ return updatedDefinition;
72
+ });
73
+ exports.update = update;
74
+ const disable = (id) => models_1.CustomFieldDefinition.update({ disabled: true }, { where: { id } });
75
+ exports.disable = disable;
76
+ const destroy = (id) => models_1.CustomFieldDefinition.destroy({ where: { id } });
77
+ exports.destroy = destroy;
78
+ /**
79
+ * Return the names of the required fields for a given model
80
+ */
81
+ const getRequiredFields = (modelType, modelId, entityId, onlyNull = false) => __awaiter(void 0, void 0, void 0, function* () {
82
+ const entityIds = Array.isArray(entityId) ? entityId : [entityId];
83
+ const modelIds = Array.isArray(modelId) ? modelId : [modelId];
84
+ // const valueQuery = Object.assign(
85
+ // {
86
+ // modelId: { [Op.in]: modelIds },
87
+ // },
88
+ // onlyNull ? { value: { [Op.eq]: null } } : null,
89
+ // );
90
+ const valueQuery = onlyNull ? {
91
+ modelId: { [sequelize_1.Op.in]: modelIds },
92
+ value: { [sequelize_1.Op.eq]: null },
93
+ } : {};
94
+ const requiredFields = yield models_1.CustomFieldDefinition.findAll({
95
+ where: { required: true, modelType, entityId: { [sequelize_1.Op.in]: entityIds } },
96
+ include: {
97
+ model: models_1.CustomFieldValue,
98
+ where: Object.assign({}, valueQuery),
99
+ required: false,
100
+ },
101
+ logging: true,
102
+ });
103
+ const requiredFieldsNames = requiredFields.map(definition => definition.name);
104
+ return [...new Set(requiredFieldsNames)];
105
+ });
106
+ exports.getRequiredFields = getRequiredFields;
107
+ //# sourceMappingURL=definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"definition.js","sourceRoot":"","sources":["../../src/repository/definition.ts"],"names":[],"mappings":"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"}
@@ -22,86 +22,95 @@ 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
  };
28
37
  Object.defineProperty(exports, "__esModule", { value: true });
29
38
  exports.deleteValue = exports.updateValues = exports.findValuesByModelIds = exports.findValuesByModelId = exports.findAllValues = exports.create = exports.findByModelIdAndDefinition = void 0;
30
39
  /* eslint-disable max-len */
40
+ const sequelize_1 = require("sequelize");
31
41
  const models_1 = require("../models");
32
42
  const DefinitionRepo = __importStar(require("./definition"));
33
43
  const logger_1 = __importDefault(require("../utils/logger"));
34
- const errors_1 = require("../errors");
35
- const findByModelIdAndDefinition = async (modelId, customFieldDefinitionId) => models_1.CustomFieldValue.findAll({ where: { modelId, customFieldDefinitionId }, include: [models_1.CustomFieldDefinition] });
44
+ const findByModelIdAndDefinition = (modelId, customFieldDefinitionId) => __awaiter(void 0, void 0, void 0, function* () { return models_1.CustomFieldValue.findAll({ where: { modelId, customFieldDefinitionId }, include: [models_1.CustomFieldDefinition] }); });
36
45
  exports.findByModelIdAndDefinition = findByModelIdAndDefinition;
37
- const create = async (data, withAssociations = false) => {
38
- const created = await models_1.CustomFieldValue.create(data);
46
+ const create = (data, withAssociations = false) => __awaiter(void 0, void 0, void 0, function* () {
47
+ const created = yield models_1.CustomFieldValue.create(data);
39
48
  if (withAssociations) {
40
- const createdWithAssociations = await (0, exports.findByModelIdAndDefinition)(created.modelId, created.customFieldDefinitionId);
41
- return createdWithAssociations?.[0];
49
+ const createdWithAssociations = yield (0, exports.findByModelIdAndDefinition)(created.modelId, created.customFieldDefinitionId);
50
+ return createdWithAssociations === null || createdWithAssociations === void 0 ? void 0 : createdWithAssociations[0];
42
51
  }
43
52
  return created;
44
- };
53
+ });
45
54
  exports.create = create;
46
- const findAllValues = async () => models_1.CustomFieldValue.findAll({ include: [models_1.CustomFieldDefinition] });
55
+ const findAllValues = () => __awaiter(void 0, void 0, void 0, function* () { return models_1.CustomFieldValue.findAll({ include: [models_1.CustomFieldDefinition] }); });
47
56
  exports.findAllValues = findAllValues;
48
57
  /**
49
58
  * Get all values for model instance id (with their definitions)
50
59
  * @param modelId
51
60
  * @returns CustomFieldValue[]
52
61
  */
53
- const findValuesByModelId = async (modelId) => models_1.CustomFieldValue.findAll({ where: { modelId }, include: [models_1.CustomFieldDefinition] });
62
+ const findValuesByModelId = (modelId) => __awaiter(void 0, void 0, void 0, function* () { return models_1.CustomFieldValue.findAll({ where: { modelId }, include: [models_1.CustomFieldDefinition] }); });
54
63
  exports.findValuesByModelId = findValuesByModelId;
55
64
  /**
56
65
  * Retrieves custom field values for given model IDs
57
66
  * @param modelIds - An array of model IDs to query custom field values for.
58
67
  * @param options - Optional configuration object.
59
68
  */
60
- const findValuesByModelIds = async (modelIds, options) => {
69
+ const findValuesByModelIds = (modelIds, options) => __awaiter(void 0, void 0, void 0, function* () {
61
70
  const { transaction } = options;
62
71
  return models_1.CustomFieldValue.findAll({
63
72
  where: { modelId: modelIds },
73
+ include: [models_1.CustomFieldDefinition],
64
74
  transaction,
65
- raw: true,
66
- nest: true,
67
75
  });
68
- };
76
+ });
69
77
  exports.findValuesByModelIds = findValuesByModelIds;
70
78
  /**
71
79
  * Try to update custom field values for a model instance.
72
80
  * Create new value record if not exists, but fails if value's definition not exist.
73
81
  * Return the updated values
74
82
  */
75
- const updateValues = async (modelType, modelId, identifiers, valuesToUpdate, options = {}) => {
83
+ const updateValues = (modelType, modelId, valuesToUpdate, options = {}) => __awaiter(void 0, void 0, void 0, function* () {
76
84
  logger_1.default.info(`custom-fields: updating values for ${modelType} ${modelId}`, { valuesToUpdate });
77
85
  const names = Object.keys(valuesToUpdate);
78
- const fieldDefinitions = await DefinitionRepo.findAll({ modelType, name: names, entityId: identifiers }, { withDisabled: true, transaction: options.transaction }) || [];
79
- const disabledDefinitions = fieldDefinitions.filter((def) => def.disabled);
86
+ const fieldDefinitions = (yield DefinitionRepo.findAll({ modelType, name: { [sequelize_1.Op.in]: names } }, { withDisabled: true, transaction: options.transaction })) || [];
87
+ const disabledDefinitions = fieldDefinitions.filter(def => def.disabled);
80
88
  if (fieldDefinitions.length !== names.length) {
81
- const missingDefinitions = names.filter((name) => !fieldDefinitions.some((def) => def.name === name));
82
- throw new errors_1.MissingDefinitionError(missingDefinitions);
89
+ const missingDefinitions = names.filter(name => !fieldDefinitions.some(def => def.name === name));
90
+ throw new Error(`custom-fields: missing definitions for ${missingDefinitions.join(', ')}`);
83
91
  }
84
- const disabledNames = disabledDefinitions?.map((def) => def.name) || [];
85
- const valuesWithDisabledDefinitions = names.filter((name) => disabledNames.includes(name));
86
- if (valuesWithDisabledDefinitions?.length > 0) {
92
+ const disabledNames = (disabledDefinitions === null || disabledDefinitions === void 0 ? void 0 : disabledDefinitions.map(def => def.name)) || [];
93
+ const valuesWithDisabledDefinitions = names.filter(name => disabledNames.includes(name));
94
+ if ((valuesWithDisabledDefinitions === null || valuesWithDisabledDefinitions === void 0 ? void 0 : valuesWithDisabledDefinitions.length) > 0) {
87
95
  logger_1.default.warn(`custom-fields: trying to update disabled values: ${valuesWithDisabledDefinitions.join(', ')}`);
88
96
  }
89
- const values = names.map((name) => ({
97
+ const values = names.map(name => ({
90
98
  modelId,
91
99
  value: valuesToUpdate[name],
92
100
  updatedAt: new Date(),
93
- customFieldDefinitionId: fieldDefinitions.find((def) => def.name === name).id,
101
+ customFieldDefinitionId: fieldDefinitions.find(def => def.name === name).id,
94
102
  }));
95
- return Promise.all(values.map(async (value) => {
96
- const [cfv] = await models_1.CustomFieldValue.upsert(value, {
103
+ return Promise.all(values.map((value) => __awaiter(void 0, void 0, void 0, function* () {
104
+ const [cfv] = yield models_1.CustomFieldValue.upsert(value, {
97
105
  transaction: options.transaction,
98
106
  });
99
107
  return cfv;
100
- }));
101
- };
108
+ })));
109
+ });
102
110
  exports.updateValues = updateValues;
103
111
  const deleteValue = (id, options = {}) => models_1.CustomFieldValue.update({ deletedAt: new Date() }, {
104
112
  where: { id },
105
113
  transaction: options.transaction,
106
114
  });
107
115
  exports.deleteValue = deleteValue;
116
+ //# sourceMappingURL=value.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"value.js","sourceRoot":"","sources":["../../src/repository/value.ts"],"names":[],"mappings":"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"}