@autofleet/sadot 0.12.0 → 0.13.0-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 (124) hide show
  1. package/package.json +3 -1
  2. package/src/api/v1/index.ts +2 -0
  3. package/src/api/v1/validator/index.ts +127 -0
  4. package/src/api/v1/validator/validations.ts +39 -0
  5. package/src/events/index.ts +1 -1
  6. package/src/hooks/hooks.ts +304 -0
  7. package/src/hooks/index.ts +10 -5
  8. package/src/index.ts +6 -0
  9. package/src/models/CustomValidator.ts +76 -0
  10. package/src/models/index.ts +7 -2
  11. package/src/repository/validator.ts +91 -0
  12. package/src/tests/helpers/commonHooks.ts +9 -2
  13. package/src/tests/helpers/index.ts +7 -2
  14. package/src/types/index.ts +1 -0
  15. package/src/utils/validations/schema/README.md +93 -0
  16. package/src/utils/validations/schema/validator-schema.ts +103 -0
  17. package/dist/api/index.d.ts +0 -3
  18. package/dist/api/index.js +0 -12
  19. package/dist/api/v1/definition/index.d.ts +0 -3
  20. package/dist/api/v1/definition/index.js +0 -116
  21. package/dist/api/v1/definition/validations.d.ts +0 -2
  22. package/dist/api/v1/definition/validations.js +0 -77
  23. package/dist/api/v1/errors.d.ts +0 -4
  24. package/dist/api/v1/errors.js +0 -12
  25. package/dist/api/v1/index.d.ts +0 -3
  26. package/dist/api/v1/index.js +0 -11
  27. package/dist/errors/index.d.ts +0 -24
  28. package/dist/errors/index.js +0 -66
  29. package/dist/events/index.d.ts +0 -4
  30. package/dist/events/index.js +0 -50
  31. package/dist/hooks/create.d.ts +0 -10
  32. package/dist/hooks/create.js +0 -95
  33. package/dist/hooks/enrich.d.ts +0 -30
  34. package/dist/hooks/enrich.js +0 -159
  35. package/dist/hooks/find.d.ts +0 -1
  36. package/dist/hooks/find.js +0 -29
  37. package/dist/hooks/index.d.ts +0 -6
  38. package/dist/hooks/index.js +0 -18
  39. package/dist/hooks/update.d.ts +0 -10
  40. package/dist/hooks/update.js +0 -49
  41. package/dist/hooks/utils/updateInstanceValues.d.ts +0 -15
  42. package/dist/hooks/utils/updateInstanceValues.js +0 -50
  43. package/dist/hooks/workaround.d.ts +0 -10
  44. package/dist/hooks/workaround.js +0 -37
  45. package/dist/index.d.ts +0 -13
  46. package/dist/index.js +0 -67
  47. package/dist/models/CustomFieldDefinition.d.ts +0 -25
  48. package/dist/models/CustomFieldDefinition.js +0 -192
  49. package/dist/models/CustomFieldEntries.d.ts +0 -15
  50. package/dist/models/CustomFieldEntries.js +0 -123
  51. package/dist/models/CustomFieldValue.d.ts +0 -16
  52. package/dist/models/CustomFieldValue.js +0 -151
  53. package/dist/models/index.d.ts +0 -17
  54. package/dist/models/index.js +0 -113
  55. package/dist/models/tests/AssociatedTestModel.d.ts +0 -12
  56. package/dist/models/tests/AssociatedTestModel.js +0 -71
  57. package/dist/models/tests/TestModel.d.ts +0 -12
  58. package/dist/models/tests/TestModel.js +0 -69
  59. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.d.ts +0 -10
  60. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +0 -53
  61. package/dist/models/tests/contextAwareModels/ContextTestModel.d.ts +0 -13
  62. package/dist/models/tests/contextAwareModels/ContextTestModel.js +0 -47
  63. package/dist/repository/definition.d.ts +0 -36
  64. package/dist/repository/definition.js +0 -121
  65. package/dist/repository/entries.d.ts +0 -13
  66. package/dist/repository/entries.js +0 -92
  67. package/dist/repository/utils/formatValues.d.ts +0 -3
  68. package/dist/repository/utils/formatValues.js +0 -16
  69. package/dist/repository/value.d.ts +0 -28
  70. package/dist/repository/value.js +0 -124
  71. package/dist/scopes/filter.d.ts +0 -30
  72. package/dist/scopes/filter.js +0 -75
  73. package/dist/scopes/helpers/filter.helpers.d.ts +0 -42
  74. package/dist/scopes/helpers/filter.helpers.js +0 -204
  75. package/dist/scopes/index.d.ts +0 -2
  76. package/dist/scopes/index.js +0 -6
  77. package/dist/tests/api/test-api.d.ts +0 -2
  78. package/dist/tests/api/test-api.js +0 -38
  79. package/dist/tests/functional/searching/index.d.ts +0 -8
  80. package/dist/tests/functional/searching/index.js +0 -44
  81. package/dist/tests/helpers/commonHooks.d.ts +0 -5
  82. package/dist/tests/helpers/commonHooks.js +0 -55
  83. package/dist/tests/helpers/database-config.d.ts +0 -16
  84. package/dist/tests/helpers/database-config.js +0 -17
  85. package/dist/tests/helpers/index.d.ts +0 -7
  86. package/dist/tests/helpers/index.js +0 -29
  87. package/dist/tests/mocks/definition.mock.d.ts +0 -48
  88. package/dist/tests/mocks/definition.mock.js +0 -78
  89. package/dist/tests/mocks/events.mock.d.ts +0 -4
  90. package/dist/tests/mocks/events.mock.js +0 -21
  91. package/dist/tests/mocks/testModel.d.ts +0 -12
  92. package/dist/tests/mocks/testModel.js +0 -35
  93. package/dist/types/definition/index.d.ts +0 -25
  94. package/dist/types/definition/index.js +0 -2
  95. package/dist/types/entries/index.d.ts +0 -25
  96. package/dist/types/entries/index.js +0 -2
  97. package/dist/types/index.d.ts +0 -34
  98. package/dist/types/index.js +0 -2
  99. package/dist/types/value/index.d.ts +0 -15
  100. package/dist/types/value/index.js +0 -2
  101. package/dist/utils/constants/index.d.ts +0 -19
  102. package/dist/utils/constants/index.js +0 -22
  103. package/dist/utils/db/index.d.ts +0 -4
  104. package/dist/utils/db/index.js +0 -24
  105. package/dist/utils/helpers/index.d.ts +0 -26
  106. package/dist/utils/helpers/index.js +0 -40
  107. package/dist/utils/init.d.ts +0 -7
  108. package/dist/utils/init.js +0 -109
  109. package/dist/utils/logger/index.d.ts +0 -3
  110. package/dist/utils/logger/index.js +0 -42
  111. package/dist/utils/scopeAttributes.d.ts +0 -2
  112. package/dist/utils/scopeAttributes.js +0 -11
  113. package/dist/utils/validations/index.d.ts +0 -8
  114. package/dist/utils/validations/index.js +0 -41
  115. package/dist/utils/validations/schema/custom-fields.d.ts +0 -3
  116. package/dist/utils/validations/schema/custom-fields.js +0 -9
  117. package/dist/utils/validations/type.d.ts +0 -15
  118. package/dist/utils/validations/type.js +0 -2
  119. package/dist/utils/validations/validators/index.d.ts +0 -14
  120. package/dist/utils/validations/validators/index.js +0 -40
  121. package/dist/utils/validations/validators/select.validator.d.ts +0 -5
  122. package/dist/utils/validations/validators/select.validator.js +0 -12
  123. package/dist/utils/validations/validators/status.validator.d.ts +0 -12
  124. package/dist/utils/validations/validators/status.validator.js +0 -15
