@solidxai/core 0.1.6 → 0.1.7
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/CHANGELOG.md +71 -0
- 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-queue.entity.d.ts.map +1 -1
- package/dist/entities/mq-message-queue.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/cors.helper.d.ts.map +1 -1
- package/dist/helpers/cors.helper.js +13 -4
- package/dist/helpers/cors.helper.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 +3 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +7 -0
- 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 +6 -1
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/chatter-queue-options.js +1 -1
- package/dist/jobs/chatter-queue-options.js.map +1 -1
- package/dist/jobs/chatter-queue-publisher.service.d.ts +9 -9
- package/dist/jobs/chatter-queue-publisher.service.d.ts.map +1 -1
- package/dist/jobs/chatter-queue-publisher.service.js +5 -5
- package/dist/jobs/chatter-queue-publisher.service.js.map +1 -1
- package/dist/jobs/chatter-queue-subscriber.service.d.ts +4 -4
- package/dist/jobs/chatter-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/chatter-queue-subscriber.service.js +11 -11
- package/dist/jobs/chatter-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts +2 -0
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.js +2 -0
- package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
- package/dist/jobs/database/chatter-queue-options-database.d.ts +8 -0
- package/dist/jobs/database/chatter-queue-options-database.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-options-database.js +10 -0
- package/dist/jobs/database/chatter-queue-options-database.js.map +1 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts +12 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.js +39 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts +19 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js +62 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -0
- 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/repository/model-metadata.repository.d.ts +6 -1
- package/dist/repository/model-metadata.repository.d.ts.map +1 -1
- package/dist/repository/model-metadata.repository.js +41 -2
- package/dist/repository/model-metadata.repository.js.map +1 -1
- 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 +45 -21
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +4 -4
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +59 -9
- 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 +3 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +122 -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 -7
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.d.ts +1 -0
- package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +6 -1
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +9 -3
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +93 -10
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/request-context.service.d.ts +2 -1
- package/dist/services/request-context.service.d.ts.map +1 -1
- package/dist/services/request-context.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-introspect.service.d.ts +6 -1
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +27 -2
- package/dist/services/solid-introspect.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 +16 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +10 -7
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +58 -85
- package/dist/subscribers/audit.subscriber.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/subscribers/created-by-updated-by.subscriber.d.ts +0 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.js +3 -13
- package/dist/subscribers/created-by-updated-by.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/winston.logger.d.ts.map +1 -1
- package/dist/winston.logger.js +2 -1
- package/dist/winston.logger.js.map +1 -1
- 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-queue.entity.ts +8 -8
- 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/cors.helper.ts +26 -6
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +9 -6
- package/src/helpers/solid-registry.ts +10 -5
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +3 -0
- package/src/interfaces.ts +10 -1
- package/src/jobs/chatter-queue-options.ts +1 -1
- package/src/jobs/chatter-queue-publisher.service.ts +11 -11
- package/src/jobs/chatter-queue-subscriber.service.ts +13 -8
- package/src/jobs/computed-field-evaluation-queue-options.ts +2 -0
- package/src/jobs/database/chatter-queue-options-database.ts +9 -0
- package/src/jobs/database/chatter-queue-publisher-database.service.ts +24 -0
- package/src/jobs/database/chatter-queue-subscriber-database.service.ts +53 -0
- package/src/repository/dashboard-layout.repository.ts +17 -0
- package/src/repository/model-metadata.repository.ts +45 -2
- 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 +47 -24
- package/src/services/chatter-message.service.ts +67 -9
- 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 +131 -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 +9 -7
- package/src/services/queues/rabbitmq-publisher.service.ts +8 -2
- package/src/services/queues/rabbitmq-subscriber.service.ts +139 -11
- package/src/services/request-context.service.ts +2 -1
- 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-introspect.service.ts +28 -0
- package/src/services/solid-ts-morph.service.ts +98 -0
- package/src/solid-core.module.ts +21 -2
- package/src/subscribers/audit.subscriber.ts +63 -271
- package/src/subscribers/computed-entity-field.subscriber.ts +3 -3
- package/src/subscribers/created-by-updated-by.subscriber.ts +22 -16
- package/src/transformers/typeorm/local-date-time-transformer.ts +41 -33
- package/src/winston.logger.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.logger.d.ts","sourceRoot":"","sources":["../src/winston.logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"winston.logger.d.ts","sourceRoot":"","sources":["../src/winston.logger.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,IAAI,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGjC,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAGnC,eAAO,MAAM,mBAAmB;;;;CAgC/B,CAAC;AAEF,qBAAa,oBAAqB,YAAW,aAAa;IACT,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE5E,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAM5E,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIhG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAI9F,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAIhE,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI;IAI9D,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI;CAGpE"}
|
package/dist/winston.logger.js
CHANGED
|
@@ -50,8 +50,9 @@ const winston_1 = require("winston");
|
|
|
50
50
|
const common_1 = require("@nestjs/common");
|
|
51
51
|
const nest_winston_1 = require("nest-winston");
|
|
52
52
|
const winston = __importStar(require("winston"));
|
|
53
|
+
const disallow_in_production_decorator_1 = require("./decorators/disallow-in-production.decorator");
|
|
53
54
|
exports.WinstonLoggerConfig = {
|
|
54
|
-
level: 'debug',
|
|
55
|
+
level: process.env.LOG_LEVEL || (process.env.ENV === disallow_in_production_decorator_1.Environment.Production ? 'warn' : 'debug'),
|
|
55
56
|
format: winston.format.combine(winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.printf(({ level, message, timestamp }) => {
|
|
56
57
|
if (!message) {
|
|
57
58
|
return `[${timestamp}] ${level.toUpperCase()}: (No message provided)`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"winston.logger.js","sourceRoot":"","sources":["../src/winston.logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qCAAiC;AACjC,2CAAwC;AACxC,+CAAuD;AACvD,iDAAmC;
|
|
1
|
+
{"version":3,"file":"winston.logger.js","sourceRoot":"","sources":["../src/winston.logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,qCAAiC;AACjC,2CAAwC;AACxC,+CAAuD;AACvD,iDAAmC;AACnC,oGAA4E;AAE/D,QAAA,mBAAmB,GAAG;IAC/B,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,8CAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAC/F,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC1B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EACtC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;QACpD,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,yBAAyB,CAAC;QAC1E,CAAC;QACD,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;IAC/D,CAAC,CAAC,CACL;IACD,UAAU,EAAE;QACR,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC3B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAG1B,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE;gBACpD,OAAO,IAAI,SAAS,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;YAC/D,CAAC,CAAC,CACL;SACJ,CAAC;QACF,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,sBAAsB;SAEnC,CAAC;QACF,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,gBAAgB;YAC1B,KAAK,EAAE,OAAO;SAEjB,CAAC;KACL;CACJ,CAAC;AAEF,IAAa,oBAAoB,GAAjC,MAAa,oBAAoB;IAC7B,YAA8D,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAI,CAAC;IAEjF,QAAQ,CAAC,KAAa,EAAE,UAAkB,EAAE,WAAyB;QACjE,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,gBAAgB,UAAU,EAAE,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IAED,aAAa,CAAC,KAAa,EAAE,KAAa,EAAE,UAAkB,EAAE,WAAyB;QACrF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,KAAK,aAAa,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAC9F,CAAC;IAED,YAAY,CAAC,IAAY,EAAE,KAAa,EAAE,UAAkB,EAAE,WAAyB;QACnF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,eAAe,KAAK,kBAAkB,UAAU,EAAE,CAAC,CAAC;IAC5F,CAAC;IAED,cAAc,CAAC,OAAe,EAAE,WAAyB;QACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,YAAY,CAAC,OAAe,EAAE,WAAyB;QACnD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,GAAG,CAAC,KAAwC,EAAE,OAAY;QACtD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACJ,CAAA;AA5BY,oDAAoB;+BAApB,oBAAoB;IAChB,WAAA,IAAA,eAAM,EAAC,sCAAuB,CAAC,CAAA;qCAA0B,gBAAM;GADnE,oBAAoB,CA4BhC","sourcesContent":["\nimport { Logger as TypeORMLogger, QueryRunner } from 'typeorm';\nimport { Logger } from 'winston';\nimport { Inject } from '@nestjs/common';\nimport { WINSTON_MODULE_PROVIDER } from 'nest-winston';\nimport * as winston from 'winston';\nimport { Environment } from './decorators/disallow-in-production.decorator';\n\nexport const WinstonLoggerConfig = {\n level: process.env.LOG_LEVEL || (process.env.ENV === Environment.Production ? 'warn' : 'debug'),\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.errors({ stack: true }),\n winston.format.printf(({ level, message, timestamp }) => {\n if (!message) {\n return `[${timestamp}] ${level.toUpperCase()}: (No message provided)`;\n }\n return `[${timestamp}] ${level.toUpperCase()}: ${message}`;\n }),\n ),\n transports: [\n new winston.transports.Console({\n format: winston.format.combine(\n // winston.format.colorize(),\n // winston.format.timestamp(),\n winston.format.printf(({ level, message, timestamp }) => {\n return `[${timestamp}] ${level.toUpperCase()}: ${message}`;\n }),\n ),\n }),\n new winston.transports.File({\n filename: 'logs/application.log',\n // format: winston.format.json(),\n }),\n new winston.transports.File({\n filename: 'logs/error.log',\n level: 'error',\n // format: winston.format.json(),\n }),\n ],\n};\n\nexport class WinstonTypeORMLogger implements TypeORMLogger {\n constructor(@Inject(WINSTON_MODULE_PROVIDER) private readonly logger: Logger) { }\n\n logQuery(query: string, parameters?: any[], queryRunner?: QueryRunner): void {\n if (Boolean(process.env.DEFAULT_DATABASE_LOGGING)) {\n this.logger.info(`Query: ${query} Parameters: ${parameters}`);\n }\n }\n\n logQueryError(error: string, query: string, parameters?: any[], queryRunner?: QueryRunner): void {\n this.logger.error(`Query failed: ${error} | Query: ${query} | Parameters: ${parameters}`);\n }\n\n logQuerySlow(time: number, query: string, parameters?: any[], queryRunner?: QueryRunner): void {\n this.logger.warn(`Slow query: ${time}ms | Query: ${query} | Parameters: ${parameters}`);\n }\n\n logSchemaBuild(message: string, queryRunner?: QueryRunner): void {\n this.logger.info(`Schema Build: ${message}`);\n }\n\n logMigration(message: string, queryRunner?: QueryRunner): void {\n this.logger.info(`Migration: ${message}`);\n }\n\n log(level: 'log' | 'info' | 'warn' | 'error', message: any): void {\n this.logger[level](message);\n }\n}"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solidxai/core",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "This module is a NestJS module containing all the required core providers required by a Solid application",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -67,6 +67,7 @@
|
|
|
67
67
|
"passport-jwt": "^4.0.1",
|
|
68
68
|
"passport-local": "^1.0.0",
|
|
69
69
|
"pg": "^8.11.3",
|
|
70
|
+
"qs": "^6.12.0",
|
|
70
71
|
"pluralize": "^8.0.0",
|
|
71
72
|
"puppeteer": "^23.2.0",
|
|
72
73
|
"r2r-js": "^0.4.43",
|
|
@@ -137,6 +138,7 @@
|
|
|
137
138
|
"@types/passport-google-oauth2": "^0.1.8",
|
|
138
139
|
"@types/passport-jwt": "^4.0.1",
|
|
139
140
|
"@types/passport-local": "^1.0.38",
|
|
141
|
+
"@types/qs": "^6.9.15",
|
|
140
142
|
"@types/pluralize": "^0.0.33",
|
|
141
143
|
"@types/supertest": "^2.0.12",
|
|
142
144
|
"@types/uuid": "^9.0.8",
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
DROP PROCEDURE IF EXISTS cleanup_model_metadata;
|
|
2
|
+
|
|
3
|
+
DELIMITER $$
|
|
4
|
+
|
|
5
|
+
CREATE PROCEDURE cleanup_model_metadata(
|
|
6
|
+
IN p_model_singular_name VARCHAR(255),
|
|
7
|
+
IN p_also_drop_model TINYINT(1) -- 0 = false, 1 = true (DEFAULT 0)
|
|
8
|
+
)
|
|
9
|
+
BEGIN
|
|
10
|
+
DECLARE v_model_id INT;
|
|
11
|
+
DECLARE v_controller_name VARCHAR(512);
|
|
12
|
+
|
|
13
|
+
-- Default p_also_drop_model to 0 when NULL is passed
|
|
14
|
+
IF p_also_drop_model IS NULL THEN
|
|
15
|
+
SET p_also_drop_model = 0;
|
|
16
|
+
END IF;
|
|
17
|
+
|
|
18
|
+
--------------------------------------------------------------------
|
|
19
|
+
-- Derive ControllerName from model singular name
|
|
20
|
+
-- e.g. 'city' -> 'CityController'
|
|
21
|
+
-- 'bankIfscMaster' -> 'BankIfscMasterController'
|
|
22
|
+
--------------------------------------------------------------------
|
|
23
|
+
SET v_controller_name = CONCAT(
|
|
24
|
+
UPPER(LEFT(p_model_singular_name, 1)),
|
|
25
|
+
SUBSTR(p_model_singular_name, 2),
|
|
26
|
+
'Controller'
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
SELECT m.id
|
|
30
|
+
INTO v_model_id
|
|
31
|
+
FROM ss_model_metadata AS m
|
|
32
|
+
WHERE m.singular_name = p_model_singular_name
|
|
33
|
+
LIMIT 1;
|
|
34
|
+
|
|
35
|
+
IF v_model_id IS NULL THEN
|
|
36
|
+
SIGNAL SQLSTATE '45000'
|
|
37
|
+
SET MESSAGE_TEXT = CONCAT('CleanupModelMetadata: Model with singular_name "', p_model_singular_name, '" not found.');
|
|
38
|
+
END IF;
|
|
39
|
+
|
|
40
|
+
--------------------------------------------------------------------
|
|
41
|
+
-- Temp tables for IDs (session-scoped, dropped at end of session)
|
|
42
|
+
--------------------------------------------------------------------
|
|
43
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_view_ids;
|
|
44
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_action_ids;
|
|
45
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_permission_ids;
|
|
46
|
+
|
|
47
|
+
CREATE TEMPORARY TABLE tmp_view_ids (id INT PRIMARY KEY);
|
|
48
|
+
CREATE TEMPORARY TABLE tmp_action_ids (id INT PRIMARY KEY);
|
|
49
|
+
CREATE TEMPORARY TABLE tmp_permission_ids (id INT PRIMARY KEY);
|
|
50
|
+
|
|
51
|
+
INSERT INTO tmp_view_ids (id)
|
|
52
|
+
SELECT v.id
|
|
53
|
+
FROM ss_view_metadata AS v
|
|
54
|
+
WHERE v.model_id = v_model_id;
|
|
55
|
+
|
|
56
|
+
INSERT INTO tmp_action_ids (id)
|
|
57
|
+
SELECT a.id
|
|
58
|
+
FROM ss_action_metadata AS a
|
|
59
|
+
WHERE a.model_id = v_model_id;
|
|
60
|
+
|
|
61
|
+
--------------------------------------------------------------------
|
|
62
|
+
-- Collect permissions for this controller:
|
|
63
|
+
-- e.g. CityController.create, CityController.update, etc.
|
|
64
|
+
--------------------------------------------------------------------
|
|
65
|
+
INSERT INTO tmp_permission_ids (id)
|
|
66
|
+
SELECT p.id
|
|
67
|
+
FROM ss_permission_metadata AS p
|
|
68
|
+
WHERE p.name LIKE CONCAT(v_controller_name, '.%');
|
|
69
|
+
|
|
70
|
+
--------------------------------------------------------------------
|
|
71
|
+
-- 1) Delete user-view metadata
|
|
72
|
+
--------------------------------------------------------------------
|
|
73
|
+
DELETE FROM ss_user_view_metadata
|
|
74
|
+
WHERE view_metadata_id IN (SELECT id FROM tmp_view_ids);
|
|
75
|
+
|
|
76
|
+
--------------------------------------------------------------------
|
|
77
|
+
-- 2) Delete menu items linked via action_id
|
|
78
|
+
--------------------------------------------------------------------
|
|
79
|
+
DELETE FROM ss_menu_item_metadata
|
|
80
|
+
WHERE action_id IN (SELECT id FROM tmp_action_ids);
|
|
81
|
+
|
|
82
|
+
--------------------------------------------------------------------
|
|
83
|
+
-- 3) Delete actions
|
|
84
|
+
--------------------------------------------------------------------
|
|
85
|
+
DELETE FROM ss_action_metadata
|
|
86
|
+
WHERE id IN (SELECT id FROM tmp_action_ids);
|
|
87
|
+
|
|
88
|
+
--------------------------------------------------------------------
|
|
89
|
+
-- 4) Delete views
|
|
90
|
+
--------------------------------------------------------------------
|
|
91
|
+
DELETE FROM ss_view_metadata
|
|
92
|
+
WHERE id IN (SELECT id FROM tmp_view_ids);
|
|
93
|
+
|
|
94
|
+
--------------------------------------------------------------------
|
|
95
|
+
-- 5) Delete import transaction error logs for this model's imports
|
|
96
|
+
--------------------------------------------------------------------
|
|
97
|
+
DELETE FROM ss_import_transaction_error_log
|
|
98
|
+
WHERE import_transaction_id IN (
|
|
99
|
+
SELECT it.id
|
|
100
|
+
FROM ss_import_transaction AS it
|
|
101
|
+
WHERE it.model_metadata_id = v_model_id
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
--------------------------------------------------------------------
|
|
105
|
+
-- 6) Delete import transactions linked to the model
|
|
106
|
+
--------------------------------------------------------------------
|
|
107
|
+
DELETE FROM ss_import_transaction
|
|
108
|
+
WHERE model_metadata_id = v_model_id;
|
|
109
|
+
|
|
110
|
+
--------------------------------------------------------------------
|
|
111
|
+
-- 7) Delete permissions for this controller
|
|
112
|
+
-- a) Delete from role-permission join table
|
|
113
|
+
-- b) Delete from permission metadata
|
|
114
|
+
--------------------------------------------------------------------
|
|
115
|
+
DELETE FROM ss_role_metadata_permissions_ss_permission_metadata
|
|
116
|
+
WHERE ss_permission_metadata_id IN (SELECT id FROM tmp_permission_ids);
|
|
117
|
+
|
|
118
|
+
DELETE FROM ss_permission_metadata
|
|
119
|
+
WHERE id IN (SELECT id FROM tmp_permission_ids);
|
|
120
|
+
|
|
121
|
+
--------------------------------------------------------------------
|
|
122
|
+
-- 8) Optionally delete the model row itself (+ fields)
|
|
123
|
+
--------------------------------------------------------------------
|
|
124
|
+
IF p_also_drop_model = 1 THEN
|
|
125
|
+
|
|
126
|
+
-- 8a) Null user_key_field_id pointing to fields of this model
|
|
127
|
+
UPDATE ss_model_metadata AS mm
|
|
128
|
+
SET user_key_field_id = NULL
|
|
129
|
+
WHERE user_key_field_id IN (
|
|
130
|
+
SELECT f.id
|
|
131
|
+
FROM ss_field_metadata AS f
|
|
132
|
+
WHERE f.model_id = v_model_id
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
-- 8b) Null parent_model_id pointing to this model
|
|
136
|
+
UPDATE ss_model_metadata
|
|
137
|
+
SET parent_model_id = NULL
|
|
138
|
+
WHERE parent_model_id = v_model_id;
|
|
139
|
+
|
|
140
|
+
-- 8c) Delete model (fields deleted via ON DELETE CASCADE)
|
|
141
|
+
DELETE FROM ss_model_metadata
|
|
142
|
+
WHERE id = v_model_id;
|
|
143
|
+
|
|
144
|
+
END IF;
|
|
145
|
+
|
|
146
|
+
-- Cleanup temp tables
|
|
147
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_view_ids;
|
|
148
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_action_ids;
|
|
149
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_permission_ids;
|
|
150
|
+
|
|
151
|
+
END$$
|
|
152
|
+
|
|
153
|
+
DELIMITER ;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
DROP PROCEDURE IF EXISTS cleanup_module_metadata;
|
|
2
|
+
|
|
3
|
+
DELIMITER $$
|
|
4
|
+
|
|
5
|
+
CREATE PROCEDURE cleanup_module_metadata(
|
|
6
|
+
IN p_module_name VARCHAR(255),
|
|
7
|
+
IN p_also_drop_module TINYINT(1) -- 0 = false, 1 = true (DEFAULT 0)
|
|
8
|
+
)
|
|
9
|
+
BEGIN
|
|
10
|
+
DECLARE v_module_id INT;
|
|
11
|
+
|
|
12
|
+
-- Default p_also_drop_module to 0 when NULL is passed
|
|
13
|
+
IF p_also_drop_module IS NULL THEN
|
|
14
|
+
SET p_also_drop_module = 0;
|
|
15
|
+
END IF;
|
|
16
|
+
|
|
17
|
+
SELECT m.id
|
|
18
|
+
INTO v_module_id
|
|
19
|
+
FROM ss_module_metadata AS m
|
|
20
|
+
WHERE m.name = p_module_name
|
|
21
|
+
LIMIT 1;
|
|
22
|
+
|
|
23
|
+
IF v_module_id IS NULL THEN
|
|
24
|
+
SIGNAL SQLSTATE '45000'
|
|
25
|
+
SET MESSAGE_TEXT = CONCAT('CleanupModuleMetadata: Module "', p_module_name, '" not found.');
|
|
26
|
+
END IF;
|
|
27
|
+
|
|
28
|
+
----------------------------------------------------------------
|
|
29
|
+
-- 1) Delete menus for this module (children first, then roots)
|
|
30
|
+
----------------------------------------------------------------
|
|
31
|
+
DELETE FROM ss_menu_item_metadata
|
|
32
|
+
WHERE module_id = v_module_id
|
|
33
|
+
AND parent_menu_item_id IS NOT NULL;
|
|
34
|
+
|
|
35
|
+
DELETE FROM ss_menu_item_metadata
|
|
36
|
+
WHERE module_id = v_module_id
|
|
37
|
+
AND parent_menu_item_id IS NULL;
|
|
38
|
+
|
|
39
|
+
----------------------------------------------------------------
|
|
40
|
+
-- 2) Delete actions for this module
|
|
41
|
+
----------------------------------------------------------------
|
|
42
|
+
DELETE FROM ss_action_metadata
|
|
43
|
+
WHERE module_id = v_module_id;
|
|
44
|
+
|
|
45
|
+
----------------------------------------------------------------
|
|
46
|
+
-- 3) Optionally delete the module row itself
|
|
47
|
+
-- (assumes ss_model_metadata.module_id has ON DELETE SET NULL)
|
|
48
|
+
----------------------------------------------------------------
|
|
49
|
+
IF p_also_drop_module = 1 THEN
|
|
50
|
+
DELETE FROM ss_module_metadata
|
|
51
|
+
WHERE id = v_module_id;
|
|
52
|
+
END IF;
|
|
53
|
+
|
|
54
|
+
END$$
|
|
55
|
+
|
|
56
|
+
DELIMITER ;
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
DROP PROCEDURE IF EXISTS cleanup_model_metadata;
|
|
2
|
+
|
|
3
|
+
DELIMITER $$
|
|
4
|
+
|
|
5
|
+
CREATE PROCEDURE cleanup_model_metadata(
|
|
6
|
+
IN p_model_singular_name VARCHAR(255),
|
|
7
|
+
IN p_also_drop_model TINYINT(1) -- 0 = false, 1 = true (DEFAULT 0)
|
|
8
|
+
)
|
|
9
|
+
BEGIN
|
|
10
|
+
DECLARE v_model_id INT;
|
|
11
|
+
DECLARE v_controller_name VARCHAR(512);
|
|
12
|
+
|
|
13
|
+
-- Default p_also_drop_model to 0 when NULL is passed
|
|
14
|
+
IF p_also_drop_model IS NULL THEN
|
|
15
|
+
SET p_also_drop_model = 0;
|
|
16
|
+
END IF;
|
|
17
|
+
|
|
18
|
+
--------------------------------------------------------------------
|
|
19
|
+
-- Derive ControllerName from model singular name
|
|
20
|
+
-- e.g. 'city' -> 'CityController'
|
|
21
|
+
-- 'bankIfscMaster' -> 'BankIfscMasterController'
|
|
22
|
+
--------------------------------------------------------------------
|
|
23
|
+
SET v_controller_name = CONCAT(
|
|
24
|
+
UPPER(LEFT(p_model_singular_name, 1)),
|
|
25
|
+
SUBSTR(p_model_singular_name, 2),
|
|
26
|
+
'Controller'
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
SELECT m.id
|
|
30
|
+
INTO v_model_id
|
|
31
|
+
FROM ss_model_metadata AS m
|
|
32
|
+
WHERE m.singular_name = p_model_singular_name
|
|
33
|
+
LIMIT 1;
|
|
34
|
+
|
|
35
|
+
IF v_model_id IS NULL THEN
|
|
36
|
+
SIGNAL SQLSTATE '45000'
|
|
37
|
+
SET MESSAGE_TEXT = CONCAT('CleanupModelMetadata: Model with singular_name "', p_model_singular_name, '" not found.');
|
|
38
|
+
END IF;
|
|
39
|
+
|
|
40
|
+
--------------------------------------------------------------------
|
|
41
|
+
-- Temp tables for IDs (session-scoped, dropped at end of session)
|
|
42
|
+
--------------------------------------------------------------------
|
|
43
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_view_ids;
|
|
44
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_action_ids;
|
|
45
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_permission_ids;
|
|
46
|
+
|
|
47
|
+
CREATE TEMPORARY TABLE tmp_view_ids (id INT PRIMARY KEY);
|
|
48
|
+
CREATE TEMPORARY TABLE tmp_action_ids (id INT PRIMARY KEY);
|
|
49
|
+
CREATE TEMPORARY TABLE tmp_permission_ids (id INT PRIMARY KEY);
|
|
50
|
+
|
|
51
|
+
INSERT INTO tmp_view_ids (id)
|
|
52
|
+
SELECT v.id
|
|
53
|
+
FROM ss_view_metadata AS v
|
|
54
|
+
WHERE v.model_id = v_model_id;
|
|
55
|
+
|
|
56
|
+
INSERT INTO tmp_action_ids (id)
|
|
57
|
+
SELECT a.id
|
|
58
|
+
FROM ss_action_metadata AS a
|
|
59
|
+
WHERE a.model_id = v_model_id;
|
|
60
|
+
|
|
61
|
+
--------------------------------------------------------------------
|
|
62
|
+
-- Collect permissions for this controller:
|
|
63
|
+
-- e.g. CityController.create, CityController.update, etc.
|
|
64
|
+
--------------------------------------------------------------------
|
|
65
|
+
INSERT INTO tmp_permission_ids (id)
|
|
66
|
+
SELECT p.id
|
|
67
|
+
FROM ss_permission_metadata AS p
|
|
68
|
+
WHERE p.name LIKE CONCAT(v_controller_name, '.%');
|
|
69
|
+
|
|
70
|
+
--------------------------------------------------------------------
|
|
71
|
+
-- 1) Delete user-view metadata
|
|
72
|
+
--------------------------------------------------------------------
|
|
73
|
+
DELETE FROM ss_user_view_metadata
|
|
74
|
+
WHERE view_metadata_id IN (SELECT id FROM tmp_view_ids);
|
|
75
|
+
|
|
76
|
+
--------------------------------------------------------------------
|
|
77
|
+
-- 2) Delete menu items linked via action_id
|
|
78
|
+
--------------------------------------------------------------------
|
|
79
|
+
DELETE FROM ss_menu_item_metadata
|
|
80
|
+
WHERE action_id IN (SELECT id FROM tmp_action_ids);
|
|
81
|
+
|
|
82
|
+
--------------------------------------------------------------------
|
|
83
|
+
-- 3) Delete actions
|
|
84
|
+
--------------------------------------------------------------------
|
|
85
|
+
DELETE FROM ss_action_metadata
|
|
86
|
+
WHERE id IN (SELECT id FROM tmp_action_ids);
|
|
87
|
+
|
|
88
|
+
--------------------------------------------------------------------
|
|
89
|
+
-- 4) Delete views
|
|
90
|
+
--------------------------------------------------------------------
|
|
91
|
+
DELETE FROM ss_view_metadata
|
|
92
|
+
WHERE id IN (SELECT id FROM tmp_view_ids);
|
|
93
|
+
|
|
94
|
+
--------------------------------------------------------------------
|
|
95
|
+
-- 5) Delete import transaction error logs for this model's imports
|
|
96
|
+
--------------------------------------------------------------------
|
|
97
|
+
DELETE FROM ss_import_transaction_error_log
|
|
98
|
+
WHERE import_transaction_id IN (
|
|
99
|
+
SELECT it.id
|
|
100
|
+
FROM ss_import_transaction AS it
|
|
101
|
+
WHERE it.model_metadata_id = v_model_id
|
|
102
|
+
);
|
|
103
|
+
|
|
104
|
+
--------------------------------------------------------------------
|
|
105
|
+
-- 6) Delete import transactions linked to the model
|
|
106
|
+
--------------------------------------------------------------------
|
|
107
|
+
DELETE FROM ss_import_transaction
|
|
108
|
+
WHERE model_metadata_id = v_model_id;
|
|
109
|
+
|
|
110
|
+
--------------------------------------------------------------------
|
|
111
|
+
-- 7) Delete permissions for this controller
|
|
112
|
+
-- a) Delete from role-permission join table
|
|
113
|
+
-- b) Delete from permission metadata
|
|
114
|
+
--------------------------------------------------------------------
|
|
115
|
+
DELETE FROM ss_role_metadata_permissions_ss_permission_metadata
|
|
116
|
+
WHERE ss_permission_metadata_id IN (SELECT id FROM tmp_permission_ids);
|
|
117
|
+
|
|
118
|
+
DELETE FROM ss_permission_metadata
|
|
119
|
+
WHERE id IN (SELECT id FROM tmp_permission_ids);
|
|
120
|
+
|
|
121
|
+
--------------------------------------------------------------------
|
|
122
|
+
-- 8) Optionally delete the model row itself (+ fields)
|
|
123
|
+
--------------------------------------------------------------------
|
|
124
|
+
IF p_also_drop_model = 1 THEN
|
|
125
|
+
|
|
126
|
+
-- 8a) Null user_key_field_id pointing to fields of this model
|
|
127
|
+
UPDATE ss_model_metadata AS mm
|
|
128
|
+
SET user_key_field_id = NULL
|
|
129
|
+
WHERE user_key_field_id IN (
|
|
130
|
+
SELECT f.id
|
|
131
|
+
FROM ss_field_metadata AS f
|
|
132
|
+
WHERE f.model_id = v_model_id
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
-- 8b) Null parent_model_id pointing to this model
|
|
136
|
+
UPDATE ss_model_metadata
|
|
137
|
+
SET parent_model_id = NULL
|
|
138
|
+
WHERE parent_model_id = v_model_id;
|
|
139
|
+
|
|
140
|
+
-- 8c) Delete model (fields deleted via ON DELETE CASCADE)
|
|
141
|
+
DELETE FROM ss_model_metadata
|
|
142
|
+
WHERE id = v_model_id;
|
|
143
|
+
|
|
144
|
+
END IF;
|
|
145
|
+
|
|
146
|
+
-- Cleanup temp tables
|
|
147
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_view_ids;
|
|
148
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_action_ids;
|
|
149
|
+
DROP TEMPORARY TABLE IF EXISTS tmp_permission_ids;
|
|
150
|
+
|
|
151
|
+
END$$
|
|
152
|
+
|
|
153
|
+
DELIMITER ;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
DROP PROCEDURE IF EXISTS cleanup_module_metadata;
|
|
2
|
+
|
|
3
|
+
DELIMITER $$
|
|
4
|
+
|
|
5
|
+
CREATE PROCEDURE cleanup_module_metadata(
|
|
6
|
+
IN p_module_name VARCHAR(255),
|
|
7
|
+
IN p_also_drop_module TINYINT(1) -- 0 = false, 1 = true (DEFAULT 0)
|
|
8
|
+
)
|
|
9
|
+
BEGIN
|
|
10
|
+
DECLARE v_module_id INT;
|
|
11
|
+
|
|
12
|
+
-- Default p_also_drop_module to 0 when NULL is passed
|
|
13
|
+
IF p_also_drop_module IS NULL THEN
|
|
14
|
+
SET p_also_drop_module = 0;
|
|
15
|
+
END IF;
|
|
16
|
+
|
|
17
|
+
SELECT m.id
|
|
18
|
+
INTO v_module_id
|
|
19
|
+
FROM ss_module_metadata AS m
|
|
20
|
+
WHERE m.name = p_module_name
|
|
21
|
+
LIMIT 1;
|
|
22
|
+
|
|
23
|
+
IF v_module_id IS NULL THEN
|
|
24
|
+
SIGNAL SQLSTATE '45000'
|
|
25
|
+
SET MESSAGE_TEXT = CONCAT('CleanupModuleMetadata: Module "', p_module_name, '" not found.');
|
|
26
|
+
END IF;
|
|
27
|
+
|
|
28
|
+
----------------------------------------------------------------
|
|
29
|
+
-- 1) Delete menus for this module (children first, then roots)
|
|
30
|
+
----------------------------------------------------------------
|
|
31
|
+
DELETE FROM ss_menu_item_metadata
|
|
32
|
+
WHERE module_id = v_module_id
|
|
33
|
+
AND parent_menu_item_id IS NOT NULL;
|
|
34
|
+
|
|
35
|
+
DELETE FROM ss_menu_item_metadata
|
|
36
|
+
WHERE module_id = v_module_id
|
|
37
|
+
AND parent_menu_item_id IS NULL;
|
|
38
|
+
|
|
39
|
+
----------------------------------------------------------------
|
|
40
|
+
-- 2) Delete actions for this module
|
|
41
|
+
----------------------------------------------------------------
|
|
42
|
+
DELETE FROM ss_action_metadata
|
|
43
|
+
WHERE module_id = v_module_id;
|
|
44
|
+
|
|
45
|
+
----------------------------------------------------------------
|
|
46
|
+
-- 3) Optionally delete the module row itself
|
|
47
|
+
-- (assumes ss_model_metadata.module_id has ON DELETE SET NULL)
|
|
48
|
+
----------------------------------------------------------------
|
|
49
|
+
IF p_also_drop_module = 1 THEN
|
|
50
|
+
DELETE FROM ss_module_metadata
|
|
51
|
+
WHERE id = v_module_id;
|
|
52
|
+
END IF;
|
|
53
|
+
|
|
54
|
+
END$$
|
|
55
|
+
|
|
56
|
+
DELIMITER ;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Controller, Post, Body, Param, UploadedFiles, UseInterceptors, Put, Get, Query, Delete, Patch } from '@nestjs/common';
|
|
2
|
+
import { AnyFilesInterceptor } from "@nestjs/platform-express";
|
|
3
|
+
import { ApiBearerAuth, ApiQuery, ApiTags } from '@nestjs/swagger';
|
|
4
|
+
import { CreateDashboardLayoutDto } from 'src/dtos/create-dashboard-layout.dto';
|
|
5
|
+
import { UpdateDashboardLayoutDto } from 'src/dtos/update-dashboard-layout.dto';
|
|
6
|
+
import { DashboardLayoutService } from 'src/services/dashboard-layout.service';
|
|
7
|
+
|
|
8
|
+
enum ShowSoftDeleted {
|
|
9
|
+
INCLUSIVE = "inclusive",
|
|
10
|
+
EXCLUSIVE = "exclusive",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@ApiTags('Solid Core')
|
|
14
|
+
@Controller('dashboard-layout')
|
|
15
|
+
export class DashboardLayoutController {
|
|
16
|
+
constructor(private readonly service: DashboardLayoutService) { }
|
|
17
|
+
|
|
18
|
+
@ApiBearerAuth("jwt")
|
|
19
|
+
@Post()
|
|
20
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
21
|
+
create(@Body() createDto: CreateDashboardLayoutDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
22
|
+
return this.service.create(createDto, files);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@ApiBearerAuth("jwt")
|
|
26
|
+
@Post('/bulk')
|
|
27
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
28
|
+
insertMany(@Body() createDtos: CreateDashboardLayoutDto[], @UploadedFiles() filesArray: Express.Multer.File[][] = []) {
|
|
29
|
+
return this.service.insertMany(createDtos, filesArray);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@ApiBearerAuth("jwt")
|
|
33
|
+
@Post('/upsert-user-dashboard-layout')
|
|
34
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
35
|
+
upsertUserDashboardLayout(@Body() createDtos: CreateDashboardLayoutDto) {
|
|
36
|
+
return this.service.upsertUserDashboardLayout(createDtos);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
@ApiBearerAuth("jwt")
|
|
41
|
+
@Put(':id')
|
|
42
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
43
|
+
update(@Param('id') id: number, @Body() updateDto: UpdateDashboardLayoutDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
44
|
+
return this.service.update(id, updateDto, files);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@ApiBearerAuth("jwt")
|
|
48
|
+
@Patch(':id')
|
|
49
|
+
@UseInterceptors(AnyFilesInterceptor())
|
|
50
|
+
partialUpdate(@Param('id') id: number, @Body() updateDto: UpdateDashboardLayoutDto, @UploadedFiles() files: Array<Express.Multer.File>) {
|
|
51
|
+
return this.service.update(id, updateDto, files, true);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@ApiBearerAuth("jwt")
|
|
55
|
+
@Post('/bulk-recover')
|
|
56
|
+
async recoverMany(@Body() ids: number[]) {
|
|
57
|
+
return this.service.recoverMany(ids);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
@ApiBearerAuth("jwt")
|
|
61
|
+
@Get('/user-dashboard-layout/:dashboardId')
|
|
62
|
+
async getUserDashboardLayoutByDashboardId(@Param('dashboardId') dashboardId: number) {
|
|
63
|
+
return this.service.getUserDashboardLayoutByDashboardId(dashboardId);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@ApiBearerAuth("jwt")
|
|
67
|
+
@Get('/recover/:id')
|
|
68
|
+
async recover(@Param('id') id: number) {
|
|
69
|
+
return this.service.recover(id);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@ApiBearerAuth("jwt")
|
|
73
|
+
@ApiQuery({ name: 'showSoftDeleted', required: false, enum: ShowSoftDeleted })
|
|
74
|
+
@ApiQuery({ name: 'limit', required: false, type: Number })
|
|
75
|
+
@ApiQuery({ name: 'offset', required: false, type: Number })
|
|
76
|
+
@ApiQuery({ name: 'fields', required: false, type: Array })
|
|
77
|
+
@ApiQuery({ name: 'sort', required: false, type: Array })
|
|
78
|
+
@ApiQuery({ name: 'groupBy', required: false, type: Array })
|
|
79
|
+
@ApiQuery({ name: 'populate', required: false, type: Array })
|
|
80
|
+
@ApiQuery({ name: 'populateMedia', required: false, type: Array })
|
|
81
|
+
@ApiQuery({ name: 'filters', required: false, type: Array })
|
|
82
|
+
@Get()
|
|
83
|
+
async findMany(@Query() query: any) {
|
|
84
|
+
return this.service.find(query);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
@ApiBearerAuth("jwt")
|
|
88
|
+
@Get(':id')
|
|
89
|
+
async findOne(@Param('id') id: string, @Query() query: any) {
|
|
90
|
+
return this.service.findOne(+id, query);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
@ApiBearerAuth("jwt")
|
|
94
|
+
@Delete('/bulk')
|
|
95
|
+
async deleteMany(@Body() ids: number[]) {
|
|
96
|
+
return this.service.deleteMany(ids);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
@ApiBearerAuth("jwt")
|
|
100
|
+
@Delete(':id')
|
|
101
|
+
async delete(@Param('id') id: number) {
|
|
102
|
+
return this.service.delete(id);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
2
|
+
import { IsString } from 'class-validator';
|
|
3
|
+
import { IsNotEmpty, IsOptional, IsInt } from 'class-validator';
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
export class CreateDashboardLayoutDto {
|
|
7
|
+
@IsNotEmpty()
|
|
8
|
+
@IsString()
|
|
9
|
+
@ApiProperty()
|
|
10
|
+
layout: string;
|
|
11
|
+
|
|
12
|
+
@IsOptional()
|
|
13
|
+
@IsInt()
|
|
14
|
+
@ApiProperty({ description: "Related Dashboard Model" })
|
|
15
|
+
dashboardId: number;
|
|
16
|
+
|
|
17
|
+
@IsString()
|
|
18
|
+
@IsOptional()
|
|
19
|
+
@ApiProperty({ description: "Related Dashboard Model" })
|
|
20
|
+
dashboardUserKey: string;
|
|
21
|
+
|
|
22
|
+
@IsOptional()
|
|
23
|
+
@IsInt()
|
|
24
|
+
@ApiProperty()
|
|
25
|
+
userId: number;
|
|
26
|
+
|
|
27
|
+
@IsString()
|
|
28
|
+
@IsOptional()
|
|
29
|
+
@ApiProperty()
|
|
30
|
+
userUserKey: string;
|
|
31
|
+
}
|
|
@@ -53,4 +53,8 @@ export class CreateDashboardVariableDto {
|
|
|
53
53
|
@IsString()
|
|
54
54
|
@ApiProperty({ description: "This is the default operator for this variable when it is rendered at runtime. It can be a static value for this variable when it is rendered at runtime." })
|
|
55
55
|
defaultOperator: string;
|
|
56
|
+
@IsString()
|
|
57
|
+
@IsOptional()
|
|
58
|
+
@ApiProperty()
|
|
59
|
+
externalId: string;
|
|
56
60
|
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { IsInt, IsOptional, IsString, IsNotEmpty } from 'class-validator';
|
|
2
|
+
import { ApiProperty } from '@nestjs/swagger';
|
|
3
|
+
|
|
4
|
+
export class UpdateDashboardLayoutDto {
|
|
5
|
+
@IsNotEmpty()
|
|
6
|
+
@IsOptional()
|
|
7
|
+
@IsString()
|
|
8
|
+
@ApiProperty()
|
|
9
|
+
layout: string;
|
|
10
|
+
|
|
11
|
+
@IsOptional()
|
|
12
|
+
@IsInt()
|
|
13
|
+
@ApiProperty({ description: "Related Dashboard Model" })
|
|
14
|
+
dashboardId: number;
|
|
15
|
+
|
|
16
|
+
@IsString()
|
|
17
|
+
@IsOptional()
|
|
18
|
+
@ApiProperty({ description: "Related Dashboard Model" })
|
|
19
|
+
dashboardUserKey: string;
|
|
20
|
+
|
|
21
|
+
@IsOptional()
|
|
22
|
+
@IsInt()
|
|
23
|
+
@ApiProperty()
|
|
24
|
+
userId: number;
|
|
25
|
+
|
|
26
|
+
@IsString()
|
|
27
|
+
@IsOptional()
|
|
28
|
+
@ApiProperty()
|
|
29
|
+
userUserKey: string;
|
|
30
|
+
}
|