@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
|
@@ -11,6 +11,7 @@ export interface MediaFieldOptions {
|
|
|
11
11
|
fieldName: string | undefined | null;
|
|
12
12
|
mediaMaxSizeKb: number | undefined | null;
|
|
13
13
|
mediaTypes: string[];
|
|
14
|
+
isUpdate: boolean | undefined | null;
|
|
14
15
|
}
|
|
15
16
|
|
|
16
17
|
type MediaType = 'image' | 'audio' | 'video' | 'file' | 'pdf';
|
|
@@ -119,25 +120,24 @@ export class MediaFieldCrudManager implements FieldCrudManager {
|
|
|
119
120
|
}
|
|
120
121
|
|
|
121
122
|
validate(dto: any, files: Array<Express.Multer.File>): ValidationError[] {
|
|
122
|
-
const isValidateForUpdate = dto.id !== undefined; //FIXME: This is a hack, since we are using PUT for update. Once we support PATCH, this will be removed
|
|
123
123
|
const fieldFiles = files.filter(file => file.fieldname === this.options.fieldName);
|
|
124
|
-
return this.applyValidations(fieldFiles
|
|
124
|
+
return this.applyValidations(fieldFiles);
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
private applyValidations(fieldFiles: Array<Express.Multer.File
|
|
127
|
+
private applyValidations(fieldFiles: Array<Express.Multer.File>): ValidationError[] {
|
|
128
128
|
switch (this.options.type) {
|
|
129
129
|
case SolidMediaType.mediaSingle:
|
|
130
|
-
return this.validateMediaSingle(fieldFiles
|
|
130
|
+
return this.validateMediaSingle(fieldFiles);
|
|
131
131
|
case SolidMediaType.mediaMultiple:
|
|
132
|
-
return this.validateMediaMultiple(fieldFiles
|
|
132
|
+
return this.validateMediaMultiple(fieldFiles);
|
|
133
133
|
default:
|
|
134
134
|
return [];
|
|
135
135
|
}
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
-
private validateMediaSingle(fieldFiles: Array<Express.Multer.File
|
|
138
|
+
private validateMediaSingle(fieldFiles: Array<Express.Multer.File>): ValidationError[] {
|
|
139
139
|
const errors: ValidationError[] = [];
|
|
140
|
-
if (!
|
|
140
|
+
if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {
|
|
141
141
|
errors.push({
|
|
142
142
|
field: this.options.fieldName,
|
|
143
143
|
error: `${this.options.fieldName} is required`
|
|
@@ -184,9 +184,9 @@ export class MediaFieldCrudManager implements FieldCrudManager {
|
|
|
184
184
|
return errors;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
private validateMediaMultiple(fieldFiles: Array<Express.Multer.File
|
|
187
|
+
private validateMediaMultiple(fieldFiles: Array<Express.Multer.File>): ValidationError[] {
|
|
188
188
|
const errors: ValidationError[] = [];
|
|
189
|
-
if (!
|
|
189
|
+
if (!this.options.isUpdate && this.options.required && fieldFiles.length === 0) {
|
|
190
190
|
errors.push({
|
|
191
191
|
field: this.options.fieldName,
|
|
192
192
|
error: `${this.options.fieldName} is required`
|
|
@@ -7,7 +7,7 @@ export interface SelectionDynamicFieldOptions {
|
|
|
7
7
|
selectionDynamicProvider: string;
|
|
8
8
|
selectionValueType: SelectionValueType;
|
|
9
9
|
required: boolean | undefined | null;
|
|
10
|
-
selectionDynamicProviderCtxt:
|
|
10
|
+
selectionDynamicProviderCtxt: ISelectionProviderContext;
|
|
11
11
|
fieldName: string;
|
|
12
12
|
discoveryService: DiscoveryService;
|
|
13
13
|
isMultiSelect: boolean | undefined | null;
|
|
@@ -85,8 +85,11 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
|
|
|
85
85
|
private async applyFormatValidations(fieldValue: any): Promise<ValidationError[]> {
|
|
86
86
|
const errors: ValidationError[] = [];
|
|
87
87
|
!this.isValidSelectionValueType(fieldValue, this.options.selectionValueType) ? errors.push({ field: this.options.fieldName, error: 'Field value type is invalid' }) : "no errors";
|
|
88
|
-
const
|
|
89
|
-
|
|
88
|
+
const ctxt = this.options.selectionDynamicProviderCtxt;
|
|
89
|
+
if (ctxt.validateOnSave !== false) {
|
|
90
|
+
const _isValidSelectionValue = await this.isValidSelectionValue(fieldValue, this.options.selectionDynamicProvider, ctxt);
|
|
91
|
+
!_isValidSelectionValue ? errors.push({ field: this.options.fieldName, error: 'Field value is invalid' }) : "no errors";
|
|
92
|
+
}
|
|
90
93
|
return errors;
|
|
91
94
|
}
|
|
92
95
|
|
|
@@ -106,11 +109,11 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
|
|
|
106
109
|
}
|
|
107
110
|
}
|
|
108
111
|
|
|
109
|
-
private async isValidSelectionValue(fieldValue: any, selectionDynamicProvider: string): Promise<boolean> {
|
|
112
|
+
private async isValidSelectionValue(fieldValue: any, selectionDynamicProvider: string, ctxt: ISelectionProviderContext): Promise<boolean> {
|
|
110
113
|
const providerInstance = this.providerInstance<any>(selectionDynamicProvider);
|
|
111
114
|
try {
|
|
112
115
|
// Use the value method first
|
|
113
|
-
const valueOption = await providerInstance.value(fieldValue,
|
|
116
|
+
const valueOption = await providerInstance.value(fieldValue, ctxt);
|
|
114
117
|
if (valueOption && valueOption.value === fieldValue) {
|
|
115
118
|
return true;
|
|
116
119
|
}
|
|
@@ -118,7 +121,7 @@ export class SelectionDynamicFieldCrudManager implements FieldCrudManager {
|
|
|
118
121
|
}
|
|
119
122
|
catch (error) {
|
|
120
123
|
// Use the values method as a fallback, if the value method is not implemented
|
|
121
|
-
const values = await providerInstance.values('',
|
|
124
|
+
const values = await providerInstance.values('', ctxt);
|
|
122
125
|
const isValid = values.some(v => v.value === fieldValue);
|
|
123
126
|
return isValid;
|
|
124
127
|
}
|
|
@@ -5,12 +5,8 @@ import { CommonEntity } from 'src/entities/common.entity';
|
|
|
5
5
|
import { Locale } from 'src/entities/locale.entity';
|
|
6
6
|
import { SecurityRule } from 'src/entities/security-rule.entity';
|
|
7
7
|
import { IScheduledJob } from 'src/services/scheduled-jobs/scheduled-job.interface';
|
|
8
|
-
import { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, IErrorCodeProvider, ISecurityRuleConfigProvider, ISelectionProvider, ISelectionProviderContext, ISolidDatabaseModule
|
|
9
|
-
import { DatasourceType } from 'src/dtos/create-model-metadata.dto';
|
|
8
|
+
import { IDashboardQuestionDataProvider, IDashboardVariableSelectionProvider, IErrorCodeProvider, ISecurityRuleConfigProvider, ISelectionProvider, ISelectionProviderContext, ISolidDatabaseModule } from "../interfaces";
|
|
10
9
|
import { ObjectLiteral } from 'typeorm';
|
|
11
|
-
import { ColumnMetadata } from 'typeorm/metadata/ColumnMetadata';
|
|
12
|
-
import { RelationMetadata } from 'typeorm/metadata/RelationMetadata';
|
|
13
|
-
import { Setting } from 'src/entities/setting.entity';
|
|
14
10
|
|
|
15
11
|
type ControllerMetadata = {
|
|
16
12
|
name: string;
|
|
@@ -9,6 +9,29 @@ const LONG_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
|
|
|
9
9
|
[DatasourceType.oracle]: { type: "clob" },
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
+
// For simple-json columns that may contain large payloads: on MySQL/MariaDB the default
|
|
13
|
+
// TEXT backing store is limited to 64 KB, so we override the type to longtext and supply
|
|
14
|
+
// an explicit JSON transformer so TypeORM still serialises/deserialises correctly.
|
|
15
|
+
const SIMPLE_JSON_LARGE_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
|
|
16
|
+
[DatasourceType.postgres]: {},
|
|
17
|
+
[DatasourceType.mssql]: {},
|
|
18
|
+
[DatasourceType.mysql]: {
|
|
19
|
+
type: "longtext",
|
|
20
|
+
transformer: {
|
|
21
|
+
to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
|
|
22
|
+
from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
[DatasourceType.mariadb]: {
|
|
26
|
+
type: "longtext",
|
|
27
|
+
transformer: {
|
|
28
|
+
to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
|
|
29
|
+
from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
[DatasourceType.oracle]: { type: "clob" },
|
|
33
|
+
};
|
|
34
|
+
|
|
12
35
|
const solidCoreDbType: DatasourceType =
|
|
13
36
|
Object.values(DatasourceType).includes(process.env.SOLID_CORE_DB_TYPE as DatasourceType)
|
|
14
37
|
? (process.env.SOLID_CORE_DB_TYPE as DatasourceType)
|
|
@@ -20,6 +43,9 @@ export function getColumnType(solidType: string): ColumnOptions {
|
|
|
20
43
|
case "richText":
|
|
21
44
|
return LONG_TEXT_MAP[solidCoreDbType];
|
|
22
45
|
|
|
46
|
+
case "simpleJsonLargeText":
|
|
47
|
+
return SIMPLE_JSON_LARGE_TEXT_MAP[solidCoreDbType];
|
|
48
|
+
|
|
23
49
|
default:
|
|
24
50
|
return {};
|
|
25
51
|
}
|
package/src/index.ts
CHANGED
|
@@ -137,6 +137,7 @@ export * from './entities/user-activity-history.entity'
|
|
|
137
137
|
export * from './entities/dashboard.entity'
|
|
138
138
|
export * from './entities/dashboard-variable.entity'
|
|
139
139
|
export * from './entities/dashboard-question.entity'
|
|
140
|
+
export * from './entities/dashboard-layout.entity'
|
|
140
141
|
export * from './entities/dashboard-question-sql-dataset-config.entity'
|
|
141
142
|
export * from './entities/ai-interaction.entity'
|
|
142
143
|
export * from './entities/model-sequence.entity'
|
|
@@ -175,7 +176,9 @@ export * from './helpers/field-crud-managers/SelectionDynamicFieldCrudManager' /
|
|
|
175
176
|
export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager' //rename
|
|
176
177
|
export * from './helpers/field-crud-managers/ShortTextFieldCrudManager' //rename
|
|
177
178
|
export * from './helpers/field-crud-managers/UUIDFieldCrudManager' //rename
|
|
179
|
+
export * from './helpers/bootstrap.helper'
|
|
178
180
|
export * from './helpers/environment.helper'
|
|
181
|
+
export * from './helpers/cache.helper'
|
|
179
182
|
export * from './helpers/cors.helper'
|
|
180
183
|
export * from './helpers/security.helper'
|
|
181
184
|
export * from './helpers/model-metadata-helper.service'
|
package/src/interfaces.ts
CHANGED
|
@@ -111,6 +111,8 @@ export interface ISelectionProviderContext {
|
|
|
111
111
|
limit: number;
|
|
112
112
|
offset: number;
|
|
113
113
|
formValues: Record<string, any>;
|
|
114
|
+
//Attribute to control the validation on creating the record
|
|
115
|
+
validateOnSave?: boolean;
|
|
114
116
|
// query: string;
|
|
115
117
|
}
|
|
116
118
|
|
|
@@ -136,12 +138,18 @@ export interface IMcpToolResponseHandler {
|
|
|
136
138
|
apply(aiInteraction: AiInteraction);
|
|
137
139
|
}
|
|
138
140
|
|
|
141
|
+
export interface QuestionSqlDataProviderContext {
|
|
142
|
+
// questionSqlDatasetConfig: QuestionSqlDatasetConfig;
|
|
143
|
+
// questionId: number;
|
|
144
|
+
// question: Question;
|
|
145
|
+
expressions?: SqlExpression[]
|
|
146
|
+
}
|
|
139
147
|
export interface IDashboardQuestionDataProvider<TContext, TData> {
|
|
140
148
|
help(): string;
|
|
141
149
|
|
|
142
150
|
name(): string;
|
|
143
151
|
|
|
144
|
-
getData(question: DashboardQuestion,
|
|
152
|
+
getData(question: DashboardQuestion, ctxt?: TContext): Promise<TData[] | TData>;
|
|
145
153
|
}
|
|
146
154
|
|
|
147
155
|
/**
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
3
|
+
import { DataSource } from 'typeorm';
|
|
4
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
5
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
6
|
+
import { DashboardLayout } from 'src/entities/dashboard-layout.entity';
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class DashboardLayoutRepository extends SolidBaseRepository<DashboardLayout> {
|
|
10
|
+
constructor(
|
|
11
|
+
readonly dataSource: DataSource,
|
|
12
|
+
readonly requestContextService: RequestContextService,
|
|
13
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
14
|
+
) {
|
|
15
|
+
super(DashboardLayout, dataSource, requestContextService, securityRuleRepository);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -140,17 +140,17 @@ export class ModuleMetadataSeederService {
|
|
|
140
140
|
console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
|
|
141
141
|
this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
|
|
142
142
|
|
|
143
|
+
currentStep = 'seedMediaStorageProviders';
|
|
144
|
+
this.logger.log(`Seeding Media Storage Providers`);
|
|
145
|
+
const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
|
|
146
|
+
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
|
|
147
|
+
|
|
143
148
|
// Process module metadata first.
|
|
144
149
|
currentStep = 'seedModuleModelFields';
|
|
145
150
|
this.logger.log(`Seeding Module / Model / Fields`);
|
|
146
151
|
const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);
|
|
147
152
|
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
|
|
148
153
|
|
|
149
|
-
currentStep = 'seedMediaStorageProviders';
|
|
150
|
-
this.logger.log(`Seeding Media Storage Providers`);
|
|
151
|
-
const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
|
|
152
|
-
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
|
|
153
|
-
|
|
154
154
|
currentStep = 'seedRoles';
|
|
155
155
|
this.logger.log(`Seeding Roles`);
|
|
156
156
|
const roleCounts = await this.seedRoles(overallMetadata);
|