@solidxai/core 0.1.6-beta.2 → 0.1.6-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/controllers/dashboard-layout.controller.d.ts +47 -0
- package/dist/controllers/dashboard-layout.controller.d.ts.map +1 -0
- package/dist/controllers/dashboard-layout.controller.js +204 -0
- package/dist/controllers/dashboard-layout.controller.js.map +1 -0
- package/dist/controllers/scheduled-job.controller.d.ts +1 -0
- package/dist/controllers/scheduled-job.controller.d.ts.map +1 -1
- package/dist/controllers/scheduled-job.controller.js +12 -0
- package/dist/controllers/scheduled-job.controller.js.map +1 -1
- package/dist/dtos/create-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/create-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/create-dashboard-layout.dto.js +53 -0
- package/dist/dtos/create-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/create-dashboard-variable.dto.js +7 -1
- package/dist/dtos/create-dashboard-variable.dto.js.map +1 -1
- package/dist/dtos/update-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/update-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/update-dashboard-layout.dto.js +53 -0
- package/dist/dtos/update-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/update-dashboard-variable.dto.js +7 -1
- package/dist/dtos/update-dashboard-variable.dto.js.map +1 -1
- package/dist/entities/action-metadata.entity.d.ts.map +1 -1
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
- package/dist/entities/ai-interaction.entity.js +5 -4
- package/dist/entities/ai-interaction.entity.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts +1 -0
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +9 -4
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +4 -3
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/common.entity.js +1 -1
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/dashboard-layout.entity.d.ts +9 -0
- package/dist/entities/dashboard-layout.entity.d.ts.map +1 -0
- package/dist/entities/dashboard-layout.entity.js +41 -0
- package/dist/entities/dashboard-layout.entity.js.map +1 -0
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +5 -4
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
- package/dist/entities/dashboard-question.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question.entity.js +5 -4
- package/dist/entities/dashboard-question.entity.js.map +1 -1
- package/dist/entities/dashboard-variable.entity.d.ts +1 -0
- package/dist/entities/dashboard-variable.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-variable.entity.js +10 -4
- package/dist/entities/dashboard-variable.entity.js.map +1 -1
- package/dist/entities/dashboard.entity.d.ts +2 -0
- package/dist/entities/dashboard.entity.d.ts.map +1 -1
- package/dist/entities/dashboard.entity.js +9 -3
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/entities/email-attachment.entity.d.ts.map +1 -1
- package/dist/entities/email-attachment.entity.js +2 -1
- package/dist/entities/email-attachment.entity.js.map +1 -1
- package/dist/entities/email-template.entity.js +1 -1
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/export-transaction.entity.d.ts.map +1 -1
- package/dist/entities/export-transaction.entity.js +2 -1
- package/dist/entities/export-transaction.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -2
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.js +3 -2
- package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
- package/dist/entities/import-transaction.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction.entity.js +2 -1
- package/dist/entities/import-transaction.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +1 -1
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/mq-message.entity.d.ts.map +1 -1
- package/dist/entities/mq-message.entity.js +5 -3
- package/dist/entities/mq-message.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -2
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +2 -1
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.js +1 -1
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/user-view-metadata.entity.js +2 -1
- package/dist/entities/user-view-metadata.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +2 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts +14 -0
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -0
- package/dist/helpers/bootstrap.helper.js +132 -0
- package/dist/helpers/bootstrap.helper.js.map +1 -0
- package/dist/helpers/cache.helper.d.ts +2 -0
- package/dist/helpers/cache.helper.d.ts.map +1 -0
- package/dist/helpers/cache.helper.js +8 -0
- package/dist/helpers/cache.helper.js.map +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +8 -9
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +8 -5
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
- package/dist/helpers/typeorm-db-helper.js +21 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +5 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts +1 -0
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.js +1 -0
- package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
- package/dist/repository/dashboard-layout.repository.d.ts +12 -0
- package/dist/repository/dashboard-layout.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-layout.repository.js +34 -0
- package/dist/repository/dashboard-layout.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.js +4 -4
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +445 -35
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +44 -21
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +0 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +22 -19
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +7 -3
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +61 -22
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
- package/dist/services/crud.service.js +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/dashboard-layout.service.d.ts +20 -0
- package/dist/services/dashboard-layout.service.d.ts.map +1 -0
- package/dist/services/dashboard-layout.service.js +120 -0
- package/dist/services/dashboard-layout.service.js.map +1 -0
- package/dist/services/dashboard-question.service.d.ts +4 -0
- package/dist/services/dashboard-question.service.d.ts.map +1 -1
- package/dist/services/dashboard-question.service.js +22 -8
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/dashboard.service.d.ts +2 -0
- package/dist/services/dashboard.service.d.ts.map +1 -1
- package/dist/services/dashboard.service.js +4 -0
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +6 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +151 -8
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +5 -1
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +66 -20
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts +2 -4
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/chartjs-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/interfaces.d.ts +1 -0
- package/dist/services/question-data-providers/interfaces.d.ts.map +1 -0
- package/dist/services/question-data-providers/interfaces.js +1 -0
- package/dist/services/question-data-providers/interfaces.js.map +1 -0
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts +2 -5
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/prime-react-datatable-sql-data-provider.service.js.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts +2 -5
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.d.ts.map +1 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js +2 -1
- package/dist/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts +4 -2
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +15 -2
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.d.ts.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +4 -6
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +8 -3
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +78 -6
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +6 -1
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +26 -2
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts +2 -0
- package/dist/services/scheduled-jobs/scheduler.interface.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.interface.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +6 -2
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +75 -17
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js +4 -1
- package/dist/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +9 -0
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- package/dist/services/solid-ts-morph.service.js +76 -0
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +8 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +3 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +4 -4
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.js +25 -28
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/package.json +3 -1
- package/sql/default/mariadb/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +56 -0
- package/sql/default/mysql/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mysql/proc_CleanupModuleMetadata.sql +56 -0
- package/src/controllers/dashboard-layout.controller.ts +106 -0
- package/src/controllers/scheduled-job.controller.ts +6 -0
- package/src/dtos/create-dashboard-layout.dto.ts +31 -0
- package/src/dtos/create-dashboard-variable.dto.ts +4 -0
- package/src/dtos/update-dashboard-layout.dto.ts +30 -0
- package/src/dtos/update-dashboard-variable.dto.ts +5 -1
- package/src/entities/action-metadata.entity.ts +3 -2
- package/src/entities/ai-interaction.entity.ts +5 -4
- package/src/entities/chatter-message-details.entity.ts +7 -3
- package/src/entities/chatter-message.entity.ts +4 -3
- package/src/entities/common.entity.ts +2 -2
- package/src/entities/dashboard-layout.entity.ts +18 -0
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +5 -4
- package/src/entities/dashboard-question.entity.ts +5 -4
- package/src/entities/dashboard-variable.entity.ts +9 -4
- package/src/entities/dashboard.entity.ts +7 -2
- package/src/entities/email-attachment.entity.ts +2 -1
- package/src/entities/email-template.entity.ts +1 -1
- package/src/entities/export-transaction.entity.ts +2 -1
- package/src/entities/field-metadata.entity.ts +2 -2
- package/src/entities/import-transaction-error-log.entity.ts +3 -2
- package/src/entities/import-transaction.entity.ts +2 -1
- package/src/entities/legacy-common.entity.ts +3 -4
- package/src/entities/mq-message.entity.ts +5 -3
- package/src/entities/saved-filters.entity.ts +3 -2
- package/src/entities/security-rule.entity.ts +2 -1
- package/src/entities/sms-template.entity.ts +1 -1
- package/src/entities/user-view-metadata.entity.ts +2 -1
- package/src/entities/user.entity.ts +37 -2
- package/src/entities/view-metadata.entity.ts +3 -0
- package/src/helpers/bootstrap.helper.ts +222 -0
- package/src/helpers/cache.helper.ts +5 -0
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +9 -9
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +9 -6
- package/src/helpers/solid-registry.ts +1 -5
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +3 -0
- package/src/interfaces.ts +9 -1
- package/src/jobs/computed-field-evaluation-queue-options.ts +1 -0
- package/src/repository/dashboard-layout.repository.ts +17 -0
- package/src/seeders/module-metadata-seeder.service.ts +5 -5
- package/src/seeders/seed-data/solid-core-metadata.json +446 -36
- package/src/services/authentication.service.ts +46 -24
- package/src/services/chatter-message.service.ts +21 -21
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +79 -40
- package/src/services/crud.service.ts +1 -1
- package/src/services/dashboard-layout.service.ts +111 -0
- package/src/services/dashboard-question.service.ts +23 -4
- package/src/services/dashboard.service.ts +7 -0
- package/src/services/model-metadata.service.ts +173 -50
- package/src/services/permission-metadata.service.ts +73 -20
- package/src/services/question-data-providers/chartjs-sql-data-provider.service.ts +3 -7
- package/src/services/question-data-providers/interfaces.ts +0 -0
- package/src/services/question-data-providers/prime-react-datatable-sql-data-provider.service.ts +4 -8
- package/src/services/question-data-providers/prime-react-meter-group-sql-data-provider.service.ts +4 -8
- package/src/services/queues/database-subscriber.service.ts +19 -2
- package/src/services/queues/publisher-factory.service.ts +8 -6
- package/src/services/queues/rabbitmq-subscriber.service.ts +123 -6
- package/src/services/scheduled-job.service.ts +31 -2
- package/src/services/scheduled-jobs/scheduler.interface.ts +4 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +82 -20
- package/src/services/selection-providers/list-of-dashboard-question-providers-selection-provider.service.ts +4 -1
- package/src/services/solid-ts-morph.service.ts +98 -0
- package/src/solid-core.module.ts +13 -0
- package/src/subscribers/computed-entity-field.subscriber.ts +3 -3
- package/src/transformers/typeorm/local-date-time-transformer.ts +41 -33
- package/.claude/settings.local.json +0 -15
- package/src/services/1.js +0 -6
|
@@ -12,7 +12,7 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.DashboardQuestionService = void 0;
|
|
15
|
+
exports.DashboardQuestionService = exports.INBUILT_SQL_DATA_PROVIDERS = exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = exports.CHARTJS_SQL_DATA_PROVIDER_NAME = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const core_1 = require("@nestjs/core");
|
|
18
18
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
@@ -26,9 +26,10 @@ var SOURCE_TYPE;
|
|
|
26
26
|
SOURCE_TYPE["SQL"] = "sql";
|
|
27
27
|
SOURCE_TYPE["PROVIDER"] = "provider";
|
|
28
28
|
})(SOURCE_TYPE || (SOURCE_TYPE = {}));
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
exports.CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';
|
|
30
|
+
exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';
|
|
31
|
+
exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';
|
|
32
|
+
exports.INBUILT_SQL_DATA_PROVIDERS = [exports.CHARTJS_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];
|
|
32
33
|
let DashboardQuestionService = class DashboardQuestionService extends crud_service_1.CRUDService {
|
|
33
34
|
constructor(entityManager, repo, moduleRef, solidRegistry) {
|
|
34
35
|
super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);
|
|
@@ -46,19 +47,32 @@ let DashboardQuestionService = class DashboardQuestionService extends crud_servi
|
|
|
46
47
|
const dashboardVariables = question.dashboard?.dashboardVariables || [];
|
|
47
48
|
const expressions = this.getExpressions(isPreview, dashboardVariables, inputExpressions);
|
|
48
49
|
let dataProvider = null;
|
|
50
|
+
let context = {};
|
|
49
51
|
if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {
|
|
50
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);
|
|
52
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.CHARTJS_SQL_DATA_PROVIDER_NAME);
|
|
53
|
+
context = {
|
|
54
|
+
expressions,
|
|
55
|
+
};
|
|
51
56
|
}
|
|
52
57
|
if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {
|
|
53
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
|
|
58
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);
|
|
59
|
+
context = {
|
|
60
|
+
expressions,
|
|
61
|
+
};
|
|
54
62
|
}
|
|
55
63
|
if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {
|
|
56
|
-
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
|
|
64
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(exports.PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);
|
|
65
|
+
context = {
|
|
66
|
+
expressions,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (question.sourceType === SOURCE_TYPE.PROVIDER) {
|
|
70
|
+
dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);
|
|
57
71
|
}
|
|
58
72
|
if (!dataProvider) {
|
|
59
73
|
throw new common_1.NotImplementedException(`Invalid data source type ${question.sourceType}`);
|
|
60
74
|
}
|
|
61
|
-
return await dataProvider.getData(question,
|
|
75
|
+
return await dataProvider.getData(question, context);
|
|
62
76
|
}
|
|
63
77
|
getExpressions(isPreview, dashboardVariables, inputExpressions) {
|
|
64
78
|
const expressions = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard-question.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { BadRequestException, Injectable, Logger, NotImplementedException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardQuestion } from '../entities/dashboard-question.entity';\nimport { SqlExpression, SqlExpressionOperator } from './question-data-providers/chartjs-sql-data-provider.service';\nimport { DashboardQuestionRepository } from 'src/repository/dashboard-question.repository';\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nconst CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';\nconst PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';\nconst PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';\n\n@Injectable()\nexport class DashboardQuestionService extends CRUDService<DashboardQuestion> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestion, 'default')\n // readonly repo: Repository<DashboardQuestion>,\n readonly repo: DashboardQuestionRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for data providers\n ) {\n super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);\n }\n\n // Get the data for a specific question \n async getData(id: number, inputExpressions: SqlExpression[] = [], isPreview = false): Promise<any> {\n // Load the question\n const question = await this.loadQuestion(id);\n if (!question) {\n throw new BadRequestException(`Question with id ${id} not found`);\n }\n\n // Get the dashbbard variables from the question\n const dashboardVariables = question.dashboard?.dashboardVariables || [];\n const expressions: SqlExpression[] = this.getExpressions(isPreview, dashboardVariables, inputExpressions);\n\n // Try to resolve the dataProvider based on a combination of sourceType and visualisedAs\n let dataProvider = null;\n\n if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);\n }\n\n if (!dataProvider) {\n throw new NotImplementedException(`Invalid data source type ${question.sourceType}`);\n }\n\n return await dataProvider.getData(question, expressions);\n\n }\n\n private getExpressions(isPreview: boolean, dashboardVariables: DashboardVariable[], inputExpressions: SqlExpression[]) {\n const expressions: SqlExpression[] = [];\n\n if (isPreview) {\n // Convert the dashboard variables into objects of interface type SqlExpression using the default value, default operator and the variable name\n const expr: SqlExpression[] = dashboardVariables.map(variable => {\n return {\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator, // Assuming defaultOperator is a valid SqlExpressionOperator\n value: JSON.parse(variable.defaultValue || '[]'), // Assuming defaultValue is a string or can be converted to a string array\n };\n });\n expressions.push(...expr);\n }\n else {\n // Loop through the dashboard variables and see if there is a matching input expression\n // If there is, use that expression instead of the default value\n for (const variable of dashboardVariables) {\n const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);\n if (matchingInputExpression) {\n expressions.push(matchingInputExpression);\n }\n else {\n expressions.push({\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator,\n value: JSON.parse(variable.defaultValue || '[]'),\n });\n }\n }\n expressions.push(...expressions);\n }\n\n // Remove duplicate expressions based on variableName in the expressions array\n const deduplicatedExpressions: SqlExpression[] = [];\n const variableNames = new Set<string>();\n for (const expr of expressions) {\n if (!variableNames.has(expr.variableName)) {\n deduplicatedExpressions.push(expr);\n variableNames.add(expr.variableName);\n }\n }\n\n return deduplicatedExpressions;\n }\n\n private async loadQuestion(id: number) {\n const repo = this.entityManager.getRepository(DashboardQuestion);\n\n // Load the dashboard record using the field\n const question = await repo.findOne({\n where: {\n id,\n },\n relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],\n });\n return question;\n }\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"dashboard-question.service.js","sourceRoot":"","sources":["../../src/services/dashboard-question.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkG;AAClG,uCAAyC;AACzC,6CAAsD;AACtD,qCAAwC;AAExC,iDAAwD;AAIxD,8DAA2D;AAC3D,qFAA0E;AAE1E,+FAA2F;AAG3F,IAAK,WAGJ;AAHD,WAAK,WAAW;IACd,0BAAW,CAAA;IACX,oCAAqB,CAAA;AACvB,CAAC,EAHI,WAAW,KAAX,WAAW,QAGf;AAEY,QAAA,8BAA8B,GAAG,wBAAwB,CAAC;AAC1D,QAAA,8CAA8C,GAAG,qCAAqC,CAAC;AACvF,QAAA,4CAA4C,GAAG,oCAAoC,CAAC;AAEpF,QAAA,0BAA0B,GAAG,CAAC,sCAA8B,EAAE,sDAA8C,EAAE,oDAA4C,CAAC,CAAC;AAGlK,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,0BAA8B;IAE1E,YAEE,aAAqC,EAG5B,IAAiC,EACjC,SAAoB,EACpB,aAA4B;QAErC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,mBAAmB,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC;QAPhE,kBAAa,GAAb,aAAa,CAAe;QAG5B,SAAI,GAAJ,IAAI,CAA6B;QACjC,cAAS,GAAT,SAAS,CAAW;QACpB,kBAAa,GAAb,aAAa,CAAe;QARtB,WAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAW5D,CAAC;IAGD,KAAK,CAAC,OAAO,CAAC,EAAU,EAAE,mBAAoC,EAAE,EAAE,SAAS,GAAG,KAAK;QAEjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,4BAAmB,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QACpE,CAAC;QAGD,MAAM,kBAAkB,GAAG,QAAQ,CAAC,SAAS,EAAE,kBAAkB,IAAI,EAAE,CAAC;QACxE,MAAM,WAAW,GAAoB,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;QAG1G,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,IAAI,OAAO,GAAG,EAAE,CAAC;QAGjB,IAAI,QAAQ,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/G,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,sCAA8B,CAAC,CAAC;YAC3G,OAAO,GAAG;gBACR,WAAW;aACsB,CAAC;QACtC,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACrG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,sDAA8C,CAAC,CAAC;YACrH,OAAO,GAAG;gBACd,WAAW;aACsB,CAAC;QACtC,CAAC;QACD,IAAI,QAAQ,CAAC,UAAU,KAAK,WAAW,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACnG,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,oDAA4C,CAAC,CAAC;YACzH,OAAO,GAAG;gBACR,WAAW;aACsB,CAAC;QACtC,CAAC;QAGD,IAAI,QAAQ,CAAC,UAAU,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;YACjD,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,wCAAwC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,MAAM,IAAI,gCAAuB,CAAC,4BAA4B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACvF,CAAC;QAED,OAAO,MAAM,YAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEvD,CAAC;IAEO,cAAc,CAAC,SAAkB,EAAE,kBAAuC,EAAE,gBAAiC;QACnH,MAAM,WAAW,GAAoB,EAAE,CAAC;QAExC,IAAI,SAAS,EAAE,CAAC;YAEd,MAAM,IAAI,GAAoB,kBAAkB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAC9D,OAAO;oBACL,YAAY,EAAE,QAAQ,CAAC,YAAY;oBACnC,QAAQ,EAAE,QAAQ,CAAC,eAAwC;oBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC;iBACjD,CAAC;YACJ,CAAC,CAAC,CAAC;YACH,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAC5B,CAAC;aACI,CAAC;YAGJ,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE,CAAC;gBAC1C,MAAM,uBAAuB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAC3G,IAAI,uBAAuB,EAAE,CAAC;oBAC5B,WAAW,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBAC5C,CAAC;qBACI,CAAC;oBACJ,WAAW,CAAC,IAAI,CAAC;wBACf,YAAY,EAAE,QAAQ,CAAC,YAAY;wBACnC,QAAQ,EAAE,QAAQ,CAAC,eAAwC;wBAC3D,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI,CAAC;qBACjD,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;QACnC,CAAC;QAGD,MAAM,uBAAuB,GAAoB,EAAE,CAAC;QACpD,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QACxC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC1C,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAEO,KAAK,CAAC,YAAY,CAAC,EAAU;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,6CAAiB,CAAC,CAAC;QAGjE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;YAClC,KAAK,EAAE;gBACL,EAAE;aACH;YACD,SAAS,EAAE,CAAC,2BAA2B,EAAE,WAAW,EAAE,8BAA8B,CAAC;SACtF,CAAC,CAAC;QACH,OAAO,QAAQ,CAAC;IAClB,CAAC;CAEF,CAAA;AA1HY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAIR,WAAA,IAAA,6BAAmB,GAAE,CAAA;qCACE,uBAAa;QAGtB,2DAA2B;QACtB,gBAAS;QACL,8BAAa;GAT5B,wBAAwB,CA0HpC","sourcesContent":["import { BadRequestException, Injectable, Logger, NotImplementedException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardQuestion } from '../entities/dashboard-question.entity';\nimport { SqlExpression, SqlExpressionOperator } from './question-data-providers/chartjs-sql-data-provider.service';\nimport { DashboardQuestionRepository } from 'src/repository/dashboard-question.repository';\nimport { QuestionSqlDataProviderContext } from 'src';\n\nenum SOURCE_TYPE {\n SQL = 'sql',\n PROVIDER = 'provider',\n}\n\nexport const CHARTJS_SQL_DATA_PROVIDER_NAME = 'ChartJsSqlDataProvider';\nexport const PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME = 'PrimeReactMeterGroupSqlDataProvider';\nexport const PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME = 'PrimeReactDatatableSqlDataProvider';\n\nexport const INBUILT_SQL_DATA_PROVIDERS = [CHARTJS_SQL_DATA_PROVIDER_NAME, PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME, PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME];\n\n@Injectable()\nexport class DashboardQuestionService extends CRUDService<DashboardQuestion> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n // @InjectRepository(DashboardQuestion, 'default')\n // readonly repo: Repository<DashboardQuestion>,\n readonly repo: DashboardQuestionRepository,\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for data providers\n ) {\n super(entityManager, repo, 'dashboardQuestion', 'solid-core', moduleRef);\n }\n\n // Get the data for a specific question \n async getData(id: number, inputExpressions: SqlExpression[] = [], isPreview = false): Promise<any> {\n // Load the question\n const question = await this.loadQuestion(id);\n if (!question) {\n throw new BadRequestException(`Question with id ${id} not found`);\n }\n\n // Get the dashbbard variables from the question\n const dashboardVariables = question.dashboard?.dashboardVariables || [];\n const expressions: SqlExpression[] = this.getExpressions(isPreview, dashboardVariables, inputExpressions);\n\n // Try to resolve the dataProvider based on a combination of sourceType and visualisedAs\n let dataProvider = null;\n let context = {};\n\n // Decide which data provider to use based on the question visualisation type if sourceType is SQL. \n if (question.sourceType === SOURCE_TYPE.SQL && ['bar', 'pie', 'line', 'donut'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(CHARTJS_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-meter-group'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_METER_GROUP_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n if (question.sourceType === SOURCE_TYPE.SQL && ['prime-datatable'].includes(question.visualisedAs)) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(PRIME_REACT_DATATABLE_SQL_DATA_PROVIDER_NAME);\n context = {\n expressions,\n } as QuestionSqlDataProviderContext;\n }\n\n // If a custom provider is specified, use that one instead\n if (question.sourceType === SOURCE_TYPE.PROVIDER) {\n dataProvider = this.solidRegistry.getDashboardQuestionDataProviderInstance(question.providerName);\n }\n\n if (!dataProvider) {\n throw new NotImplementedException(`Invalid data source type ${question.sourceType}`);\n }\n\n return await dataProvider.getData(question, context);\n\n }\n\n private getExpressions(isPreview: boolean, dashboardVariables: DashboardVariable[], inputExpressions: SqlExpression[]) {\n const expressions: SqlExpression[] = [];\n\n if (isPreview) {\n // Convert the dashboard variables into objects of interface type SqlExpression using the default value, default operator and the variable name\n const expr: SqlExpression[] = dashboardVariables.map(variable => {\n return {\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator, // Assuming defaultOperator is a valid SqlExpressionOperator\n value: JSON.parse(variable.defaultValue || '[]'), // Assuming defaultValue is a string or can be converted to a string array\n };\n });\n expressions.push(...expr);\n }\n else {\n // Loop through the dashboard variables and see if there is a matching input expression\n // If there is, use that expression instead of the default value\n for (const variable of dashboardVariables) {\n const matchingInputExpression = inputExpressions.find(expr => expr.variableName === variable.variableName);\n if (matchingInputExpression) {\n expressions.push(matchingInputExpression);\n }\n else {\n expressions.push({\n variableName: variable.variableName,\n operator: variable.defaultOperator as SqlExpressionOperator,\n value: JSON.parse(variable.defaultValue || '[]'),\n });\n }\n }\n expressions.push(...expressions);\n }\n\n // Remove duplicate expressions based on variableName in the expressions array\n const deduplicatedExpressions: SqlExpression[] = [];\n const variableNames = new Set<string>();\n for (const expr of expressions) {\n if (!variableNames.has(expr.variableName)) {\n deduplicatedExpressions.push(expr);\n variableNames.add(expr.variableName);\n }\n }\n\n return deduplicatedExpressions;\n }\n\n private async loadQuestion(id: number) {\n const repo = this.entityManager.getRepository(DashboardQuestion);\n\n // Load the dashboard record using the field\n const question = await repo.findOne({\n where: {\n id,\n },\n relations: ['questionSqlDatasetConfigs', 'dashboard', 'dashboard.dashboardVariables'],\n });\n return question;\n }\n\n}\n"]}
|
|
@@ -7,6 +7,7 @@ import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
|
7
7
|
import { DashboardMapper } from 'src/mappers/dashboard-mapper';
|
|
8
8
|
import { DashboardRepository } from 'src/repository/dashboard.repository';
|
|
9
9
|
import { Dashboard } from '../entities/dashboard.entity';
|
|
10
|
+
import { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';
|
|
10
11
|
export declare const SQL_DYNAMIC_PROVIDER_NAME = "DashboardVariableSQLDynamicProvider";
|
|
11
12
|
export declare class DashboardService extends CRUDService<Dashboard> {
|
|
12
13
|
readonly entityManager: EntityManager;
|
|
@@ -17,6 +18,7 @@ export declare class DashboardService extends CRUDService<Dashboard> {
|
|
|
17
18
|
readonly dashboardMapper: DashboardMapper;
|
|
18
19
|
private readonly logger;
|
|
19
20
|
constructor(entityManager: EntityManager, repo: DashboardRepository, moduleRef: ModuleRef, solidRegistry: SolidRegistry, moduleMetadataHelperService: ModuleMetadataHelperService, dashboardMapper: DashboardMapper);
|
|
21
|
+
create(createDto: CreateDashboardDto, files: Express.Multer.File[]): Promise<Dashboard>;
|
|
20
22
|
getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto): Promise<readonly import("..").ISelectionProviderValues[]>;
|
|
21
23
|
private getProviderNameAndContext;
|
|
22
24
|
private loadDashboardVariable;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EAAE,yCAAyC,EAAE,MAAM,yDAAyD,CAAC;AAEpH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"dashboard.service.d.ts","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAKxD,OAAO,EAAE,yCAAyC,EAAE,MAAM,yDAAyD,CAAC;AAEpH,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAGnE,eAAO,MAAM,yBAAyB,wCAAwC,CAAC;AAC/E,qBACa,gBAAiB,SAAQ,WAAW,CAAC,SAAS,CAAC;IAIxD,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,IAAI,EAAE,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,aAAa,EAAE,aAAa;IACrC,QAAQ,CAAC,2BAA2B,EAAE,2BAA2B;IACjE,QAAQ,CAAC,eAAe,EAAE,eAAe;IAR3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGjD,aAAa,EAAE,aAAa,EAC5B,IAAI,EAAE,mBAAmB,EACzB,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,2BAA2B,EAAE,2BAA2B,EACxD,eAAe,EAAE,eAAe;IAMrC,MAAM,CAAC,SAAS,EAAE,kBAAkB,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;IAKlE,yBAAyB,CAAC,KAAK,EAAE,yCAAyC;IAkBhF,OAAO,CAAC,yBAAyB;YAoBnB,qBAAqB;IAY7B,qBAAqB,CAAC,MAAM,EAAE,SAAS;YAuB/B,oBAAoB;YAWpB,aAAa;CAqB5B"}
|
|
@@ -70,6 +70,10 @@ let DashboardService = class DashboardService extends crud_service_1.CRUDService
|
|
|
70
70
|
this.dashboardMapper = dashboardMapper;
|
|
71
71
|
this.logger = new common_1.Logger(this.constructor.name);
|
|
72
72
|
}
|
|
73
|
+
async create(createDto, files) {
|
|
74
|
+
createDto.name = createDto.name.trim().replace(/\s+/g, '-').toLowerCase();
|
|
75
|
+
return super.create(createDto, files);
|
|
76
|
+
}
|
|
73
77
|
async getSelectionDynamicValues(query) {
|
|
74
78
|
const dashboardVariable = await this.loadDashboardVariable(query.variableId);
|
|
75
79
|
const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { SelectionDynamicSourceType } from 'src/dtos/create-dashboard-variable.dto';\nimport { DashboardVariableSelectionDynamicQueryDto } from 'src/dtos/dashboard-variable-selection-dynamic-query.dto';\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardMapper } from 'src/mappers/dashboard-mapper';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { Dashboard } from '../entities/dashboard.entity';\n\n\nexport const SQL_DYNAMIC_PROVIDER_NAME = 'DashboardVariableSQLDynamicProvider';\n@Injectable()\nexport class DashboardService extends CRUDService<Dashboard> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n readonly repo: DashboardRepository, // Assuming you have a DashboardRepository for custom queries\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for selection providers\n readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly dashboardMapper: DashboardMapper,\n ) {\n super(entityManager, repo, 'dashboard', 'solid-core', moduleRef);\n }\n\n async getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto) {\n // Get the dashboard variable repo\n const dashboardVariable = await this.loadDashboardVariable(query.variableId);\n\n // Get the providerName and context for the dashboard variable\n const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);\n\n // Get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getDashboardVariableSelectionProviderInstance(providerName);\n if (!selectionProviderInstance) {\n throw new NotFoundException(`Field incorrectly configured. No provider with name ${providerName} registered in backend.`);\n }\n\n // 4. Call the provider's getSelectionDynamicValues method\n return selectionProviderInstance.values(query.query, context);\n }\n\n\n private getProviderNameAndContext(dashboardVariable: DashboardVariable, query: DashboardVariableSelectionDynamicQueryDto): [string, any] {\n const sourceType = dashboardVariable.selectionDynamicSourceType;\n\n // Get the appropriate provide name based on the source type\n let providerName: string;\n const context = { limit: query.limit, offset: query.offset };\n switch (sourceType) {\n case SelectionDynamicSourceType.SQL:\n providerName = SQL_DYNAMIC_PROVIDER_NAME;\n context['sql'] = dashboardVariable.selectionDynamicSQL;\n break;\n case SelectionDynamicSourceType.PROVIDER:\n providerName = dashboardVariable.selectionDynamicProviderName;\n break;\n default:\n throw new Error(`Unsupported selection dynamic source type: ${sourceType}`);\n }\n return [providerName, context];\n }\n\n private async loadDashboardVariable(variableId: number) {\n const dashboardVariableRepo = this.entityManager.getRepository(DashboardVariable);\n\n // Load the dashboard record using the field\n const dashboardVariable = await dashboardVariableRepo.findOne({\n where: {\n id: variableId,\n },\n });\n return dashboardVariable;\n }\n\n async saveDashboardToConfig(entity: Dashboard) {\n if (!entity) {\n this.logger.debug('No entity found in the DashboardSubscriber saveDashboardToConfig method');\n return;\n }\n\n // Validate dashboard details\n const dashboard = entity as Dashboard;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for dashboard id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name);\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the dashboard to the config file\n await this.writeToConfig(metaData, dashboard, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, dashboard: Dashboard, filePath: string) {\n if (metaData.dashboards && Array.isArray(metaData.dashboards)) {\n const dashboardIndex = metaData.dashboards?.findIndex((dashboardFromFile: { name: string; }) => dashboardFromFile.name === dashboard.name);\n const dto = await this.dashboardMapper.toDto(dashboard);\n if (dashboardIndex !== -1) {\n metaData.dashboards[dashboardIndex] = dto;\n }\n else {\n metaData.dashboards.push(dto);\n }\n }\n else {\n const dashboards = [];\n const dto = await this.dashboardMapper.toDto(dashboard);\n dashboards.push(dto);\n metaData.dashboards = dashboards;\n }\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n}"]}
|
|
1
|
+
{"version":3,"file":"dashboard.service.js","sourceRoot":"","sources":["../../src/services/dashboard.service.ts"],"names":[],"mappings":"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","sourcesContent":["import { Injectable, Logger, NotFoundException } from '@nestjs/common';\nimport { ModuleRef } from \"@nestjs/core\";\nimport { InjectEntityManager } from '@nestjs/typeorm';\nimport { EntityManager } from 'typeorm';\n\nimport { CRUDService } from 'src/services/crud.service';\n\n\nimport * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await\nimport { SelectionDynamicSourceType } from 'src/dtos/create-dashboard-variable.dto';\nimport { DashboardVariableSelectionDynamicQueryDto } from 'src/dtos/dashboard-variable-selection-dynamic-query.dto';\nimport { DashboardVariable } from 'src/entities/dashboard-variable.entity';\nimport { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';\nimport { SolidRegistry } from 'src/helpers/solid-registry';\nimport { DashboardMapper } from 'src/mappers/dashboard-mapper';\nimport { DashboardRepository } from 'src/repository/dashboard.repository';\nimport { Dashboard } from '../entities/dashboard.entity';\nimport { CreateDashboardDto } from 'src/dtos/create-dashboard.dto';\n\n\nexport const SQL_DYNAMIC_PROVIDER_NAME = 'DashboardVariableSQLDynamicProvider';\n@Injectable()\nexport class DashboardService extends CRUDService<Dashboard> {\n private readonly logger = new Logger(this.constructor.name);\n constructor(\n @InjectEntityManager()\n readonly entityManager: EntityManager,\n readonly repo: DashboardRepository, // Assuming you have a DashboardRepository for custom queries\n readonly moduleRef: ModuleRef,\n readonly solidRegistry: SolidRegistry, // Assuming solidRegistry is injected for selection providers\n readonly moduleMetadataHelperService: ModuleMetadataHelperService,\n readonly dashboardMapper: DashboardMapper,\n ) {\n super(entityManager, repo, 'dashboard', 'solid-core', moduleRef);\n }\n\n\n async create(createDto: CreateDashboardDto, files: Express.Multer.File[]) {\n createDto.name = createDto.name.trim().replace(/\\s+/g, '-').toLowerCase();\n return super.create(createDto, files);\n }\n\n async getSelectionDynamicValues(query: DashboardVariableSelectionDynamicQueryDto) {\n // Get the dashboard variable repo\n const dashboardVariable = await this.loadDashboardVariable(query.variableId);\n\n // Get the providerName and context for the dashboard variable\n const [providerName, context] = this.getProviderNameAndContext(dashboardVariable, query);\n\n // Get hold of the provider instance from the SolidRegistry\n const selectionProviderInstance = this.solidRegistry.getDashboardVariableSelectionProviderInstance(providerName);\n if (!selectionProviderInstance) {\n throw new NotFoundException(`Field incorrectly configured. No provider with name ${providerName} registered in backend.`);\n }\n\n // 4. Call the provider's getSelectionDynamicValues method\n return selectionProviderInstance.values(query.query, context);\n }\n\n\n private getProviderNameAndContext(dashboardVariable: DashboardVariable, query: DashboardVariableSelectionDynamicQueryDto): [string, any] {\n const sourceType = dashboardVariable.selectionDynamicSourceType;\n\n // Get the appropriate provide name based on the source type\n let providerName: string;\n const context = { limit: query.limit, offset: query.offset };\n switch (sourceType) {\n case SelectionDynamicSourceType.SQL:\n providerName = SQL_DYNAMIC_PROVIDER_NAME;\n context['sql'] = dashboardVariable.selectionDynamicSQL;\n break;\n case SelectionDynamicSourceType.PROVIDER:\n providerName = dashboardVariable.selectionDynamicProviderName;\n break;\n default:\n throw new Error(`Unsupported selection dynamic source type: ${sourceType}`);\n }\n return [providerName, context];\n }\n\n private async loadDashboardVariable(variableId: number) {\n const dashboardVariableRepo = this.entityManager.getRepository(DashboardVariable);\n\n // Load the dashboard record using the field\n const dashboardVariable = await dashboardVariableRepo.findOne({\n where: {\n id: variableId,\n },\n });\n return dashboardVariable;\n }\n\n async saveDashboardToConfig(entity: Dashboard) {\n if (!entity) {\n this.logger.debug('No entity found in the DashboardSubscriber saveDashboardToConfig method');\n return;\n }\n\n // Validate dashboard details\n const dashboard = entity as Dashboard;\n const moduleMetadata = entity.module;\n if (!moduleMetadata) {\n throw new Error(`Module metadata not found for dashboard id ${entity.id}`);\n }\n\n // Get config file details\n const { filePath, metaData } = await this.getConfigFileDetails(moduleMetadata.name);\n if (!filePath || !metaData) {\n throw new Error(`Configuration details not found for module: ${moduleMetadata.name}`);\n }\n\n // Write the dashboard to the config file\n await this.writeToConfig(metaData, dashboard, filePath);\n }\n\n private async getConfigFileDetails(moduleName: string): Promise<{ filePath: string; metaData: any }> {\n const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);\n try {\n await fs.access(filePath);\n } catch (error) {\n throw new Error(`Configuration file not found for module: ${moduleName}`);\n }\n const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);\n return { filePath, metaData };\n }\n\n private async writeToConfig(metaData: any, dashboard: Dashboard, filePath: string) {\n if (metaData.dashboards && Array.isArray(metaData.dashboards)) {\n const dashboardIndex = metaData.dashboards?.findIndex((dashboardFromFile: { name: string; }) => dashboardFromFile.name === dashboard.name);\n const dto = await this.dashboardMapper.toDto(dashboard);\n if (dashboardIndex !== -1) {\n metaData.dashboards[dashboardIndex] = dto;\n }\n else {\n metaData.dashboards.push(dto);\n }\n }\n else {\n const dashboards = [];\n const dto = await this.dashboardMapper.toDto(dashboard);\n dashboards.push(dto);\n metaData.dashboards = dashboards;\n }\n // Write the updated object back to the file\n const updatedContent = JSON.stringify(metaData, null, 2);\n await fs.writeFile(filePath, updatedContent);\n }\n}"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Cache } from 'cache-manager';
|
|
1
2
|
import { DataSource, EntityManager, Repository } from 'typeorm';
|
|
2
3
|
import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
|
|
3
4
|
import { ModelMetadata } from '../entities/model-metadata.entity';
|
|
@@ -14,6 +15,7 @@ import { MediaStorageProviderMetadataService } from './media-storage-provider-me
|
|
|
14
15
|
import { RoleMetadataService } from './role-metadata.service';
|
|
15
16
|
import { NavigationDto } from 'src/dtos/navigation.dto';
|
|
16
17
|
import { SolidIntrospectService } from './solid-introspect.service';
|
|
18
|
+
import { SolidTsMorphService } from './solid-ts-morph.service';
|
|
17
19
|
export declare class ModelMetadataService {
|
|
18
20
|
private readonly modelMetadataRepo;
|
|
19
21
|
private readonly fieldMetadataRepo;
|
|
@@ -25,8 +27,10 @@ export declare class ModelMetadataService {
|
|
|
25
27
|
private readonly roleService;
|
|
26
28
|
private readonly moduleMetadataHelperService;
|
|
27
29
|
readonly introspectService: SolidIntrospectService;
|
|
30
|
+
private readonly solidTsMorphService;
|
|
31
|
+
private readonly cacheManager;
|
|
28
32
|
private logger;
|
|
29
|
-
constructor(modelMetadataRepo: ModelMetadataRepository, fieldMetadataRepo: FieldMetadataRepository, schematicService: SchematicService, dataSource: DataSource, crudHelperService: CrudHelperService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, fieldMetadataService: FieldMetadataService, roleService: RoleMetadataService, moduleMetadataHelperService: ModuleMetadataHelperService, introspectService: SolidIntrospectService);
|
|
33
|
+
constructor(modelMetadataRepo: ModelMetadataRepository, fieldMetadataRepo: FieldMetadataRepository, schematicService: SchematicService, dataSource: DataSource, crudHelperService: CrudHelperService, mediaStorageProviderMetadataService: MediaStorageProviderMetadataService, fieldMetadataService: FieldMetadataService, roleService: RoleMetadataService, moduleMetadataHelperService: ModuleMetadataHelperService, introspectService: SolidIntrospectService, solidTsMorphService: SolidTsMorphService, cacheManager: Cache);
|
|
30
34
|
find(basicFilterDto: BasicFilterDto): Promise<{
|
|
31
35
|
meta: {
|
|
32
36
|
totalRecords: number;
|
|
@@ -50,6 +54,7 @@ export declare class ModelMetadataService {
|
|
|
50
54
|
records: ModelMetadata[];
|
|
51
55
|
}>;
|
|
52
56
|
findOne(id: any, query?: any): Promise<ModelMetadata>;
|
|
57
|
+
private buildModelBySingularNameCacheKey;
|
|
53
58
|
findOneBySingularName(singularName: string, relations?: {}): Promise<ModelMetadata>;
|
|
54
59
|
findOneByUserKey(singularName: string, relations?: {}): Promise<ModelMetadata>;
|
|
55
60
|
create(createDto: CreateModelMetadataDto): Promise<ModelMetadata>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-metadata.service.d.ts","sourceRoot":"","sources":["../../src/services/model-metadata.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,8 +47,10 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
47
47
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
48
|
exports.ModelMetadataService = void 0;
|
|
49
49
|
const common_1 = require("@nestjs/common");
|
|
50
|
+
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
50
51
|
const typeorm_1 = require("@nestjs/typeorm");
|
|
51
52
|
const fs = __importStar(require("fs/promises"));
|
|
53
|
+
const path = __importStar(require("path"));
|
|
52
54
|
const typeorm_2 = require("typeorm");
|
|
53
55
|
const model_metadata_entity_1 = require("../entities/model-metadata.entity");
|
|
54
56
|
const module_metadata_entity_1 = require("../entities/module-metadata.entity");
|
|
@@ -56,6 +58,7 @@ const strings_1 = require("@angular-devkit/core/src/utils/strings");
|
|
|
56
58
|
const error_messages_1 = require("../constants/error-messages");
|
|
57
59
|
const disallow_in_production_decorator_1 = require("../decorators/disallow-in-production.decorator");
|
|
58
60
|
const create_field_metadata_dto_1 = require("../dtos/create-field-metadata.dto");
|
|
61
|
+
const cache_helper_1 = require("../helpers/cache.helper");
|
|
59
62
|
const module_metadata_helper_service_1 = require("../helpers/module-metadata-helper.service");
|
|
60
63
|
const field_metadata_repository_1 = require("../repository/field-metadata.repository");
|
|
61
64
|
const model_metadata_repository_1 = require("../repository/model-metadata.repository");
|
|
@@ -69,8 +72,9 @@ const field_metadata_service_1 = require("./field-metadata.service");
|
|
|
69
72
|
const media_storage_provider_metadata_service_1 = require("./media-storage-provider-metadata.service");
|
|
70
73
|
const role_metadata_service_1 = require("./role-metadata.service");
|
|
71
74
|
const solid_introspect_service_1 = require("./solid-introspect.service");
|
|
75
|
+
const solid_ts_morph_service_1 = require("./solid-ts-morph.service");
|
|
72
76
|
let ModelMetadataService = class ModelMetadataService {
|
|
73
|
-
constructor(modelMetadataRepo, fieldMetadataRepo, schematicService, dataSource, crudHelperService, mediaStorageProviderMetadataService, fieldMetadataService, roleService, moduleMetadataHelperService, introspectService) {
|
|
77
|
+
constructor(modelMetadataRepo, fieldMetadataRepo, schematicService, dataSource, crudHelperService, mediaStorageProviderMetadataService, fieldMetadataService, roleService, moduleMetadataHelperService, introspectService, solidTsMorphService, cacheManager) {
|
|
74
78
|
this.modelMetadataRepo = modelMetadataRepo;
|
|
75
79
|
this.fieldMetadataRepo = fieldMetadataRepo;
|
|
76
80
|
this.schematicService = schematicService;
|
|
@@ -81,6 +85,8 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
81
85
|
this.roleService = roleService;
|
|
82
86
|
this.moduleMetadataHelperService = moduleMetadataHelperService;
|
|
83
87
|
this.introspectService = introspectService;
|
|
88
|
+
this.solidTsMorphService = solidTsMorphService;
|
|
89
|
+
this.cacheManager = cacheManager;
|
|
84
90
|
this.logger = new common_1.Logger('ModelMetadataService');
|
|
85
91
|
}
|
|
86
92
|
async find(basicFilterDto) {
|
|
@@ -121,7 +127,18 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
121
127
|
}
|
|
122
128
|
return entity;
|
|
123
129
|
}
|
|
130
|
+
buildModelBySingularNameCacheKey(singularName) {
|
|
131
|
+
return `modelMetadata:singularName:${singularName}`;
|
|
132
|
+
}
|
|
124
133
|
async findOneBySingularName(singularName, relations = {}) {
|
|
134
|
+
const useCache = (0, cache_helper_1.shouldUseCache)();
|
|
135
|
+
const cacheKey = this.buildModelBySingularNameCacheKey(singularName);
|
|
136
|
+
if (useCache) {
|
|
137
|
+
const cached = await this.cacheManager.get(cacheKey);
|
|
138
|
+
if (cached) {
|
|
139
|
+
return cached;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
125
142
|
const entity = await this.modelMetadataRepo.findOne({
|
|
126
143
|
where: {
|
|
127
144
|
singularName: singularName,
|
|
@@ -131,9 +148,20 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
131
148
|
if (!entity) {
|
|
132
149
|
throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));
|
|
133
150
|
}
|
|
151
|
+
if (useCache) {
|
|
152
|
+
await this.cacheManager.set(cacheKey, entity);
|
|
153
|
+
}
|
|
134
154
|
return entity;
|
|
135
155
|
}
|
|
136
156
|
async findOneByUserKey(singularName, relations = {}) {
|
|
157
|
+
const useCache = (0, cache_helper_1.shouldUseCache)();
|
|
158
|
+
const cacheKey = this.buildModelBySingularNameCacheKey(singularName);
|
|
159
|
+
if (useCache) {
|
|
160
|
+
const cached = await this.cacheManager.get(cacheKey);
|
|
161
|
+
if (cached) {
|
|
162
|
+
return cached;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
137
165
|
const entity = await this.modelMetadataRepo.findOne({
|
|
138
166
|
where: {
|
|
139
167
|
singularName: singularName,
|
|
@@ -143,6 +171,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
143
171
|
if (!entity) {
|
|
144
172
|
throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));
|
|
145
173
|
}
|
|
174
|
+
if (useCache) {
|
|
175
|
+
await this.cacheManager.set(cacheKey, entity);
|
|
176
|
+
}
|
|
146
177
|
return entity;
|
|
147
178
|
}
|
|
148
179
|
async create(createDto) {
|
|
@@ -209,6 +240,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
209
240
|
let userKeyField = null;
|
|
210
241
|
const listViewLayout = [];
|
|
211
242
|
const formViewLayout = [];
|
|
243
|
+
const treeViewLayout = [];
|
|
212
244
|
for (let k = 0; k < fieldsMetadata.length; k++) {
|
|
213
245
|
const fieldMetadata = fieldsMetadata[k];
|
|
214
246
|
fieldMetadata['model'] = model;
|
|
@@ -222,6 +254,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
222
254
|
}
|
|
223
255
|
listViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
224
256
|
formViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
257
|
+
treeViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
225
258
|
}
|
|
226
259
|
if (userKeyField) {
|
|
227
260
|
modelMetaDataWithoutFields['userKeyField'] = userKeyField;
|
|
@@ -522,6 +555,21 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
522
555
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
523
556
|
await fs.writeFile(filePath, updatedContent);
|
|
524
557
|
}
|
|
558
|
+
if (modulePath) {
|
|
559
|
+
const moduleFilePath = path.resolve(modulePath, `${(0, strings_1.dasherize)(modelEntity.module?.name)}.module.ts`);
|
|
560
|
+
this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);
|
|
561
|
+
try {
|
|
562
|
+
this.solidTsMorphService.begin();
|
|
563
|
+
const modelPathSegment = `/${(0, strings_1.dasherize)(modelEntity.singularName)}.`;
|
|
564
|
+
const { removedIdentifiers } = this.solidTsMorphService.removeImports(moduleFilePath, spec => spec.includes(modelPathSegment));
|
|
565
|
+
this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);
|
|
566
|
+
await this.solidTsMorphService.commit();
|
|
567
|
+
}
|
|
568
|
+
catch (error) {
|
|
569
|
+
this.solidTsMorphService.rollback();
|
|
570
|
+
this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
525
573
|
}
|
|
526
574
|
async handleGenerateCode(options) {
|
|
527
575
|
const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];
|
|
@@ -575,6 +623,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
575
623
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);
|
|
576
624
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
577
625
|
const listViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
626
|
+
const treeViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
578
627
|
const formViewLayoutFields = [];
|
|
579
628
|
for (let i = 0; i < model.fields.length; i++) {
|
|
580
629
|
const field = model.fields[i];
|
|
@@ -582,8 +631,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
582
631
|
continue;
|
|
583
632
|
listViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
584
633
|
formViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
634
|
+
treeViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
585
635
|
}
|
|
586
|
-
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData);
|
|
636
|
+
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData);
|
|
587
637
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
588
638
|
await fs.writeFile(filePath, updatedContent);
|
|
589
639
|
}
|
|
@@ -592,7 +642,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
592
642
|
throw new Error('File updation failed for View, action, menus config');
|
|
593
643
|
}
|
|
594
644
|
}
|
|
595
|
-
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData) {
|
|
645
|
+
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData) {
|
|
596
646
|
const column1Fields = [];
|
|
597
647
|
const column2Fields = [];
|
|
598
648
|
for (let i = 0; i < formViewLayoutFields.length; i++) {
|
|
@@ -604,7 +654,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
604
654
|
}
|
|
605
655
|
}
|
|
606
656
|
const actionName = `${model.singularName}-list-action`;
|
|
607
|
-
const
|
|
657
|
+
const treeViewActionName = `${model.singularName}-tree-view-action`;
|
|
658
|
+
const listViewName = `${model.singularName}-list-view`;
|
|
659
|
+
const treeViewName = `${model.singularName}-tree-view`;
|
|
608
660
|
const formViewName = `${model.singularName}-form-view`;
|
|
609
661
|
const menuName = `${model.singularName}-menu-item`;
|
|
610
662
|
const action = {
|
|
@@ -616,7 +668,20 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
616
668
|
customComponent: ``,
|
|
617
669
|
customIsModal: true,
|
|
618
670
|
serverEndpoint: "",
|
|
619
|
-
viewUserKey:
|
|
671
|
+
viewUserKey: listViewName,
|
|
672
|
+
moduleUserKey: `${model.module.name}`,
|
|
673
|
+
modelUserKey: `${model.singularName}`
|
|
674
|
+
};
|
|
675
|
+
const treeViewAction = {
|
|
676
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
677
|
+
name: treeViewActionName,
|
|
678
|
+
type: "solid",
|
|
679
|
+
domain: "",
|
|
680
|
+
context: "",
|
|
681
|
+
customComponent: ``,
|
|
682
|
+
customIsModal: true,
|
|
683
|
+
serverEndpoint: "",
|
|
684
|
+
viewUserKey: treeViewName,
|
|
620
685
|
moduleUserKey: `${model.module.name}`,
|
|
621
686
|
modelUserKey: `${model.singularName}`
|
|
622
687
|
};
|
|
@@ -630,7 +695,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
630
695
|
iconName: ""
|
|
631
696
|
};
|
|
632
697
|
const modelListview = {
|
|
633
|
-
name:
|
|
698
|
+
name: listViewName,
|
|
634
699
|
displayName: `${model.displayName}`,
|
|
635
700
|
type: "list",
|
|
636
701
|
context: "{}",
|
|
@@ -653,6 +718,30 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
653
718
|
children: listViewLayoutFields
|
|
654
719
|
}
|
|
655
720
|
};
|
|
721
|
+
const modelTreeview = {
|
|
722
|
+
name: treeViewName,
|
|
723
|
+
displayName: `${model.displayName}`,
|
|
724
|
+
type: "tree",
|
|
725
|
+
context: "{}",
|
|
726
|
+
moduleUserKey: `${model.module.name}`,
|
|
727
|
+
modelUserKey: `${model.singularName}`,
|
|
728
|
+
layout: {
|
|
729
|
+
type: "tree",
|
|
730
|
+
attrs: {
|
|
731
|
+
pagination: true,
|
|
732
|
+
pageSizeOptions: [
|
|
733
|
+
10,
|
|
734
|
+
25,
|
|
735
|
+
50
|
|
736
|
+
],
|
|
737
|
+
enableGlobalSearch: true,
|
|
738
|
+
create: true,
|
|
739
|
+
edit: true,
|
|
740
|
+
delete: true
|
|
741
|
+
},
|
|
742
|
+
children: treeViewLayoutFields
|
|
743
|
+
}
|
|
744
|
+
};
|
|
656
745
|
const modelFormView = {
|
|
657
746
|
name: formViewName,
|
|
658
747
|
displayName: `${model.displayName}`,
|
|
@@ -696,9 +785,15 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
696
785
|
if (notExists(metaData.actions, actionName)) {
|
|
697
786
|
metaData.actions.push(action);
|
|
698
787
|
}
|
|
699
|
-
if (notExists(metaData.
|
|
788
|
+
if (notExists(metaData.actions, treeViewActionName)) {
|
|
789
|
+
metaData.actions.push(treeViewAction);
|
|
790
|
+
}
|
|
791
|
+
if (notExists(metaData.views, listViewName)) {
|
|
700
792
|
metaData.views.push(modelListview);
|
|
701
793
|
}
|
|
794
|
+
if (notExists(metaData.views, treeViewName)) {
|
|
795
|
+
metaData.views.push(modelTreeview);
|
|
796
|
+
}
|
|
702
797
|
if (notExists(metaData.views, formViewName)) {
|
|
703
798
|
metaData.views.push(modelFormView);
|
|
704
799
|
}
|
|
@@ -712,6 +807,13 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
712
807
|
isSearchable: true,
|
|
713
808
|
}
|
|
714
809
|
}));
|
|
810
|
+
const treeViewLayout = jsonFieldsList.map(field => ({
|
|
811
|
+
type: "field",
|
|
812
|
+
attrs: {
|
|
813
|
+
name: `${field.name}`,
|
|
814
|
+
isSearchable: true,
|
|
815
|
+
}
|
|
816
|
+
}));
|
|
715
817
|
const formViewLayout = jsonFieldsList.map(field => ({
|
|
716
818
|
type: "field",
|
|
717
819
|
attrs: {
|
|
@@ -748,6 +850,26 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
748
850
|
children: listViewLayout
|
|
749
851
|
}, null, 3)
|
|
750
852
|
},
|
|
853
|
+
{
|
|
854
|
+
name: `${model.singularName}-tree-view`,
|
|
855
|
+
displayName: `${model.displayName}`,
|
|
856
|
+
type: 'tree',
|
|
857
|
+
context: "{}",
|
|
858
|
+
module: resolvedModule,
|
|
859
|
+
model: model,
|
|
860
|
+
layout: JSON.stringify({
|
|
861
|
+
type: "tree",
|
|
862
|
+
attrs: {
|
|
863
|
+
pagination: true,
|
|
864
|
+
pageSizeOptions: [10, 25, 50],
|
|
865
|
+
enableGlobalSearch: true,
|
|
866
|
+
create: true,
|
|
867
|
+
edit: true,
|
|
868
|
+
delete: true
|
|
869
|
+
},
|
|
870
|
+
children: treeViewLayout
|
|
871
|
+
}, null, 3)
|
|
872
|
+
},
|
|
751
873
|
{
|
|
752
874
|
name: `${model.singularName}-form-view`,
|
|
753
875
|
displayName: `${model.displayName}`,
|
|
@@ -793,6 +915,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
793
915
|
}
|
|
794
916
|
}
|
|
795
917
|
let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });
|
|
918
|
+
let treeView = await viewRepo.findOne({ where: { name: `${model.singularName}-tree-view` } });
|
|
796
919
|
const actionData = {
|
|
797
920
|
displayName: `${model.displayName} List Action`,
|
|
798
921
|
name: `${model.singularName}-list-action`,
|
|
@@ -806,11 +929,29 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
806
929
|
module: resolvedModule,
|
|
807
930
|
model: model
|
|
808
931
|
};
|
|
932
|
+
const treeViewActionData = {
|
|
933
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
934
|
+
name: `${model.singularName}-tree-view-action`,
|
|
935
|
+
type: "solid",
|
|
936
|
+
domain: "",
|
|
937
|
+
context: "",
|
|
938
|
+
customComponent: ``,
|
|
939
|
+
customIsModal: true,
|
|
940
|
+
serverEndpoint: "",
|
|
941
|
+
view: treeView,
|
|
942
|
+
module: resolvedModule,
|
|
943
|
+
model: model
|
|
944
|
+
};
|
|
809
945
|
let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });
|
|
946
|
+
let existingTreeViewAction = await actionRepo.findOne({ where: { name: treeViewActionData.name } });
|
|
810
947
|
if (!existingAction) {
|
|
811
948
|
const createdAction = actionRepo.create(actionData);
|
|
812
949
|
existingAction = await actionRepo.save(createdAction);
|
|
813
950
|
}
|
|
951
|
+
if (!existingTreeViewAction) {
|
|
952
|
+
const createdTreeViewAction = actionRepo.create(treeViewActionData);
|
|
953
|
+
existingTreeViewAction = await actionRepo.save(createdTreeViewAction);
|
|
954
|
+
}
|
|
814
955
|
const adminRole = await this.roleService.findRoleByName('Admin');
|
|
815
956
|
const menuData = {
|
|
816
957
|
displayName: `${model.displayName}`,
|
|
@@ -1068,6 +1209,7 @@ exports.ModelMetadataService = ModelMetadataService = __decorate([
|
|
|
1068
1209
|
(0, common_1.Injectable)(),
|
|
1069
1210
|
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_repository_1.ModelMetadataRepository))),
|
|
1070
1211
|
__param(3, (0, typeorm_1.InjectDataSource)()),
|
|
1212
|
+
__param(11, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
|
1071
1213
|
__metadata("design:paramtypes", [model_metadata_repository_1.ModelMetadataRepository,
|
|
1072
1214
|
field_metadata_repository_1.FieldMetadataRepository,
|
|
1073
1215
|
schematic_service_1.SchematicService,
|
|
@@ -1077,6 +1219,7 @@ exports.ModelMetadataService = ModelMetadataService = __decorate([
|
|
|
1077
1219
|
field_metadata_service_1.FieldMetadataService,
|
|
1078
1220
|
role_metadata_service_1.RoleMetadataService,
|
|
1079
1221
|
module_metadata_helper_service_1.ModuleMetadataHelperService,
|
|
1080
|
-
solid_introspect_service_1.SolidIntrospectService
|
|
1222
|
+
solid_introspect_service_1.SolidIntrospectService,
|
|
1223
|
+
solid_ts_morph_service_1.SolidTsMorphService, Object])
|
|
1081
1224
|
], ModelMetadataService);
|
|
1082
1225
|
//# sourceMappingURL=model-metadata.service.js.map
|