package/dist/index.d.ts DELETED
@@ -1,13 +0,0 @@
1
- import type { Application } from 'express';
2
- import type { Sequelize } from 'sequelize-typescript';
3
- import type { CustomFieldOptions, ModelFetcher, Models } from './types';
4
- export * from './utils/validations/schema/custom-fields';
5
- export * from './utils/constants';
6
- export * from './utils/helpers';
7
- /**
8
- * Adding custom fields enrichment to the models inside the MODELS_FILE_NAME json file
9
- * @see {@link 'custom-fields/config'} for configurations
10
- */
11
- declare const useCustomFields: (app: Application | null, getModel: ModelFetcher, options: CustomFieldOptions) => Promise<Sequelize>;
12
- export default useCustomFields;
13
- export declare const disableCustomFields: (models: Models[], getModel: ModelFetcher) => void;
package/dist/index.js DELETED
@@ -1,67 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
26
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
27
- };
28
- var __importDefault = (this && this.__importDefault) || function (mod) {
29
- return (mod && mod.__esModule) ? mod : { "default": mod };
30
- };
31
- Object.defineProperty(exports, "__esModule", { value: true });
32
- exports.disableCustomFields = void 0;
33
- const models_1 = require("./models");
34
- const api_1 = __importDefault(require("./api"));
35
- const db_1 = __importDefault(require("./utils/db"));
36
- const logger_1 = __importStar(require("./utils/logger"));
37
- const init_1 = require("./utils/init");
38
- __exportStar(require("./utils/validations/schema/custom-fields"), exports);
39
- __exportStar(require("./utils/constants"), exports);
40
- __exportStar(require("./utils/helpers"), exports);
41
- /**
42
- * Adding custom fields enrichment to the models inside the MODELS_FILE_NAME json file
43
- * @see {@link 'custom-fields/config'} for configurations
44
- */
45
- const useCustomFields = async (app, getModel, options) => {
46
- (0, logger_1.tryAddingTraceIdMiddleware)().catch(() => null);
47
- const { models, useCustomFieldsEntries } = options;
48
- if (app) {
49
- app.use('/api', api_1.default);
50
- }
51
- const sequelize = options.sequelize ?? (0, db_1.default)(options.databaseConfig);
52
- if (process.env.NODE_ENV === 'test') {
53
- await (0, models_1.initTestModels)(sequelize);
54
- }
55
- // The order is important
56
- (0, init_1.addHooks)(models, getModel, { useCustomFieldsEntries });
57
- await (0, models_1.initTables)(sequelize, options.getUser, { useCustomFieldsEntries });
58
- (0, init_1.addScopes)(models, getModel, { useCustomFieldsEntries });
59
- (0, init_1.applyCustomAssociation)(models);
60
- logger_1.default.debug('sadot - custom fields finished initializing with models', models);
61
- return sequelize;
62
- };
63
- exports.default = useCustomFields;
64
- const disableCustomFields = (models, getModel) => {
65
- (0, init_1.removeHooks)(models, getModel);
66
- };
67
- exports.disableCustomFields = disableCustomFields;
@@ -1,25 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { CustomFieldDefinitionType } from '../utils/constants';
3
- import { CustomFieldValue } from '.';
4
- declare class CustomFieldDefinition extends Model {
5
- id: string;
6
- name: string;
7
- displayName?: string;
8
- fieldType: CustomFieldDefinitionType;
9
- validation?: any;
10
- entityId: string; /** Client association entity id */
11
- entityType: string; /** Client association entity type (demand source / fleet / etc.) */
12
- modelType: string; /** Model type. e.g. Vehicle / StopPoint / etc. */
13
- description?: string;
14
- required?: boolean;
15
- disabled?: boolean;
16
- defaultValue?: any;
17
- createdAt?: Date;
18
- updatedAt?: Date;
19
- deletedAt?: Date;
20
- blockEditingFromUI: boolean;
21
- values: CustomFieldValue[];
22
- static displayNameDefaultValue(instance: CustomFieldDefinition): void;
23
- static afterSaveHandler(instance: CustomFieldDefinition, options: any): void;
24
- }
25
- export default CustomFieldDefinition;
@@ -1,192 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
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
- const sequelize_typescript_1 = require("sequelize-typescript");
16
- const constants_1 = require("../utils/constants");
17
- const validators_1 = require("../utils/validations/validators");
18
- const _1 = require(".");
19
- const events_1 = require("../events");
20
- const errors_1 = require("../errors");
21
- const logger_1 = __importDefault(require("../utils/logger"));
22
- const validations_1 = require("../utils/validations");
23
- let CustomFieldDefinition = class CustomFieldDefinition extends sequelize_typescript_1.Model {
24
- static displayNameDefaultValue(instance) {
25
- if (!instance?.displayName) {
26
- // eslint-disable-next-line no-param-reassign
27
- instance.displayName = instance.name;
28
- }
29
- if (![null, undefined].includes(instance.defaultValue)) {
30
- const isValid = (0, validations_1.validateValue)(instance.defaultValue, instance.fieldType, instance.validation);
31
- if (isValid.error) {
32
- throw new errors_1.InvalidValueError(instance.defaultValue, instance.name, isValid.error);
33
- }
34
- }
35
- }
36
- static afterSaveHandler(instance, options) {
37
- if (options.transaction) {
38
- options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance));
39
- }
40
- else {
41
- (0, events_1.sendDimEvent)(instance);
42
- }
43
- }
44
- };
45
- __decorate([
46
- sequelize_typescript_1.PrimaryKey,
47
- (0, sequelize_typescript_1.Column)({
48
- type: sequelize_typescript_1.DataType.UUID,
49
- defaultValue: sequelize_typescript_1.DataType.UUIDV4,
50
- allowNull: false,
51
- }),
52
- __metadata("design:type", String)
53
- ], CustomFieldDefinition.prototype, "id", void 0);
54
- __decorate([
55
- (0, sequelize_typescript_1.Column)({
56
- type: sequelize_typescript_1.DataType.STRING,
57
- allowNull: false,
58
- }),
59
- __metadata("design:type", String)
60
- ], CustomFieldDefinition.prototype, "name", void 0);
61
- __decorate([
62
- (0, sequelize_typescript_1.Column)({
63
- type: sequelize_typescript_1.DataType.STRING,
64
- }),
65
- __metadata("design:type", String)
66
- ], CustomFieldDefinition.prototype, "displayName", void 0);
67
- __decorate([
68
- (0, sequelize_typescript_1.Is)('SupportedType', (value) => {
69
- if (!Object.values(constants_1.CustomFieldDefinitionType).includes(value)) {
70
- throw new errors_1.UnsupportedCustomFieldTypeError(`"${value}" is not a supported type.`);
71
- }
72
- }),
73
- (0, sequelize_typescript_1.Column)({
74
- type: sequelize_typescript_1.DataType.STRING,
75
- allowNull: false,
76
- }),
77
- __metadata("design:type", String)
78
- ], CustomFieldDefinition.prototype, "fieldType", void 0);
79
- __decorate([
80
- (0, sequelize_typescript_1.Column)({
81
- type: sequelize_typescript_1.DataType.JSONB,
82
- }),
83
- __metadata("design:type", Object)
84
- ], CustomFieldDefinition.prototype, "validation", void 0);
85
- __decorate([
86
- (0, sequelize_typescript_1.Column)({
87
- type: sequelize_typescript_1.DataType.UUID,
88
- allowNull: false,
89
- }),
90
- __metadata("design:type", String)
91
- ], CustomFieldDefinition.prototype, "entityId", void 0);
92
- __decorate([
93
- (0, sequelize_typescript_1.Column)({
94
- type: sequelize_typescript_1.DataType.STRING,
95
- allowNull: false,
96
- }),
97
- __metadata("design:type", String)
98
- ], CustomFieldDefinition.prototype, "entityType", void 0);
99
- __decorate([
100
- (0, sequelize_typescript_1.Column)({
101
- type: sequelize_typescript_1.DataType.STRING,
102
- allowNull: false,
103
- }),
104
- __metadata("design:type", String)
105
- ], CustomFieldDefinition.prototype, "modelType", void 0);
106
- __decorate([
107
- (0, sequelize_typescript_1.Column)({
108
- type: sequelize_typescript_1.DataType.TEXT,
109
- }),
110
- __metadata("design:type", String)
111
- ], CustomFieldDefinition.prototype, "description", void 0);
112
- __decorate([
113
- (0, sequelize_typescript_1.Column)({
114
- type: sequelize_typescript_1.DataType.BOOLEAN,
115
- defaultValue: false,
116
- }),
117
- __metadata("design:type", Boolean)
118
- ], CustomFieldDefinition.prototype, "required", void 0);
119
- __decorate([
120
- (0, sequelize_typescript_1.Column)({
121
- type: sequelize_typescript_1.DataType.BOOLEAN,
122
- defaultValue: false,
123
- }),
124
- __metadata("design:type", Boolean)
125
- ], CustomFieldDefinition.prototype, "disabled", void 0);
126
- __decorate([
127
- (0, sequelize_typescript_1.Column)({
128
- type: sequelize_typescript_1.DataType.JSONB,
129
- allowNull: true,
130
- }),
131
- __metadata("design:type", Object)
132
- ], CustomFieldDefinition.prototype, "defaultValue", void 0);
133
- __decorate([
134
- sequelize_typescript_1.Column,
135
- __metadata("design:type", Date)
136
- ], CustomFieldDefinition.prototype, "createdAt", void 0);
137
- __decorate([
138
- sequelize_typescript_1.Column,
139
- __metadata("design:type", Date)
140
- ], CustomFieldDefinition.prototype, "updatedAt", void 0);
141
- __decorate([
142
- sequelize_typescript_1.Column,
143
- __metadata("design:type", Date)
144
- ], CustomFieldDefinition.prototype, "deletedAt", void 0);
145
- __decorate([
146
- (0, sequelize_typescript_1.Column)({
147
- type: sequelize_typescript_1.DataType.BOOLEAN,
148
- defaultValue: false,
149
- allowNull: false,
150
- }),
151
- __metadata("design:type", Boolean)
152
- ], CustomFieldDefinition.prototype, "blockEditingFromUI", void 0);
153
- __decorate([
154
- (0, sequelize_typescript_1.HasMany)(() => _1.CustomFieldValue),
155
- __metadata("design:type", Array)
156
- ], CustomFieldDefinition.prototype, "values", void 0);
157
- __decorate([
158
- sequelize_typescript_1.BeforeCreate,
159
- __metadata("design:type", Function),
160
- __metadata("design:paramtypes", [CustomFieldDefinition]),
161
- __metadata("design:returntype", void 0)
162
- ], CustomFieldDefinition, "displayNameDefaultValue", null);
163
- __decorate([
164
- sequelize_typescript_1.AfterSave,
165
- __metadata("design:type", Function),
166
- __metadata("design:paramtypes", [CustomFieldDefinition, Object]),
167
- __metadata("design:returntype", void 0)
168
- ], CustomFieldDefinition, "afterSaveHandler", null);
169
- CustomFieldDefinition = __decorate([
170
- (0, sequelize_typescript_1.DefaultScope)(() => ({ where: { disabled: false } })),
171
- (0, sequelize_typescript_1.Table)({
172
- indexes: [
173
- {
174
- name: 'unique_name_model_type',
175
- fields: ['model_type', 'entity_id', 'name'],
176
- unique: true,
177
- },
178
- ],
179
- timestamps: true,
180
- validate: {
181
- validationByType() {
182
- // Verify the validation is provided if needed
183
- if (!this.validation && validators_1.CustomValidationTypes[this.fieldType]) {
184
- // TODO: enforce the validation-object schema based on the fieldType
185
- logger_1.default.error(`No custom validation for custom field type ${this.fieldType} found`);
186
- throw new errors_1.UnsupportedCustomValidationError(`Validation provided for "${this.fieldType}" is not supported`);
187
- }
188
- },
189
- },
190
- })
191
- ], CustomFieldDefinition);
192
- exports.default = CustomFieldDefinition;
@@ -1,15 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- declare class CustomFieldEntries extends Model {
3
- /** The ID of the model of which this row hold the custom field entries of, e.g. vehicleId / stopPointId / etc. */
4
- modelId: string;
5
- /** The ID of the entity of which this row hold the custom field entries of, e.g. fleetId / etc. */
6
- entityId: string;
7
- /** A dictionary of customFields and values with the following structure: `{ customFieldName: 'CustomFieldValue' }` */
8
- customFields: Record<string, any>;
9
- /** The type of model which this custom field entry represents. e.g. Vehicle / StopPoint / etc. */
10
- modelType: string;
11
- createdAt?: Date;
12
- updatedAt?: Date;
13
- static afterSaveHandler(instance: CustomFieldEntries, options: any): void;
14
- }
15
- export default CustomFieldEntries;
@@ -1,123 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || function (mod) {
25
- if (mod && mod.__esModule) return mod;
26
- var result = {};
27
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
- __setModuleDefault(result, mod);
29
- return result;
30
- };
31
- var __metadata = (this && this.__metadata) || function (k, v) {
32
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- const sequelize_typescript_1 = require("sequelize-typescript");
36
- const events_1 = require("../events");
37
- const CustomFieldDefinitionRepo = __importStar(require("../repository/definition"));
38
- const validations_1 = require("../utils/validations");
39
- let CustomFieldEntries = class CustomFieldEntries extends sequelize_typescript_1.Model {
40
- static afterSaveHandler(instance, options) {
41
- if (options.transaction) {
42
- options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance[0]));
43
- }
44
- else {
45
- (0, events_1.sendDimEvent)(instance[0]);
46
- }
47
- }
48
- };
49
- __decorate([
50
- sequelize_typescript_1.PrimaryKey,
51
- (0, sequelize_typescript_1.Column)({
52
- type: sequelize_typescript_1.DataType.UUID,
53
- allowNull: false,
54
- })
55
- /** The ID of the model of which this row hold the custom field entries of, e.g. vehicleId / stopPointId / etc. */
56
- ,
57
- __metadata("design:type", String)
58
- ], CustomFieldEntries.prototype, "modelId", void 0);
59
- __decorate([
60
- (0, sequelize_typescript_1.Column)({
61
- type: sequelize_typescript_1.DataType.UUID,
62
- allowNull: false,
63
- })
64
- /** The ID of the entity of which this row hold the custom field entries of, e.g. fleetId / etc. */
65
- ,
66
- __metadata("design:type", String)
67
- ], CustomFieldEntries.prototype, "entityId", void 0);
68
- __decorate([
69
- (0, sequelize_typescript_1.Column)({
70
- type: sequelize_typescript_1.DataType.JSONB,
71
- allowNull: false,
72
- defaultValue: {},
73
- })
74
- /** A dictionary of customFields and values with the following structure: `{ customFieldName: 'CustomFieldValue' }` */
75
- ,
76
- __metadata("design:type", Object)
77
- ], CustomFieldEntries.prototype, "customFields", void 0);
78
- __decorate([
79
- (0, sequelize_typescript_1.Column)({
80
- type: sequelize_typescript_1.DataType.STRING,
81
- allowNull: false,
82
- })
83
- /** The type of model which this custom field entry represents. e.g. Vehicle / StopPoint / etc. */
84
- ,
85
- __metadata("design:type", String)
86
- ], CustomFieldEntries.prototype, "modelType", void 0);
87
- __decorate([
88
- sequelize_typescript_1.Column,
89
- __metadata("design:type", Date)
90
- ], CustomFieldEntries.prototype, "createdAt", void 0);
91
- __decorate([
92
- sequelize_typescript_1.Column,
93
- __metadata("design:type", Date)
94
- ], CustomFieldEntries.prototype, "updatedAt", void 0);
95
- __decorate([
96
- sequelize_typescript_1.AfterUpsert,
97
- __metadata("design:type", Function),
98
- __metadata("design:paramtypes", [CustomFieldEntries, Object]),
99
- __metadata("design:returntype", void 0)
100
- ], CustomFieldEntries, "afterSaveHandler", null);
101
- CustomFieldEntries = __decorate([
102
- (0, sequelize_typescript_1.Table)({
103
- timestamps: true,
104
- indexes: [
105
- {
106
- name: 'idx_cfe_custom_fields',
107
- using: 'gin',
108
- operator: 'jsonb_path_ops',
109
- fields: ['custom_fields'],
110
- },
111
- ],
112
- validate: {
113
- async validationByType() {
114
- if (!Object.keys(this.customFields ?? {}).length) {
115
- return;
116
- }
117
- const definitionsByName = await CustomFieldDefinitionRepo.getCustomFieldDefinitionsDictionary([this]);
118
- (0, validations_1.validateInstanceCustomFieldEntries)(this, definitionsByName);
119
- },
120
- },
121
- })
122
- ], CustomFieldEntries);
123
- exports.default = CustomFieldEntries;
@@ -1,16 +0,0 @@
1
- import { Model } from 'sequelize-typescript';
2
- import { CustomFieldDefinition } from '.';
3
- declare class CustomFieldValue extends Model {
4
- modelId: string;
5
- customFieldDefinitionId: string;
6
- value: any;
7
- createdAt?: Date;
8
- updatedAt?: Date;
9
- deletedAt?: Date;
10
- customFieldDefinition: CustomFieldDefinition;
11
- private static validateValueAgainstDefinition;
12
- static validateCustomFieldValues(instances: CustomFieldValue[]): Promise<void>;
13
- static validateCustomFieldValue(instance: CustomFieldValue): Promise<void>;
14
- static afterSaveHandler(instance: CustomFieldValue, options: any): void;
15
- }
16
- export default CustomFieldValue;
@@ -1,151 +0,0 @@
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 __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
- return c > 3 && r && Object.defineProperty(target, key, r), r;
23
- };
24
- var __importStar = (this && this.__importStar) || function (mod) {
25
- if (mod && mod.__esModule) return mod;
26
- var result = {};
27
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
- __setModuleDefault(result, mod);
29
- return result;
30
- };
31
- var __metadata = (this && this.__metadata) || function (k, v) {
32
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33
- };
34
- Object.defineProperty(exports, "__esModule", { value: true });
35
- const sequelize_typescript_1 = require("sequelize-typescript");
36
- const events_1 = require("../events");
37
- const _1 = require(".");
38
- const validations_1 = require("../utils/validations");
39
- const CustomFieldDefinitionRepo = __importStar(require("../repository/definition"));
40
- const errors_1 = require("../errors");
41
- let CustomFieldValue = class CustomFieldValue extends sequelize_typescript_1.Model {
42
- static validateValueAgainstDefinition(instance, definition) {
43
- const { validation, fieldType, name } = definition;
44
- const isValidFieldType = (0, validations_1.validateFieldType)(fieldType);
45
- if (!isValidFieldType) {
46
- throw new errors_1.InvalidFieldTypeError(fieldType);
47
- }
48
- // Always allow null values
49
- if (instance.value === null)
50
- return;
51
- const validateValueResponse = (0, validations_1.validateValue)(instance.value, fieldType, validation);
52
- if (validateValueResponse.error) {
53
- throw new errors_1.InvalidValueError(instance.value, name, validateValueResponse.error);
54
- }
55
- }
56
- static async validateCustomFieldValues(instances) {
57
- const ids = instances.map((instance) => instance.customFieldDefinitionId);
58
- const uniqueIds = [...new Set(ids)];
59
- const definitions = await CustomFieldDefinitionRepo.findByIds(uniqueIds, { withDisabled: true });
60
- if (!definitions || definitions.length !== uniqueIds.length) {
61
- throw new Error('Definitions not found');
62
- }
63
- instances.forEach((instance) => {
64
- const definition = definitions.find((d) => d.id === instance.customFieldDefinitionId);
65
- if (definition) {
66
- this.validateValueAgainstDefinition(instance, definition);
67
- }
68
- });
69
- }
70
- static async validateCustomFieldValue(instance) {
71
- const { customFieldDefinitionId } = instance;
72
- // eslint-disable-next-line max-len
73
- const cfd = await CustomFieldDefinitionRepo.findById(customFieldDefinitionId, { withDisabled: true });
74
- this.validateValueAgainstDefinition(instance, cfd);
75
- }
76
- static afterSaveHandler(instance, options) {
77
- if (options.transaction) {
78
- options.transaction.afterCommit(() => (0, events_1.sendDimEvent)(instance[0]));
79
- }
80
- else {
81
- (0, events_1.sendDimEvent)(instance[0]);
82
- }
83
- }
84
- };
85
- __decorate([
86
- sequelize_typescript_1.PrimaryKey,
87
- (0, sequelize_typescript_1.Column)({
88
- type: sequelize_typescript_1.DataType.UUID,
89
- allowNull: false,
90
- }),
91
- __metadata("design:type", String)
92
- ], CustomFieldValue.prototype, "modelId", void 0);
93
- __decorate([
94
- sequelize_typescript_1.PrimaryKey,
95
- (0, sequelize_typescript_1.ForeignKey)(() => _1.CustomFieldDefinition),
96
- (0, sequelize_typescript_1.Column)({
97
- type: sequelize_typescript_1.DataType.UUID,
98
- allowNull: false,
99
- }),
100
- __metadata("design:type", String)
101
- ], CustomFieldValue.prototype, "customFieldDefinitionId", void 0);
102
- __decorate([
103
- (0, sequelize_typescript_1.Column)({
104
- type: sequelize_typescript_1.DataType.JSONB,
105
- allowNull: true,
106
- }),
107
- __metadata("design:type", Object)
108
- ], CustomFieldValue.prototype, "value", void 0);
109
- __decorate([
110
- sequelize_typescript_1.Column,
111
- __metadata("design:type", Date)
112
- ], CustomFieldValue.prototype, "createdAt", void 0);
113
- __decorate([
114
- sequelize_typescript_1.Column,
115
- __metadata("design:type", Date)
116
- ], CustomFieldValue.prototype, "updatedAt", void 0);
117
- __decorate([
118
- sequelize_typescript_1.Column,
119
- __metadata("design:type", Date)
120
- ], CustomFieldValue.prototype, "deletedAt", void 0);
121
- __decorate([
122
- (0, sequelize_typescript_1.BelongsTo)(() => _1.CustomFieldDefinition, { scope: { disabled: false } }),
123
- __metadata("design:type", _1.CustomFieldDefinition)
124
- ], CustomFieldValue.prototype, "customFieldDefinition", void 0);
125
- __decorate([
126
- sequelize_typescript_1.BeforeBulkCreate,
127
- sequelize_typescript_1.BeforeBulkUpdate,
128
- __metadata("design:type", Function),
129
- __metadata("design:paramtypes", [Array]),
130
- __metadata("design:returntype", Promise)
131
- ], CustomFieldValue, "validateCustomFieldValues", null);
132
- __decorate([
133
- sequelize_typescript_1.BeforeUpdate,
134
- sequelize_typescript_1.BeforeCreate,
135
- sequelize_typescript_1.BeforeUpsert,
136
- __metadata("design:type", Function),
137
- __metadata("design:paramtypes", [CustomFieldValue]),
138
- __metadata("design:returntype", Promise)
139
- ], CustomFieldValue, "validateCustomFieldValue", null);
140
- __decorate([
141
- sequelize_typescript_1.AfterUpsert,
142
- __metadata("design:type", Function),
143
- __metadata("design:paramtypes", [CustomFieldValue, Object]),
144
- __metadata("design:returntype", void 0)
145
- ], CustomFieldValue, "afterSaveHandler", null);
146
- CustomFieldValue = __decorate([
147
- (0, sequelize_typescript_1.Table)({
148
- timestamps: true,
149
- })
150
- ], CustomFieldValue);
151
- exports.default = CustomFieldValue;
@@ -1,17 +0,0 @@
1
- import type { Sequelize } from 'sequelize-typescript';
2
- import CustomFieldDefinition from './CustomFieldDefinition';
3
- import CustomFieldValue from './CustomFieldValue';
4
- import TestModel from './tests/TestModel';
5
- import ContextAwareTestModel from './tests/contextAwareModels/ContextAwareTestModel';
6
- import ContextTestModel from './tests/contextAwareModels/ContextTestModel';
7
- import AssociatedTestModel from './tests/AssociatedTestModel';
8
- import type { CustomFieldOptions } from '../types';
9
- import CustomFieldEntries from './CustomFieldEntries';
10
- interface InitTablesOptions {
11
- schemaPrefix?: string;
12
- schemaVersion?: string;
13
- useCustomFieldsEntries?: boolean;
14
- }
15
- declare const initTables: (sequelize: Sequelize, getUser: CustomFieldOptions['getUser'], { schemaPrefix, schemaVersion, useCustomFieldsEntries, }?: InitTablesOptions) => Promise<void>;
16
- declare const initTestModels: (sequelize: Sequelize) => Promise<void>;
17
- export { CustomFieldValue, CustomFieldDefinition, CustomFieldEntries, TestModel, AssociatedTestModel, ContextAwareTestModel, ContextTestModel, initTables, initTestModels, };