@autofleet/sadot 1.0.3 → 1.0.6

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 (189) hide show
  1. package/dist/api/index.js +1 -0
  2. package/dist/api/index.js.map +1 -0
  3. package/dist/api/v1/definition/index.js +1 -0
  4. package/dist/api/v1/definition/index.js.map +1 -0
  5. package/dist/api/v1/definition/validations.js +1 -0
  6. package/dist/api/v1/definition/validations.js.map +1 -0
  7. package/dist/api/v1/errors.js +1 -0
  8. package/dist/api/v1/errors.js.map +1 -0
  9. package/dist/api/v1/index.js +1 -0
  10. package/dist/api/v1/index.js.map +1 -0
  11. package/dist/api/v1/validator/index.js +1 -0
  12. package/dist/api/v1/validator/index.js.map +1 -0
  13. package/dist/api/v1/validator/validations.js +1 -0
  14. package/dist/api/v1/validator/validations.js.map +1 -0
  15. package/dist/errors/index.js +1 -0
  16. package/dist/errors/index.js.map +1 -0
  17. package/dist/events/index.js +1 -0
  18. package/dist/events/index.js.map +1 -0
  19. package/dist/hooks/create.js +2 -1
  20. package/dist/hooks/create.js.map +1 -0
  21. package/dist/hooks/enrich.js +4 -4
  22. package/dist/hooks/enrich.js.map +1 -0
  23. package/dist/hooks/find.js +1 -0
  24. package/dist/hooks/find.js.map +1 -0
  25. package/dist/hooks/hooks.js +3 -3
  26. package/dist/hooks/hooks.js.map +1 -0
  27. package/dist/hooks/index.js +1 -0
  28. package/dist/hooks/index.js.map +1 -0
  29. package/dist/hooks/update.js +1 -0
  30. package/dist/hooks/update.js.map +1 -0
  31. package/dist/hooks/utils/updateInstanceValues.js +1 -0
  32. package/dist/hooks/utils/updateInstanceValues.js.map +1 -0
  33. package/dist/hooks/workaround.js +1 -0
  34. package/dist/hooks/workaround.js.map +1 -0
  35. package/dist/index.js +1 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/models/CustomFieldDefinition.js +13 -3
  38. package/dist/models/CustomFieldDefinition.js.map +1 -0
  39. package/dist/models/CustomFieldEntries.js +9 -2
  40. package/dist/models/CustomFieldEntries.js.map +1 -0
  41. package/dist/models/CustomFieldValue.js +13 -3
  42. package/dist/models/CustomFieldValue.js.map +1 -0
  43. package/dist/models/CustomValidator.js +9 -2
  44. package/dist/models/CustomValidator.js.map +1 -0
  45. package/dist/models/index.js +1 -0
  46. package/dist/models/index.js.map +1 -0
  47. package/dist/models/tests/AssociatedTestModel.js +4 -1
  48. package/dist/models/tests/AssociatedTestModel.js.map +1 -0
  49. package/dist/models/tests/TestModel.js +4 -1
  50. package/dist/models/tests/TestModel.js.map +1 -0
  51. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js +1 -0
  52. package/dist/models/tests/contextAwareModels/ContextAwareTestModel.js.map +1 -0
  53. package/dist/models/tests/contextAwareModels/ContextTestModel.js +1 -0
  54. package/dist/models/tests/contextAwareModels/ContextTestModel.js.map +1 -0
  55. package/dist/repository/definition.d.ts +2 -1
  56. package/dist/repository/definition.js +5 -2
  57. package/dist/repository/definition.js.map +1 -0
  58. package/dist/repository/entries.js +1 -0
  59. package/dist/repository/entries.js.map +1 -0
  60. package/dist/repository/utils/formatValues.js +1 -0
  61. package/dist/repository/utils/formatValues.js.map +1 -0
  62. package/dist/repository/validator.js +1 -0
  63. package/dist/repository/validator.js.map +1 -0
  64. package/dist/repository/value.js +1 -0
  65. package/dist/repository/value.js.map +1 -0
  66. package/dist/scopes/filter.d.ts +1 -1
  67. package/dist/scopes/filter.js +1 -0
  68. package/dist/scopes/filter.js.map +1 -0
  69. package/dist/scopes/helpers/filter.helpers.js +1 -0
  70. package/dist/scopes/helpers/filter.helpers.js.map +1 -0
  71. package/dist/scopes/index.js +1 -0
  72. package/dist/scopes/index.js.map +1 -0
  73. package/dist/types/definition/index.js +1 -0
  74. package/dist/types/definition/index.js.map +1 -0
  75. package/dist/types/entries/index.js +1 -0
  76. package/dist/types/entries/index.js.map +1 -0
  77. package/dist/types/index.js +1 -0
  78. package/dist/types/index.js.map +1 -0
  79. package/dist/types/value/index.js +1 -0
  80. package/dist/types/value/index.js.map +1 -0
  81. package/dist/utils/constants/index.d.ts +1 -1
  82. package/dist/utils/constants/index.js +1 -0
  83. package/dist/utils/constants/index.js.map +1 -0
  84. package/dist/utils/db/index.js +1 -0
  85. package/dist/utils/db/index.js.map +1 -0
  86. package/dist/utils/helpers/index.js +1 -0
  87. package/dist/utils/helpers/index.js.map +1 -0
  88. package/dist/utils/init.js +1 -0
  89. package/dist/utils/init.js.map +1 -0
  90. package/dist/utils/logger/index.js +1 -0
  91. package/dist/utils/logger/index.js.map +1 -0
  92. package/dist/utils/scopeAttributes.js +1 -0
  93. package/dist/utils/scopeAttributes.js.map +1 -0
  94. package/dist/utils/validations/index.d.ts +1 -1
  95. package/dist/utils/validations/index.js +3 -2
  96. package/dist/utils/validations/index.js.map +1 -0
  97. package/dist/utils/validations/schema/custom-fields.js +1 -0
  98. package/dist/utils/validations/schema/custom-fields.js.map +1 -0
  99. package/dist/utils/validations/schema/validator-schema.js +1 -0
  100. package/dist/utils/validations/schema/validator-schema.js.map +1 -0
  101. package/dist/utils/validations/type.js +1 -0
  102. package/dist/utils/validations/type.js.map +1 -0
  103. package/dist/utils/validations/validators/index.js +1 -0
  104. package/dist/utils/validations/validators/index.js.map +1 -0
  105. package/dist/utils/validations/validators/select.validator.js +1 -0
  106. package/dist/utils/validations/validators/select.validator.js.map +1 -0
  107. package/dist/utils/validations/validators/status.validator.js +1 -0
  108. package/dist/utils/validations/validators/status.validator.js.map +1 -0
  109. package/package.json +22 -23
  110. package/.nvmrc +0 -1
  111. package/dist/tests/api/test-api.d.ts +0 -2
  112. package/dist/tests/api/test-api.js +0 -38
  113. package/dist/tests/functional/searching/index.d.ts +0 -8
  114. package/dist/tests/functional/searching/index.js +0 -44
  115. package/dist/tests/helpers/commonHooks.d.ts +0 -6
  116. package/dist/tests/helpers/commonHooks.js +0 -62
  117. package/dist/tests/helpers/database-config.d.ts +0 -16
  118. package/dist/tests/helpers/database-config.js +0 -17
  119. package/dist/tests/helpers/index.d.ts +0 -7
  120. package/dist/tests/helpers/index.js +0 -33
  121. package/dist/tests/mocks/definition.mock.d.ts +0 -48
  122. package/dist/tests/mocks/definition.mock.js +0 -78
  123. package/dist/tests/mocks/events.mock.d.ts +0 -4
  124. package/dist/tests/mocks/events.mock.js +0 -21
  125. package/dist/tests/mocks/testModel.d.ts +0 -12
  126. package/dist/tests/mocks/testModel.js +0 -35
  127. package/src/api/index.ts +0 -10
  128. package/src/api/v1/definition/index.ts +0 -104
  129. package/src/api/v1/definition/validations.ts +0 -75
  130. package/src/api/v1/errors.ts +0 -13
  131. package/src/api/v1/index.ts +0 -11
  132. package/src/api/v1/validator/index.ts +0 -141
  133. package/src/api/v1/validator/validations.ts +0 -38
  134. package/src/errors/index.ts +0 -70
  135. package/src/events/index.ts +0 -63
  136. package/src/hooks/create.ts +0 -81
  137. package/src/hooks/enrich.ts +0 -255
  138. package/src/hooks/find.ts +0 -27
  139. package/src/hooks/hooks.ts +0 -479
  140. package/src/hooks/index.ts +0 -20
  141. package/src/hooks/update.ts +0 -55
  142. package/src/hooks/utils/updateInstanceValues.ts +0 -63
  143. package/src/hooks/workaround.ts +0 -47
  144. package/src/index.ts +0 -52
  145. package/src/models/CustomFieldDefinition.ts +0 -162
  146. package/src/models/CustomFieldEntries.ts +0 -81
  147. package/src/models/CustomFieldValue.ts +0 -118
  148. package/src/models/CustomValidator.ts +0 -78
  149. package/src/models/index.ts +0 -165
  150. package/src/models/tests/AssociatedTestModel.ts +0 -57
  151. package/src/models/tests/TestModel.ts +0 -54
  152. package/src/models/tests/contextAwareModels/ContextAwareTestModel.ts +0 -43
  153. package/src/models/tests/contextAwareModels/ContextTestModel.ts +0 -38
  154. package/src/repository/definition.ts +0 -175
  155. package/src/repository/entries.ts +0 -88
  156. package/src/repository/utils/formatValues.ts +0 -14
  157. package/src/repository/validator.ts +0 -119
  158. package/src/repository/value.ts +0 -116
  159. package/src/scopes/filter.ts +0 -100
  160. package/src/scopes/helpers/filter.helpers.ts +0 -227
  161. package/src/scopes/index.ts +0 -6
  162. package/src/tests/api/test-api.ts +0 -40
  163. package/src/tests/functional/searching/index.ts +0 -39
  164. package/src/tests/helpers/commonHooks.ts +0 -43
  165. package/src/tests/helpers/database-config.ts +0 -15
  166. package/src/tests/helpers/index.ts +0 -35
  167. package/src/tests/mocks/definition.mock.ts +0 -84
  168. package/src/tests/mocks/events.mock.ts +0 -21
  169. package/src/tests/mocks/testModel.ts +0 -37
  170. package/src/types/definition/index.ts +0 -24
  171. package/src/types/entries/index.ts +0 -27
  172. package/src/types/index.ts +0 -52
  173. package/src/types/value/index.ts +0 -14
  174. package/src/utils/constants/index.ts +0 -25
  175. package/src/utils/db/index.ts +0 -21
  176. package/src/utils/helpers/index.ts +0 -66
  177. package/src/utils/init.ts +0 -122
  178. package/src/utils/logger/index.ts +0 -14
  179. package/src/utils/scopeAttributes.ts +0 -12
  180. package/src/utils/validations/index.ts +0 -46
  181. package/src/utils/validations/schema/README.md +0 -93
  182. package/src/utils/validations/schema/custom-fields.ts +0 -8
  183. package/src/utils/validations/schema/validator-schema.ts +0 -106
  184. package/src/utils/validations/type.ts +0 -20
  185. package/src/utils/validations/validators/index.ts +0 -38
  186. package/src/utils/validations/validators/select.validator.ts +0 -12
  187. package/src/utils/validations/validators/status.validator.ts +0 -22
  188. package/tsconfig.build.json +0 -7
  189. package/tsconfig.json +0 -16
