@solidxai/core 0.1.6-beta.2 → 0.1.6-beta.20
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 +155 -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 +70 -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":"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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';\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":"AAKA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAM,UAAU,EAAsB,MAAM,SAAS,CAAC;AACxF,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;AASlE,OAAO,EAAE,2BAA2B,EAAE,MAAM,4CAA4C,CAAC;AACzF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAK3E,OAAO,EAGL,gBAAgB,EACjB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,mCAAmC,EAAE,MAAM,2CAA2C,CAAC;AAChG,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,qBACa,oBAAoB;IAQ7B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IAEjC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,mCAAmC;IACpD,OAAO,CAAC,QAAQ,CAAC,oBAAoB;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,2BAA2B;IAC5C,QAAQ,CAAC,iBAAiB,EAAE,sBAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,mBAAmB;IACb,OAAO,CAAC,QAAQ,CAAC,YAAY;IAnBtD,OAAO,CAAC,MAAM,CAAsC;gBAOjC,iBAAiB,EAAE,uBAAuB,EAC1C,iBAAiB,EAAE,uBAAuB,EAC1C,gBAAgB,EAAE,gBAAgB,EAElC,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EACpC,mCAAmC,EAAE,mCAAmC,EACxE,oBAAoB,EAAE,oBAAoB,EAC1C,WAAW,EAAE,mBAAmB,EAChC,2BAA2B,EAAE,2BAA2B,EAChE,iBAAiB,EAAE,sBAAsB,EACjC,mBAAmB,EAAE,mBAAmB,EACjB,YAAY,EAAE,KAAK;IAMvD,IAAI,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAInC,QAAQ,CAAC,cAAc,EAAE,cAAc;;;;;;;;;;;IAgCvC,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG;IAclC,OAAO,CAAC,gCAAgC;IAIlC,qBAAqB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,KAAK;IA8B1D,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,KAAK;IA8BrD,MAAM,CAAC,SAAS,EAAE,sBAAsB;YAuBhC,kCAAkC;IAS1C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,sBAAsB;IAyBjE,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,sBAAsB;IAoEpE,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;IAoD1D,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,sBAAsB;IA6G7F,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,CAAC,aAAa,CAAC;IAwE1D,MAAM,CAAC,SAAS,EAAE,sBAAsB;IAqBxC,oBAAoB,CAAC,YAAY,EAAE,MAAM;IAUzC,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBvC,MAAM,CAAC,EAAE,EAAE,MAAM;IAOjB,eAAe,CAAC,aAAa,EAAE,MAAM;IAgLrC,kBAAkB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,GAAG,CAAC;YAqBxD,4BAA4B;IAmBpC,iBAAiB,CAAC,OAAO,EAAE,MAAM;YAmBzB,uBAAuB;IA6BrC,OAAO,CAAC,+BAA+B;YAkLzB,qBAAqB;IA8L7B,YAAY,CAAC,OAAO,EAAE,qBAAqB;;;;;IAkB3C,wBAAwB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;IAuDzE,iBAAiB,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC;YA0B1D,0BAA0B;YAc1B,0BAA0B;IAkBlC,aAAa,CAAC,IAAI,EAAE,GAAG;;;;YAiCf,wBAAwB;IAiBhC,UAAU,CAAC,aAAa,EAAE,aAAa;;;;;;;;;;;;;;;;;;;;;;;;CAkJ9C"}
|
|
@@ -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,20 @@ 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
|
+
this.logger.debug(`Cache hit for findOneBySingularName: key=${cacheKey}`);
|
|
140
|
+
return cached;
|
|
141
|
+
}
|
|
142
|
+
this.logger.debug(`Cache miss for findOneBySingularName: key=${cacheKey}`);
|
|
143
|
+
}
|
|
125
144
|
const entity = await this.modelMetadataRepo.findOne({
|
|
126
145
|
where: {
|
|
127
146
|
singularName: singularName,
|
|
@@ -131,9 +150,22 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
131
150
|
if (!entity) {
|
|
132
151
|
throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));
|
|
133
152
|
}
|
|
153
|
+
if (useCache) {
|
|
154
|
+
await this.cacheManager.set(cacheKey, entity);
|
|
155
|
+
}
|
|
134
156
|
return entity;
|
|
135
157
|
}
|
|
136
158
|
async findOneByUserKey(singularName, relations = {}) {
|
|
159
|
+
const useCache = (0, cache_helper_1.shouldUseCache)();
|
|
160
|
+
const cacheKey = this.buildModelBySingularNameCacheKey(singularName);
|
|
161
|
+
if (useCache) {
|
|
162
|
+
const cached = await this.cacheManager.get(cacheKey);
|
|
163
|
+
if (cached) {
|
|
164
|
+
this.logger.debug(`Cache hit for findOneByUserKey: key=${cacheKey}`);
|
|
165
|
+
return cached;
|
|
166
|
+
}
|
|
167
|
+
this.logger.debug(`Cache miss for findOneByUserKey: key=${cacheKey}`);
|
|
168
|
+
}
|
|
137
169
|
const entity = await this.modelMetadataRepo.findOne({
|
|
138
170
|
where: {
|
|
139
171
|
singularName: singularName,
|
|
@@ -143,6 +175,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
143
175
|
if (!entity) {
|
|
144
176
|
throw new common_1.NotFoundException(error_messages_1.ERROR_MESSAGES.ENTITY_NOT_FOUND(singularName));
|
|
145
177
|
}
|
|
178
|
+
if (useCache) {
|
|
179
|
+
await this.cacheManager.set(cacheKey, entity);
|
|
180
|
+
}
|
|
146
181
|
return entity;
|
|
147
182
|
}
|
|
148
183
|
async create(createDto) {
|
|
@@ -209,6 +244,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
209
244
|
let userKeyField = null;
|
|
210
245
|
const listViewLayout = [];
|
|
211
246
|
const formViewLayout = [];
|
|
247
|
+
const treeViewLayout = [];
|
|
212
248
|
for (let k = 0; k < fieldsMetadata.length; k++) {
|
|
213
249
|
const fieldMetadata = fieldsMetadata[k];
|
|
214
250
|
fieldMetadata['model'] = model;
|
|
@@ -222,6 +258,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
222
258
|
}
|
|
223
259
|
listViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
224
260
|
formViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
261
|
+
treeViewLayout.push({ type: "field", attrs: { name: `${affectedField.name}` } });
|
|
225
262
|
}
|
|
226
263
|
if (userKeyField) {
|
|
227
264
|
modelMetaDataWithoutFields['userKeyField'] = userKeyField;
|
|
@@ -522,6 +559,21 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
522
559
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
523
560
|
await fs.writeFile(filePath, updatedContent);
|
|
524
561
|
}
|
|
562
|
+
if (modulePath) {
|
|
563
|
+
const moduleFilePath = path.resolve(modulePath, `${(0, strings_1.dasherize)(modelEntity.module?.name)}.module.ts`);
|
|
564
|
+
this.logger.log(`Removing model '${modelEntity.singularName}' references from module file: ${moduleFilePath}`);
|
|
565
|
+
try {
|
|
566
|
+
this.solidTsMorphService.begin();
|
|
567
|
+
const modelPathSegment = `/${(0, strings_1.dasherize)(modelEntity.singularName)}.`;
|
|
568
|
+
const { removedIdentifiers } = this.solidTsMorphService.removeImports(moduleFilePath, spec => spec.includes(modelPathSegment));
|
|
569
|
+
this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);
|
|
570
|
+
await this.solidTsMorphService.commit();
|
|
571
|
+
}
|
|
572
|
+
catch (error) {
|
|
573
|
+
this.solidTsMorphService.rollback();
|
|
574
|
+
this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);
|
|
575
|
+
}
|
|
576
|
+
}
|
|
525
577
|
}
|
|
526
578
|
async handleGenerateCode(options) {
|
|
527
579
|
const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];
|
|
@@ -575,6 +627,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
575
627
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(model.module.name);
|
|
576
628
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
577
629
|
const listViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
630
|
+
const treeViewLayoutFields = [{ type: "field", attrs: { name: `id` } }];
|
|
578
631
|
const formViewLayoutFields = [];
|
|
579
632
|
for (let i = 0; i < model.fields.length; i++) {
|
|
580
633
|
const field = model.fields[i];
|
|
@@ -582,8 +635,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
582
635
|
continue;
|
|
583
636
|
listViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
584
637
|
formViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
638
|
+
treeViewLayoutFields.push({ type: "field", attrs: { name: `${field.name}` } });
|
|
585
639
|
}
|
|
586
|
-
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData);
|
|
640
|
+
this.populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData);
|
|
587
641
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
588
642
|
await fs.writeFile(filePath, updatedContent);
|
|
589
643
|
}
|
|
@@ -592,7 +646,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
592
646
|
throw new Error('File updation failed for View, action, menus config');
|
|
593
647
|
}
|
|
594
648
|
}
|
|
595
|
-
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, metaData) {
|
|
649
|
+
populateVAMConfigInFileInternal(formViewLayoutFields, model, listViewLayoutFields, treeViewLayoutFields, metaData) {
|
|
596
650
|
const column1Fields = [];
|
|
597
651
|
const column2Fields = [];
|
|
598
652
|
for (let i = 0; i < formViewLayoutFields.length; i++) {
|
|
@@ -604,7 +658,9 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
604
658
|
}
|
|
605
659
|
}
|
|
606
660
|
const actionName = `${model.singularName}-list-action`;
|
|
607
|
-
const
|
|
661
|
+
const treeViewActionName = `${model.singularName}-tree-view-action`;
|
|
662
|
+
const listViewName = `${model.singularName}-list-view`;
|
|
663
|
+
const treeViewName = `${model.singularName}-tree-view`;
|
|
608
664
|
const formViewName = `${model.singularName}-form-view`;
|
|
609
665
|
const menuName = `${model.singularName}-menu-item`;
|
|
610
666
|
const action = {
|
|
@@ -616,7 +672,20 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
616
672
|
customComponent: ``,
|
|
617
673
|
customIsModal: true,
|
|
618
674
|
serverEndpoint: "",
|
|
619
|
-
viewUserKey:
|
|
675
|
+
viewUserKey: listViewName,
|
|
676
|
+
moduleUserKey: `${model.module.name}`,
|
|
677
|
+
modelUserKey: `${model.singularName}`
|
|
678
|
+
};
|
|
679
|
+
const treeViewAction = {
|
|
680
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
681
|
+
name: treeViewActionName,
|
|
682
|
+
type: "solid",
|
|
683
|
+
domain: "",
|
|
684
|
+
context: "",
|
|
685
|
+
customComponent: ``,
|
|
686
|
+
customIsModal: true,
|
|
687
|
+
serverEndpoint: "",
|
|
688
|
+
viewUserKey: treeViewName,
|
|
620
689
|
moduleUserKey: `${model.module.name}`,
|
|
621
690
|
modelUserKey: `${model.singularName}`
|
|
622
691
|
};
|
|
@@ -630,7 +699,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
630
699
|
iconName: ""
|
|
631
700
|
};
|
|
632
701
|
const modelListview = {
|
|
633
|
-
name:
|
|
702
|
+
name: listViewName,
|
|
634
703
|
displayName: `${model.displayName}`,
|
|
635
704
|
type: "list",
|
|
636
705
|
context: "{}",
|
|
@@ -653,6 +722,30 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
653
722
|
children: listViewLayoutFields
|
|
654
723
|
}
|
|
655
724
|
};
|
|
725
|
+
const modelTreeview = {
|
|
726
|
+
name: treeViewName,
|
|
727
|
+
displayName: `${model.displayName}`,
|
|
728
|
+
type: "tree",
|
|
729
|
+
context: "{}",
|
|
730
|
+
moduleUserKey: `${model.module.name}`,
|
|
731
|
+
modelUserKey: `${model.singularName}`,
|
|
732
|
+
layout: {
|
|
733
|
+
type: "tree",
|
|
734
|
+
attrs: {
|
|
735
|
+
pagination: true,
|
|
736
|
+
pageSizeOptions: [
|
|
737
|
+
10,
|
|
738
|
+
25,
|
|
739
|
+
50
|
|
740
|
+
],
|
|
741
|
+
enableGlobalSearch: true,
|
|
742
|
+
create: true,
|
|
743
|
+
edit: true,
|
|
744
|
+
delete: true
|
|
745
|
+
},
|
|
746
|
+
children: treeViewLayoutFields
|
|
747
|
+
}
|
|
748
|
+
};
|
|
656
749
|
const modelFormView = {
|
|
657
750
|
name: formViewName,
|
|
658
751
|
displayName: `${model.displayName}`,
|
|
@@ -696,9 +789,15 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
696
789
|
if (notExists(metaData.actions, actionName)) {
|
|
697
790
|
metaData.actions.push(action);
|
|
698
791
|
}
|
|
699
|
-
if (notExists(metaData.
|
|
792
|
+
if (notExists(metaData.actions, treeViewActionName)) {
|
|
793
|
+
metaData.actions.push(treeViewAction);
|
|
794
|
+
}
|
|
795
|
+
if (notExists(metaData.views, listViewName)) {
|
|
700
796
|
metaData.views.push(modelListview);
|
|
701
797
|
}
|
|
798
|
+
if (notExists(metaData.views, treeViewName)) {
|
|
799
|
+
metaData.views.push(modelTreeview);
|
|
800
|
+
}
|
|
702
801
|
if (notExists(metaData.views, formViewName)) {
|
|
703
802
|
metaData.views.push(modelFormView);
|
|
704
803
|
}
|
|
@@ -712,6 +811,13 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
712
811
|
isSearchable: true,
|
|
713
812
|
}
|
|
714
813
|
}));
|
|
814
|
+
const treeViewLayout = jsonFieldsList.map(field => ({
|
|
815
|
+
type: "field",
|
|
816
|
+
attrs: {
|
|
817
|
+
name: `${field.name}`,
|
|
818
|
+
isSearchable: true,
|
|
819
|
+
}
|
|
820
|
+
}));
|
|
715
821
|
const formViewLayout = jsonFieldsList.map(field => ({
|
|
716
822
|
type: "field",
|
|
717
823
|
attrs: {
|
|
@@ -748,6 +854,26 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
748
854
|
children: listViewLayout
|
|
749
855
|
}, null, 3)
|
|
750
856
|
},
|
|
857
|
+
{
|
|
858
|
+
name: `${model.singularName}-tree-view`,
|
|
859
|
+
displayName: `${model.displayName}`,
|
|
860
|
+
type: 'tree',
|
|
861
|
+
context: "{}",
|
|
862
|
+
module: resolvedModule,
|
|
863
|
+
model: model,
|
|
864
|
+
layout: JSON.stringify({
|
|
865
|
+
type: "tree",
|
|
866
|
+
attrs: {
|
|
867
|
+
pagination: true,
|
|
868
|
+
pageSizeOptions: [10, 25, 50],
|
|
869
|
+
enableGlobalSearch: true,
|
|
870
|
+
create: true,
|
|
871
|
+
edit: true,
|
|
872
|
+
delete: true
|
|
873
|
+
},
|
|
874
|
+
children: treeViewLayout
|
|
875
|
+
}, null, 3)
|
|
876
|
+
},
|
|
751
877
|
{
|
|
752
878
|
name: `${model.singularName}-form-view`,
|
|
753
879
|
displayName: `${model.displayName}`,
|
|
@@ -793,6 +919,7 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
793
919
|
}
|
|
794
920
|
}
|
|
795
921
|
let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });
|
|
922
|
+
let treeView = await viewRepo.findOne({ where: { name: `${model.singularName}-tree-view` } });
|
|
796
923
|
const actionData = {
|
|
797
924
|
displayName: `${model.displayName} List Action`,
|
|
798
925
|
name: `${model.singularName}-list-action`,
|
|
@@ -806,11 +933,29 @@ let ModelMetadataService = class ModelMetadataService {
|
|
|
806
933
|
module: resolvedModule,
|
|
807
934
|
model: model
|
|
808
935
|
};
|
|
936
|
+
const treeViewActionData = {
|
|
937
|
+
displayName: `${model.displayName} Tree View Action`,
|
|
938
|
+
name: `${model.singularName}-tree-view-action`,
|
|
939
|
+
type: "solid",
|
|
940
|
+
domain: "",
|
|
941
|
+
context: "",
|
|
942
|
+
customComponent: ``,
|
|
943
|
+
customIsModal: true,
|
|
944
|
+
serverEndpoint: "",
|
|
945
|
+
view: treeView,
|
|
946
|
+
module: resolvedModule,
|
|
947
|
+
model: model
|
|
948
|
+
};
|
|
809
949
|
let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });
|
|
950
|
+
let existingTreeViewAction = await actionRepo.findOne({ where: { name: treeViewActionData.name } });
|
|
810
951
|
if (!existingAction) {
|
|
811
952
|
const createdAction = actionRepo.create(actionData);
|
|
812
953
|
existingAction = await actionRepo.save(createdAction);
|
|
813
954
|
}
|
|
955
|
+
if (!existingTreeViewAction) {
|
|
956
|
+
const createdTreeViewAction = actionRepo.create(treeViewActionData);
|
|
957
|
+
existingTreeViewAction = await actionRepo.save(createdTreeViewAction);
|
|
958
|
+
}
|
|
814
959
|
const adminRole = await this.roleService.findRoleByName('Admin');
|
|
815
960
|
const menuData = {
|
|
816
961
|
displayName: `${model.displayName}`,
|
|
@@ -1068,6 +1213,7 @@ exports.ModelMetadataService = ModelMetadataService = __decorate([
|
|
|
1068
1213
|
(0, common_1.Injectable)(),
|
|
1069
1214
|
__param(0, (0, common_1.Inject)((0, common_1.forwardRef)(() => model_metadata_repository_1.ModelMetadataRepository))),
|
|
1070
1215
|
__param(3, (0, typeorm_1.InjectDataSource)()),
|
|
1216
|
+
__param(11, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
|
1071
1217
|
__metadata("design:paramtypes", [model_metadata_repository_1.ModelMetadataRepository,
|
|
1072
1218
|
field_metadata_repository_1.FieldMetadataRepository,
|
|
1073
1219
|
schematic_service_1.SchematicService,
|
|
@@ -1077,6 +1223,7 @@ exports.ModelMetadataService = ModelMetadataService = __decorate([
|
|
|
1077
1223
|
field_metadata_service_1.FieldMetadataService,
|
|
1078
1224
|
role_metadata_service_1.RoleMetadataService,
|
|
1079
1225
|
module_metadata_helper_service_1.ModuleMetadataHelperService,
|
|
1080
|
-
solid_introspect_service_1.SolidIntrospectService
|
|
1226
|
+
solid_introspect_service_1.SolidIntrospectService,
|
|
1227
|
+
solid_ts_morph_service_1.SolidTsMorphService, Object])
|
|
1081
1228
|
], ModelMetadataService);
|
|
1082
1229
|
//# sourceMappingURL=model-metadata.service.js.map
|