@@ -1,62 +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 __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.commonTestHooks = void 0;
30
- const __1 = __importDefault(require("../.."));
31
- const _1 = require(".");
32
- const database_config_1 = __importDefault(require("./database-config"));
33
- const db_1 = __importStar(require("../../utils/db"));
34
- function commonTestHooks(app = null, models = [{ name: 'TestModel', scopeAttributes: ['fleetId'] }], options = {
35
- useCustomFieldsEntries: false,
36
- useValidators: false,
37
- }) {
38
- let sequelize;
39
- beforeAll(async () => {
40
- sequelize = (0, db_1.default)(database_config_1.default);
41
- await (0, db_1.createSequelizeMeta)(sequelize);
42
- await (0, __1.default)(app, _1.getModel, {
43
- models,
44
- databaseConfig: database_config_1.default,
45
- getUser: () => undefined,
46
- sequelize,
47
- useCustomFieldsEntries: options.useCustomFieldsEntries,
48
- useValidators: options.useValidators,
49
- });
50
- });
51
- afterEach(async () => {
52
- jest.clearAllMocks();
53
- await (0, _1.cleanup)({
54
- useCustomFieldsEntries: options.useCustomFieldsEntries,
55
- useValidators: options.useValidators,
56
- });
57
- });
58
- afterAll(async () => {
59
- await sequelize.close();
60
- });
61
- }
62
- exports.commonTestHooks = commonTestHooks;
@@ -1,16 +0,0 @@
1
- declare const _default: {
2
- test: {
3
- username: string;
4
- password: string;
5
- database: string;
6
- host: string;
7
- port: string | number;
8
- dialect: string;
9
- define: {
10
- underscored: boolean;
11
- underscoredAll: boolean;
12
- };
13
- logging: boolean;
14
- };
15
- };
16
- export default _default;
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.default = {
4
- test: {
5
- username: process.env.DB_USERNAME || '',
6
- password: process.env.DB_PASSWORD || null,
7
- database: process.env.DB_NAME || 'postgres',
8
- host: process.env.DB_HOST || '127.0.0.1',
9
- port: process.env.DB_PORT || 5432,
10
- dialect: process.env.DB_TYPE || 'postgres',
11
- define: {
12
- underscored: true,
13
- underscoredAll: true,
14
- },
15
- logging: false,
16
- },
17
- };
@@ -1,7 +0,0 @@
1
- import type { CustomFieldOptions } from '../../types';
2
- export declare const cleanup: (options?: Pick<CustomFieldOptions, 'useCustomFieldsEntries' | 'useValidators'>) => Promise<void>;
3
- export declare const getModel: (name: string) => any;
4
- export declare const getReplacementMapWithScopeValue: (conditions: Record<string, any>) => {
5
- replacementsMap: Record<string, string>;
6
- scopeValue: Record<string, any>;
7
- };
@@ -1,33 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getReplacementMapWithScopeValue = exports.getModel = exports.cleanup = void 0;
4
- const sheilta_1 = require("@autofleet/sheilta");
5
- const models_1 = require("../../models");
6
- // eslint-disable-next-line import/prefer-default-export
7
- const cleanup = async (options) => {
8
- if (process.env.NODE_ENV === 'test' || process.env.NODE_ENV === 'development') {
9
- await models_1.CustomFieldDefinition.unscoped().destroy({ where: {} });
10
- await models_1.TestModel.destroy({ where: {} });
11
- await models_1.ContextAwareTestModel.destroy({ where: {} });
12
- await models_1.ContextTestModel.destroy({ where: {} });
13
- if (options?.useCustomFieldsEntries) {
14
- await models_1.CustomFieldEntries.unscoped().destroy({ where: {} });
15
- }
16
- // Clean up validators if they were used
17
- if (options?.useValidators) {
18
- await models_1.CustomValidator.unscoped().destroy({ where: {} });
19
- }
20
- }
21
- };
22
- exports.cleanup = cleanup;
23
- const getModel = (name) => {
24
- // eslint-disable-next-line global-require, @typescript-eslint/no-var-requires
25
- const models = require('../../models');
26
- return models[name];
27
- };
28
- exports.getModel = getModel;
29
- const getReplacementMapWithScopeValue = (conditions) => ({
30
- replacementsMap: (0, sheilta_1.generateFilterReplacements)(Object.fromEntries(Object.entries(conditions).map(([key, value]) => [`customFields.${key}`, value]))),
31
- scopeValue: conditions,
32
- });
33
- exports.getReplacementMapWithScopeValue = getReplacementMapWithScopeValue;
@@ -1,48 +0,0 @@
1
- import type { CreateCustomFieldDefinition, CustomFieldDefinitionDTO } from '../../types/definition';
2
- export declare const contextAwareFieldDefinition: {
3
- name: string;
4
- modelType: string;
5
- fieldType: string;
6
- entityType: string;
7
- };
8
- export declare const coolFieldDefinition: CreateCustomFieldDefinition;
9
- export declare const coolFieldDefinition2: {
10
- name: string;
11
- required?: boolean;
12
- disabled?: boolean;
13
- description?: string;
14
- createdAt?: Date;
15
- updatedAt?: Date;
16
- deletedAt?: Date;
17
- defaultValue?: any;
18
- blockEditingFromUI?: boolean;
19
- displayName?: string;
20
- fieldType: string;
21
- validation?: any;
22
- entityId: string;
23
- entityType: string;
24
- modelType: string;
25
- };
26
- export declare const coolFieldDefinition3: {
27
- name: string;
28
- required?: boolean;
29
- disabled?: boolean;
30
- description?: string;
31
- createdAt?: Date;
32
- updatedAt?: Date;
33
- deletedAt?: Date;
34
- defaultValue?: any;
35
- blockEditingFromUI?: boolean;
36
- displayName?: string;
37
- fieldType: string;
38
- validation?: any;
39
- entityId: string;
40
- entityType: string;
41
- modelType: string;
42
- };
43
- export declare const booleanField: (modelType: string) => CreateCustomFieldDefinition;
44
- export declare const selectField: (modelType: string, options: any) => CreateCustomFieldDefinition;
45
- export declare const statusField: (modelType: string, options: any) => CreateCustomFieldDefinition;
46
- export declare const fileField: (modelType: string) => CreateCustomFieldDefinition;
47
- export declare const createDefinition: (defaults: Partial<CustomFieldDefinitionDTO>) => CreateCustomFieldDefinition;
48
- export declare const createDefinitions: (defaults: Partial<CustomFieldDefinitionDTO>, length?: number) => CreateCustomFieldDefinition[];
@@ -1,78 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createDefinitions = exports.createDefinition = exports.fileField = exports.statusField = exports.selectField = exports.booleanField = exports.coolFieldDefinition3 = exports.coolFieldDefinition2 = exports.coolFieldDefinition = exports.contextAwareFieldDefinition = void 0;
4
- const node_crypto_1 = require("node:crypto");
5
- exports.contextAwareFieldDefinition = {
6
- name: 'cool field',
7
- modelType: 'ContextAwareTestModel',
8
- fieldType: 'number',
9
- entityType: 'fleetId',
10
- };
11
- exports.coolFieldDefinition = {
12
- name: 'cool field',
13
- modelType: 'TestModel',
14
- fieldType: 'number',
15
- entityId: (0, node_crypto_1.randomUUID)(),
16
- entityType: 'fleetId',
17
- };
18
- exports.coolFieldDefinition2 = {
19
- ...exports.coolFieldDefinition,
20
- name: 'cool field2',
21
- };
22
- exports.coolFieldDefinition3 = {
23
- ...exports.coolFieldDefinition,
24
- name: 'cool field3',
25
- };
26
- const booleanField = (modelType) => ({
27
- name: 'shapeless',
28
- modelType,
29
- fieldType: 'boolean',
30
- entityId: (0, node_crypto_1.randomUUID)(),
31
- entityType: 'fleetId',
32
- });
33
- exports.booleanField = booleanField;
34
- const selectField = (modelType, options) => ({
35
- name: 'choices',
36
- modelType,
37
- fieldType: 'select',
38
- validation: options,
39
- entityId: (0, node_crypto_1.randomUUID)(),
40
- entityType: 'fleetId',
41
- });
42
- exports.selectField = selectField;
43
- const statusField = (modelType, options) => ({
44
- name: 'lifecycle',
45
- modelType,
46
- fieldType: 'status',
47
- validation: options,
48
- entityId: (0, node_crypto_1.randomUUID)(),
49
- entityType: 'fleetId',
50
- });
51
- exports.statusField = statusField;
52
- const fileField = (modelType) => ({
53
- name: 'file',
54
- modelType,
55
- fieldType: 'file',
56
- entityId: (0, node_crypto_1.randomUUID)(),
57
- entityType: 'fleetId',
58
- });
59
- exports.fileField = fileField;
60
- // eslint-disable-next-line max-len
61
- const createDefinition = (defaults) => ({
62
- name: defaults?.name || `def_${(0, node_crypto_1.randomUUID)()}`,
63
- modelType: defaults?.modelType || 'TestModel',
64
- fieldType: defaults?.fieldType || 'boolean',
65
- entityId: defaults?.entityId || (0, node_crypto_1.randomUUID)(),
66
- entityType: defaults?.entityType || 'fleetId',
67
- ...(defaults?.validation && { validation: defaults.validation }),
68
- ...(defaults?.defaultValue && { defaultValue: defaults.defaultValue }),
69
- });
70
- exports.createDefinition = createDefinition;
71
- const createDefinitions = (defaults, length = 1) => (Array(length).fill({}).map((_) => ({
72
- name: defaults?.name || `def_${(0, node_crypto_1.randomUUID)()}`,
73
- modelType: defaults?.modelType || 'TestModel',
74
- fieldType: defaults?.fieldType || 'boolean',
75
- entityId: defaults?.entityId || (0, node_crypto_1.randomUUID)(),
76
- entityType: defaults?.entityType || 'fleetId',
77
- })));
78
- exports.createDefinitions = createDefinitions;
@@ -1,4 +0,0 @@
1
- export declare const mockEvent: (events: any, eventName: any, numberOfEvents: any) => any[];
2
- export declare const mockDimCustomFieldDefinitionEvent: (events: any, numberOfEvents: any) => any[];
3
- export declare const mockDimCustomFieldValueEvent: (events: any, numberOfEvents: any) => any[];
4
- export declare const mockDimCustomFieldEntriesEvent: (events: any, numberOfEvents: any) => any[];
@@ -1,21 +0,0 @@
1
- "use strict";
2
- /* eslint-disable no-param-reassign */
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.mockDimCustomFieldEntriesEvent = exports.mockDimCustomFieldValueEvent = exports.mockDimCustomFieldDefinitionEvent = exports.mockEvent = void 0;
5
- const mockEvent = (events, eventName, numberOfEvents) => {
6
- events.sendObject = jest.fn().mockResolvedValue(true);
7
- return [
8
- events.sendObject,
9
- () => {
10
- const matchingEvents = events.sendObject.mock.calls.filter((call) => call[0] === eventName);
11
- expect(matchingEvents.length).toEqual(numberOfEvents);
12
- },
13
- ];
14
- };
15
- exports.mockEvent = mockEvent;
16
- const mockDimCustomFieldDefinitionEvent = (events, numberOfEvents) => (0, exports.mockEvent)(events, 'dim_custom_field_definition', numberOfEvents);
17
- exports.mockDimCustomFieldDefinitionEvent = mockDimCustomFieldDefinitionEvent;
18
- const mockDimCustomFieldValueEvent = (events, numberOfEvents) => (0, exports.mockEvent)(events, 'dim_custom_field_value', numberOfEvents);
19
- exports.mockDimCustomFieldValueEvent = mockDimCustomFieldValueEvent;
20
- const mockDimCustomFieldEntriesEvent = (events, numberOfEvents) => (0, exports.mockEvent)(events, 'dim_custom_field_entries', numberOfEvents);
21
- exports.mockDimCustomFieldEntriesEvent = mockDimCustomFieldEntriesEvent;
@@ -1,12 +0,0 @@
1
- import { TestModel } from '../../models';
2
- export declare const createTestModel: (payload?: {}) => Promise<TestModel>;
3
- export declare const createTestModels: (fleetId: any, total: number) => Promise<TestModel[]>;
4
- export declare const upsertTestModel: (payload: any) => Promise<[TestModel, boolean]>;
5
- export declare const destroyTestModels: () => Promise<number>;
6
- export declare const getTestModel: (id: string, options?: {}) => Promise<TestModel | null>;
7
- export declare const getSomeTestModels: (options?: {
8
- limit: number;
9
- }) => Promise<TestModel[]>;
10
- export declare const updateTestModel: (payload: any, query: any) => Promise<[affectedCount: number, affectedRows: TestModel[]]>;
11
- export declare const createTestModelWithAssociation: () => Promise<TestModel>;
12
- export declare const getTestModelWithAssociation: (limit?: number) => Promise<TestModel[]>;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getTestModelWithAssociation = exports.createTestModelWithAssociation = exports.updateTestModel = exports.getSomeTestModels = exports.getTestModel = exports.destroyTestModels = exports.upsertTestModel = exports.createTestModels = exports.createTestModel = void 0;
4
- const models_1 = require("../../models");
5
- const createTestModel = (payload = {}) => models_1.TestModel.create(payload);
6
- exports.createTestModel = createTestModel;
7
- const createTestModels = (fleetId, total) => {
8
- const models = [];
9
- for (let i = 0; i < total; i += 1) {
10
- models.push((0, exports.createTestModel)({ fleetId }));
11
- }
12
- return Promise.all(models);
13
- };
14
- exports.createTestModels = createTestModels;
15
- const upsertTestModel = (payload) => models_1.TestModel.upsert(payload);
16
- exports.upsertTestModel = upsertTestModel;
17
- const destroyTestModels = () => models_1.TestModel.destroy({ truncate: true });
18
- exports.destroyTestModels = destroyTestModels;
19
- const getTestModel = (id, options = {}) => models_1.TestModel.findByPk(id, options);
20
- exports.getTestModel = getTestModel;
21
- const getSomeTestModels = (options = { limit: 1 }) => models_1.TestModel.findAll(options);
22
- exports.getSomeTestModels = getSomeTestModels;
23
- const updateTestModel = (payload, query) => models_1.TestModel.update(payload, query);
24
- exports.updateTestModel = updateTestModel;
25
- // Associations
26
- const createTestModelWithAssociation = async () => {
27
- const model = await models_1.TestModel.create({});
28
- await models_1.AssociatedTestModel.create({ testModelId: model.id });
29
- return model;
30
- };
31
- exports.createTestModelWithAssociation = createTestModelWithAssociation;
32
- const getTestModelWithAssociation = (limit = 1) => models_1.TestModel.findAll({
33
- limit, include: [models_1.AssociatedTestModel],
34
- });
35
- exports.getTestModelWithAssociation = getTestModelWithAssociation;
package/src/api/index.ts DELETED
@@ -1,10 +0,0 @@
1
- // export the api object
2
- import { Router } from '@autofleet/node-common';
3
- import v1 from './v1';
4
- import logger from '../utils/logger';
5
-
6
- const router = Router({ logger });
7
-
8
- router.use('/v1', v1);
9
-
10
- export default router;
@@ -1,104 +0,0 @@
1
- import { ResourceNotFoundError } from '@autofleet/errors';
2
- import { Router } from '@autofleet/node-common';
3
- import handleError from '../errors';
4
- import * as DefinitionRepo from '../../../repository/definition';
5
- import type { CreateCustomFieldDefinition, UpdateCustomFieldDefinition } from '../../../types/definition';
6
- import { validateCustomFieldDefinitionCreation, validateCustomFieldDefinitionUpdate } from './validations';
7
- import logger from '../../../utils/logger';
8
- import type { CustomFieldDefinition } from '../../../models';
9
-
10
- const router = Router({ logger });
11
- const ENTITY = 'CustomFieldDefinition';
12
-
13
- const toPascalCase = (str: string): string => str.replace(/(^\w|-\w)/g, (subStr) => subStr.replace(/-/, '').toUpperCase());
14
-
15
- /**
16
- * Create
17
- */
18
- router.post<{ modelName: string; }>('/', async (req, res) => {
19
- const { modelName } = req.params;
20
- const modelType = toPascalCase(modelName);
21
- try {
22
- const validatedPayload: CreateCustomFieldDefinition = await validateCustomFieldDefinitionCreation(req.body);
23
-
24
- const customFieldDefinition = await DefinitionRepo.create({
25
- ...validatedPayload,
26
- modelType,
27
- });
28
- return res.status(201).json(customFieldDefinition);
29
- } catch (err) {
30
- logger.error('Failed to create custom field definition', err);
31
- return handleError(err, res, { logger, message: `Error in create ${ENTITY} request` });
32
- }
33
- });
34
-
35
- /**
36
- * Get by id
37
- */
38
- router.get<{ modelName: string; customFieldDefinitionId: string; }, CustomFieldDefinition>('/:customFieldDefinitionId', async (req, res) => {
39
- const { customFieldDefinitionId } = req.params;
40
- try {
41
- const customFieldDefinition = await DefinitionRepo.findById(customFieldDefinitionId);
42
-
43
- if (!customFieldDefinition) {
44
- throw new ResourceNotFoundError();
45
- }
46
-
47
- return res.json(customFieldDefinition);
48
- } catch (err) {
49
- logger.error('Failed to fetch custom field definition', err);
50
- return handleError(err, res, { logger, message: `Error in get ${ENTITY} request` });
51
- }
52
- });
53
-
54
- /**
55
- * Get all
56
- */
57
- router.get<{ modelName: string; }, CustomFieldDefinition[], never, { entityIds?: string[]; }>('/', async (req, res) => {
58
- const { params: { modelName }, query: { entityIds } } = req;
59
-
60
- const modelType = toPascalCase(modelName);
61
- try {
62
- const where = {
63
- modelType,
64
- ...(entityIds?.length > 0 && { entityId: entityIds }),
65
- };
66
- const customFieldDefinitions = await DefinitionRepo.findAll(where, { withDisabled: true });
67
- return res.json(customFieldDefinitions);
68
- } catch (err) {
69
- logger.error('Failed to fetch custom field definitions', err);
70
- return handleError(err, res, { logger, message: `Error in get all ${ENTITY} request` });
71
- }
72
- });
73
-
74
- /**
75
- * Update
76
- */
77
- router.patch<{ modelName: string; customFieldDefinitionId: string; }, CustomFieldDefinition>('/:customFieldDefinitionId', async (req, res) => {
78
- const { customFieldDefinitionId, modelName } = req.params;
79
- const modelType = toPascalCase(modelName);
80
- try {
81
- const validatedPayload: UpdateCustomFieldDefinition = await validateCustomFieldDefinitionUpdate(req.body);
82
-
83
- const customFieldDefinition = await DefinitionRepo.findByWhere({
84
- id: customFieldDefinitionId,
85
- modelType,
86
- });
87
-
88
- if (!customFieldDefinition) {
89
- throw new ResourceNotFoundError();
90
- }
91
-
92
- const updatedCustomFieldDefinition = await DefinitionRepo.update(
93
- customFieldDefinitionId,
94
- { ...validatedPayload, modelType },
95
- );
96
-
97
- return res.status(200).json(updatedCustomFieldDefinition);
98
- } catch (err) {
99
- logger.error('Failed to patch custom field definition', err);
100
- return handleError(err, res, { logger, message: `Error in update ${ENTITY} request` });
101
- }
102
- });
103
-
104
- export default router;
@@ -1,75 +0,0 @@
1
- /* eslint-disable newline-per-chained-call */
2
- import Joi from 'joi';
3
- import { CustomFieldDefinitionType } from '../../../utils/constants';
4
-
5
- const FileValidationSchema = Joi.object({
6
- name: Joi.string().required(),
7
- type: Joi.string(),
8
- size: Joi.string(),
9
- addedBy: Joi.string().uuid(),
10
- });
11
- const statusValidationObject = Joi.object({
12
- value: Joi.string().required(),
13
- color: Joi.string().required(),
14
- });
15
- /**
16
- * Schema for the validation of custom field definition
17
- * The only custom validation is for
18
- * {@link CustomFieldDefinitionType.SELECT SELECT}
19
- * and
20
- * {@link CustomFieldDefinitionType.STATUS STATUS}
21
- * field types.
22
- * The rest of the field types are validated by Joi
23
- */
24
- const ValidationSchema = Joi.when('fieldType', {
25
- is: CustomFieldDefinitionType.SELECT,
26
- then: Joi.array().required().items(Joi.string()).min(1).unique(),
27
- otherwise: Joi.when('fieldType', {
28
- is: CustomFieldDefinitionType.STATUS,
29
- then: Joi.array().required().items(statusValidationObject).min(1).unique('value'),
30
- otherwise: Joi.forbidden(),
31
- }),
32
- });
33
-
34
- const DefaultValueSchema = Joi.when('fieldType', {
35
- switch: [
36
- { is: CustomFieldDefinitionType.BOOLEAN, then: Joi.boolean().allow(null) },
37
- { is: CustomFieldDefinitionType.DATE, then: Joi.date().allow(null) },
38
- { is: CustomFieldDefinitionType.DATETIME, then: Joi.date().allow(null) },
39
- { is: CustomFieldDefinitionType.FILE, then: Joi.array().items(FileValidationSchema).allow(null) },
40
- { is: CustomFieldDefinitionType.IMAGE, then: Joi.array().items(Joi.string().uri()).allow(null) },
41
- { is: CustomFieldDefinitionType.NUMBER, then: Joi.number().allow(null) },
42
- { is: CustomFieldDefinitionType.SELECT, then: Joi.string().allow(null) },
43
- { is: CustomFieldDefinitionType.STATUS, then: Joi.string().allow(null) },
44
- { is: CustomFieldDefinitionType.TEXT, then: Joi.string().allow(null) },
45
- ],
46
- });
47
-
48
- const CustomFieldDefinitionCreationSchema = Joi.object({
49
- name: Joi.string().required(),
50
- displayName: Joi.string().required(),
51
- validation: ValidationSchema,
52
- defaultValue: DefaultValueSchema,
53
- fieldType: Joi.string().valid(...Object.values(CustomFieldDefinitionType)).required(),
54
- entityId: Joi.string().guid().required(),
55
- entityType: Joi.string().required(),
56
- description: Joi.string(),
57
- required: Joi.boolean(),
58
- disabled: Joi.boolean(),
59
- blockEditingFromUI: Joi.boolean(),
60
- }).oxor('required', 'blockEditingFromUI', { isPresent: (value) => value === true });
61
-
62
- const CustomFieldDefinitionUpdateSchema = Joi.object({
63
- displayName: Joi.string(),
64
- validation: ValidationSchema,
65
- defaultValue: DefaultValueSchema,
66
- fieldType: Joi.string().valid(...Object.values(CustomFieldDefinitionType)),
67
- description: Joi.string().allow(null),
68
- required: Joi.boolean(),
69
- disabled: Joi.boolean(),
70
- blockEditingFromUI: Joi.boolean(),
71
- }).oxor('required', 'blockEditingFromUI', { isPresent: (value) => value === true });
72
-
73
- export const validateCustomFieldDefinitionCreation = (payload) => CustomFieldDefinitionCreationSchema.validateAsync(payload, { abortEarly: false });
74
-
75
- export const validateCustomFieldDefinitionUpdate = (payload) => CustomFieldDefinitionUpdateSchema.validateAsync(payload, { abortEarly: false });
@@ -1,13 +0,0 @@
1
- import type { Response } from 'express';
2
- import { handleError, BadRequest, type LogPayload } from '@autofleet/errors';
3
- import { ValidationError as InputValidationError } from 'joi';
4
- import { ValidationError as DatabaseValidationError } from 'sequelize';
5
-
6
- export default (err, res: Response, additionalData: LogPayload = undefined) => {
7
- let error = err;
8
- if ([InputValidationError, DatabaseValidationError].some((ErrClass) => err instanceof ErrClass)) {
9
- error = new BadRequest([err], null);
10
- }
11
-
12
- return handleError(error, res, additionalData);
13
- };
@@ -1,11 +0,0 @@
1
- import { Router } from '@autofleet/node-common';
2
- import logger from '../../utils/logger';
3
- import definitionRouter from './definition';
4
- import validatorRouter from './validator';
5
-
6
- const router = Router({ logger });
7
-
8
- router.use('/custom-field-definitions/:modelName', definitionRouter);
9
- router.use('/custom-validators/:modelName', validatorRouter);
10
-
11
- export default router;