@solidstarters/solid-core 1.2.200 → 1.2.201
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/commands/fixtures/fixtures-setup.command.d.ts +15 -0
- package/dist/commands/fixtures/fixtures-setup.command.d.ts.map +1 -0
- package/dist/commands/fixtures/fixtures-setup.command.js +58 -0
- package/dist/commands/fixtures/fixtures-setup.command.js.map +1 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.d.ts +16 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.d.ts.map +1 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.js +59 -0
- package/dist/commands/fixtures/fixtures-tear-down.command.js.map +1 -0
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +4 -0
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/constants/error-messages.d.ts +2 -0
- package/dist/constants/error-messages.d.ts.map +1 -1
- package/dist/constants/error-messages.js +4 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/controllers/model-sequence.controller.d.ts +43 -0
- package/dist/controllers/model-sequence.controller.d.ts.map +1 -0
- package/dist/controllers/model-sequence.controller.js +179 -0
- package/dist/controllers/model-sequence.controller.js.map +1 -0
- package/dist/controllers/setting.controller.d.ts +1 -0
- package/dist/controllers/setting.controller.d.ts.map +1 -1
- package/dist/controllers/setting.controller.js +15 -0
- package/dist/controllers/setting.controller.js.map +1 -1
- package/dist/dtos/basic-filters.dto.d.ts +3 -1
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js +8 -2
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/basic-group-filters.dto.d.ts +6 -0
- package/dist/dtos/basic-group-filters.dto.d.ts.map +1 -0
- package/dist/dtos/basic-group-filters.dto.js +46 -0
- package/dist/dtos/basic-group-filters.dto.js.map +1 -0
- package/dist/dtos/create-field-metadata.dto.js +2 -2
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-model-sequence.dto.d.ts +14 -0
- package/dist/dtos/create-model-sequence.dto.d.ts.map +1 -0
- package/dist/dtos/create-model-sequence.dto.js +90 -0
- package/dist/dtos/create-model-sequence.dto.js.map +1 -0
- package/dist/dtos/create-role-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-role-metadata.dto.js +1 -0
- package/dist/dtos/create-role-metadata.dto.js.map +1 -1
- package/dist/dtos/get-mcp-url.dto.d.ts +5 -0
- package/dist/dtos/get-mcp-url.dto.d.ts.map +1 -0
- package/dist/dtos/get-mcp-url.dto.js +31 -0
- package/dist/dtos/get-mcp-url.dto.js.map +1 -0
- package/dist/dtos/resolve-s3-url.dto.d.ts +5 -5
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -1
- package/dist/dtos/resolve-s3-url.dto.js +7 -7
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -1
- package/dist/dtos/update-model-sequence.dto.d.ts +15 -0
- package/dist/dtos/update-model-sequence.dto.d.ts.map +1 -0
- package/dist/dtos/update-model-sequence.dto.js +94 -0
- package/dist/dtos/update-model-sequence.dto.js.map +1 -0
- package/dist/entities/common.entity.d.ts.map +1 -1
- package/dist/entities/common.entity.js +1 -0
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/legacy-common.entity.d.ts.map +1 -1
- package/dist/entities/legacy-common.entity.js +1 -0
- package/dist/entities/legacy-common.entity.js.map +1 -1
- package/dist/entities/model-sequence.entity.d.ts +15 -0
- package/dist/entities/model-sequence.entity.d.ts.map +1 -0
- package/dist/entities/model-sequence.entity.js +67 -0
- package/dist/entities/model-sequence.entity.js.map +1 -0
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js +13 -2
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js +4 -9
- package/dist/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js +7 -8
- package/dist/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts +0 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js +4 -9
- package/dist/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.js.map +1 -1
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +6 -2
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.d.ts +1 -0
- package/dist/helpers/module-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js +9 -0
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/helpers/module.helper.d.ts +1 -0
- package/dist/helpers/module.helper.d.ts.map +1 -1
- package/dist/helpers/module.helper.js +29 -3
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +11 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts +1 -0
- package/dist/jobs/computed-field-evaluation-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/computed-field-evaluation-subscriber.service.js +16 -4
- package/dist/jobs/computed-field-evaluation-subscriber.service.js.map +1 -1
- package/dist/repository/media.repository.d.ts.map +1 -1
- package/dist/repository/media.repository.js +4 -0
- package/dist/repository/media.repository.js.map +1 -1
- package/dist/repository/model-sequence.repository.d.ts +14 -0
- package/dist/repository/model-sequence.repository.d.ts.map +1 -0
- package/dist/repository/model-sequence.repository.js +103 -0
- package/dist/repository/model-sequence.repository.js.map +1 -0
- package/dist/seeders/module-metadata-seeder.service.d.ts +7 -12
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +64 -26
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +343 -27
- package/dist/seeders/system-fields-seeder.service.d.ts +1 -0
- package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
- package/dist/seeders/system-fields-seeder.service.js +11 -2
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/action-metadata.service.d.ts.map +1 -1
- package/dist/services/action-metadata.service.js +1 -0
- package/dist/services/action-metadata.service.js.map +1 -1
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +1 -0
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +22 -14
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message-details.service.d.ts.map +1 -1
- package/dist/services/chatter-message-details.service.js +1 -0
- package/dist/services/chatter-message-details.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +7 -3
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js +7 -5
- package/dist/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.js.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +15 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +72 -0
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -0
- package/dist/services/crud-helper.service.d.ts +23 -6
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +257 -45
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +3 -1
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +53 -24
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/database/database-bootstrap.service.d.ts +12 -0
- package/dist/services/database/database-bootstrap.service.d.ts.map +1 -0
- package/dist/services/database/database-bootstrap.service.js +115 -0
- package/dist/services/database/database-bootstrap.service.js.map +1 -0
- package/dist/services/email-template.service.d.ts +7 -7
- package/dist/services/email-template.service.d.ts.map +1 -1
- package/dist/services/email-template.service.js +8 -7
- package/dist/services/email-template.service.js.map +1 -1
- package/dist/services/excel.service.d.ts +10 -0
- package/dist/services/excel.service.d.ts.map +1 -1
- package/dist/services/excel.service.js +100 -0
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts +4 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +35 -30
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file.service.d.ts +1 -0
- package/dist/services/file.service.d.ts.map +1 -1
- package/dist/services/file.service.js +9 -0
- package/dist/services/file.service.js.map +1 -1
- package/dist/services/fixtures.service.d.ts +13 -0
- package/dist/services/fixtures.service.d.ts.map +1 -0
- package/dist/services/fixtures.service.js +95 -0
- package/dist/services/fixtures.service.js.map +1 -0
- package/dist/services/genai/ingest-metadata.service.d.ts.map +1 -1
- package/dist/services/genai/ingest-metadata.service.js +1 -1
- package/dist/services/genai/ingest-metadata.service.js.map +1 -1
- package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
- package/dist/services/import-transaction-error-log.service.js +1 -0
- package/dist/services/import-transaction-error-log.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +7 -1
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.d.ts +2 -2
- package/dist/services/list-of-values.service.d.ts.map +1 -1
- package/dist/services/list-of-values.service.js +2 -1
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/locale.service.d.ts.map +1 -1
- package/dist/services/locale.service.js +1 -0
- package/dist/services/locale.service.js.map +1 -1
- package/dist/services/mail/smtp-email.service.js +0 -1
- package/dist/services/mail/smtp-email.service.js.map +1 -1
- package/dist/services/media.service.d.ts +3 -3
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +6 -4
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +17 -6
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.d.ts.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +0 -13
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +4 -0
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +2 -42
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/model-sequence.service.d.ts +23 -0
- package/dist/services/model-sequence.service.d.ts.map +1 -0
- package/dist/services/model-sequence.service.js +55 -0
- package/dist/services/model-sequence.service.js.map +1 -0
- package/dist/services/module-metadata.service.d.ts +1 -0
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +35 -1
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +5 -5
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +6 -5
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +2 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +2 -2
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +1 -0
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +6 -6
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +8 -8
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +4 -0
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/security-rule.service.d.ts.map +1 -1
- package/dist/services/security-rule.service.js +1 -0
- package/dist/services/security-rule.service.js.map +1 -1
- package/dist/services/selection-providers/list-of-models-selection-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/list-of-models-selection-provider.service.js +4 -0
- package/dist/services/selection-providers/list-of-models-selection-provider.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +7 -5
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +26 -4
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms-template.service.d.ts +7 -7
- package/dist/services/sms-template.service.d.ts.map +1 -1
- package/dist/services/sms-template.service.js +8 -7
- package/dist/services/sms-template.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +4 -13
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +4 -22
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.js +2 -2
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/services/user-activity-history.service.d.ts.map +1 -1
- package/dist/services/user-activity-history.service.js +1 -0
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/user-view-metadata.service.d.ts.map +1 -1
- package/dist/services/user-view-metadata.service.js +3 -2
- package/dist/services/user-view-metadata.service.js.map +1 -1
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +1 -0
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +3 -1
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core-cli-db.module.d.ts.map +1 -1
- package/dist/solid-core-cli-db.module.js +5 -2
- package/dist/solid-core-cli-db.module.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +18 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +5 -1
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +4 -2
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +53 -12
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts +5 -0
- package/dist/transformers/typeorm/local-date-time-transformer.d.ts.map +1 -0
- package/dist/transformers/typeorm/local-date-time-transformer.js +26 -0
- package/dist/transformers/typeorm/local-date-time-transformer.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/docs/grouping-enhancements.md +89 -0
- package/package.json +1 -1
- package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
- package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
- package/src/commands/refresh-model.command.ts +3 -1
- package/src/constants/error-messages.ts +7 -1
- package/src/controllers/model-sequence.controller.ts +93 -0
- package/src/controllers/setting.controller.ts +33 -21
- package/src/dtos/basic-filters.dto.ts +6 -1
- package/src/dtos/basic-group-filters.dto.ts +23 -0
- package/src/dtos/create-field-metadata.dto.ts +1 -1
- package/src/dtos/create-model-sequence.dto.ts +51 -0
- package/src/dtos/create-role-metadata.dto.ts +16 -3
- package/src/dtos/get-mcp-url.dto.ts +13 -0
- package/src/dtos/resolve-s3-url.dto.ts +9 -11
- package/src/dtos/update-model-sequence.dto.ts +53 -0
- package/src/entities/common.entity.ts +2 -2
- package/src/entities/legacy-common.entity.ts +2 -1
- package/src/entities/model-sequence.entity.ts +32 -0
- package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +18 -5
- package/src/helpers/field-crud-managers/ManyToManyRelationFieldCrudManager.ts +9 -9
- package/src/helpers/field-crud-managers/ManyToOneRelationFieldCrudManager.ts +16 -8
- package/src/helpers/field-crud-managers/OneToManyRelationFieldCrudManager.ts +9 -9
- package/src/helpers/model-metadata-helper.service.ts +6 -4
- package/src/helpers/module-metadata-helper.service.ts +18 -1
- package/src/helpers/module.helper.ts +40 -5
- package/src/helpers/solid-registry.ts +14 -0
- package/src/index.ts +3 -1
- package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
- package/src/repository/media.repository.ts +3 -2
- package/src/repository/model-sequence.repository.ts +97 -0
- package/src/seeders/module-metadata-seeder.service.ts +103 -29
- package/src/seeders/seed-data/solid-core-metadata.json +343 -27
- package/src/seeders/system-fields-seeder.service.ts +6 -2
- package/src/services/action-metadata.service.ts +3 -2
- package/src/services/ai-interaction.service.ts +2 -1
- package/src/services/authentication.service.ts +46 -14
- package/src/services/chatter-message-details.service.ts +2 -1
- package/src/services/chatter-message.service.ts +10 -4
- package/src/services/computed-fields/entity/alpha-num-external-id-computed-field-provider.ts +8 -7
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
- package/src/services/crud-helper.service.ts +287 -49
- package/src/services/crud.service.ts +83 -32
- package/src/services/database/database-bootstrap.service.ts +91 -0
- package/src/services/email-template.service.ts +11 -13
- package/src/services/excel.service.ts +146 -3
- package/src/services/field-metadata.service.ts +102 -55
- package/src/services/file.service.ts +9 -0
- package/src/services/fixtures.service.ts +108 -0
- package/src/services/genai/ingest-metadata.service.ts +4 -3
- package/src/services/import-transaction-error-log.service.ts +2 -1
- package/src/services/import-transaction.service.ts +8 -4
- package/src/services/list-of-values.service.ts +4 -4
- package/src/services/locale.service.ts +2 -1
- package/src/services/mail/smtp-email.service.ts +1 -1
- package/src/services/media.service.ts +10 -11
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +22 -7
- package/src/services/mediaStorageProviders/file-storage-provider.ts +18 -13
- package/src/services/menu-item-metadata.service.ts +6 -2
- package/src/services/model-metadata.service.ts +50 -44
- package/src/services/model-sequence.service.ts +33 -0
- package/src/services/module-metadata.service.ts +49 -2
- package/src/services/permission-metadata.service.ts +8 -9
- package/src/services/queues/database-subscriber.service.ts +3 -1
- package/src/services/queues/rabbitmq-subscriber.service.ts +4 -2
- package/src/services/role-metadata.service.ts +1 -0
- package/src/services/scheduled-job.service.ts +9 -9
- package/src/services/scheduled-jobs/scheduler.service.ts +5 -0
- package/src/services/security-rule.service.ts +1 -0
- package/src/services/selection-providers/list-of-models-selection-provider.service.ts +5 -2
- package/src/services/setting.service.ts +33 -6
- package/src/services/sms-template.service.ts +11 -13
- package/src/services/solid-introspect.service.ts +6 -19
- package/src/services/solid-ts-morph.service.ts +2 -2
- package/src/services/user-activity-history.service.ts +3 -2
- package/src/services/user-view-metadata.service.ts +4 -3
- package/src/services/user.service.ts +2 -1
- package/src/services/view-metadata.service.ts +5 -4
- package/src/solid-core-cli-db.module.ts +5 -4
- package/src/solid-core.module.ts +18 -0
- package/src/subscribers/audit.subscriber.ts +3 -2
- package/src/subscribers/computed-entity-field.subscriber.ts +60 -17
- package/src/transformers/typeorm/local-date-time-transformer.ts +30 -0
- /package/sql/{mssql → default/mssql}/proc_CleanupModelMetadata.sql +0 -0
- /package/sql/{mssql → default/mssql}/proc_CleanupModuleMetadata.sql +0 -0
- /package/sql/{mssql/scratchpad.sql → default/mssql/scratchpad.sql.txt} +0 -0
- /package/sql/{postgres → default/postgres}/proc_CleanupModelMetadata.sql +0 -0
- /package/sql/{postgres → default/postgres}/proc_CleanupModuleMetadata.sql +0 -0
- /package/sql/{postgres/scratchpad.sql → default/postgres/scratchpad.sql.txt} +0 -0
|
@@ -22,9 +22,10 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
22
22
|
) { }
|
|
23
23
|
|
|
24
24
|
async retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
25
|
-
if (!(entity instanceof CommonEntity)) {
|
|
26
|
-
|
|
27
|
-
}
|
|
25
|
+
// if (!(entity instanceof CommonEntity)) {
|
|
26
|
+
// throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
27
|
+
// }
|
|
28
|
+
//@ts-ignore
|
|
28
29
|
const media = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
|
|
29
30
|
// Add the full URL to the media
|
|
30
31
|
media.forEach(m => {
|
|
@@ -34,9 +35,9 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
34
35
|
}
|
|
35
36
|
|
|
36
37
|
async store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
37
|
-
if (!(entity instanceof CommonEntity)) {
|
|
38
|
-
|
|
39
|
-
}
|
|
38
|
+
// if (!(entity instanceof CommonEntity)) {
|
|
39
|
+
// throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
40
|
+
// }
|
|
40
41
|
const result: Media[] = [];
|
|
41
42
|
for (const file of files) {
|
|
42
43
|
// Store the file in the configured file storage directory
|
|
@@ -46,7 +47,8 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
46
47
|
|
|
47
48
|
// Create an entry in the media table
|
|
48
49
|
const mediaEntity = await this.mediaRepository.createMedia({
|
|
49
|
-
|
|
50
|
+
//@ts-ignore
|
|
51
|
+
entityId: entity.id,
|
|
50
52
|
modelMetadataId: mediaFieldMetadata.model.id,
|
|
51
53
|
relativeUri: this.getFileName(file),
|
|
52
54
|
mimeType: file.mimetype,
|
|
@@ -62,15 +64,16 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
62
64
|
}
|
|
63
65
|
|
|
64
66
|
async storeStreams(streamPairs: [Readable, string][], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
65
|
-
if (!(entity instanceof CommonEntity)) {
|
|
66
|
-
|
|
67
|
-
}
|
|
67
|
+
// if (!(entity instanceof CommonEntity)) {
|
|
68
|
+
// throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
69
|
+
// }
|
|
68
70
|
const result: Media[] = [];
|
|
69
71
|
for (const pair of streamPairs) {
|
|
70
72
|
const stream = pair[0];
|
|
71
73
|
const fileName = pair[1];
|
|
72
74
|
this.fileService.writeStreamToFile(stream, this.getFullFilePath(fileName));
|
|
73
75
|
const mediaEntity = await this.mediaRepository.createMedia({
|
|
76
|
+
//@ts-ignore
|
|
74
77
|
entityId: entity.id,
|
|
75
78
|
modelMetadataId: mediaFieldMetadata.model.id,
|
|
76
79
|
relativeUri: fileName,
|
|
@@ -83,10 +86,12 @@ export class FileStorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
83
86
|
}
|
|
84
87
|
|
|
85
88
|
async delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void> {
|
|
86
|
-
if (!(entity instanceof CommonEntity)) {
|
|
87
|
-
|
|
88
|
-
}
|
|
89
|
+
// if (!(entity instanceof CommonEntity)) {
|
|
90
|
+
// throw new Error("Entity must be an instance of CommonEntity"); //FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
91
|
+
// }
|
|
92
|
+
//@ts-ignore
|
|
89
93
|
const existingMedia = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
|
|
94
|
+
//@ts-ignore
|
|
90
95
|
this.mediaRepository.deleteByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
|
|
91
96
|
existingMedia.forEach(media => {
|
|
92
97
|
this.fileService.deleteFile(this.getFullFilePath(media.relativeUri));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
1
|
+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
|
|
2
2
|
import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
|
|
3
3
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
4
|
-
import { EntityManager, Repository } from 'typeorm';
|
|
4
|
+
import { EntityManager, In, Repository } from 'typeorm';
|
|
5
5
|
import { CRUDService } from 'src/services/crud.service';
|
|
6
6
|
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
7
7
|
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
@@ -21,6 +21,7 @@ import { SavedFiltersRepository } from 'src/repository/saved-filters.repository'
|
|
|
21
21
|
@Injectable()
|
|
22
22
|
export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
23
23
|
constructor(
|
|
24
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
24
25
|
readonly modelMetadataService: ModelMetadataService,
|
|
25
26
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
26
27
|
readonly configService: ConfigService,
|
|
@@ -165,6 +166,9 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
|
165
166
|
if (!i.parentMenuItem) {
|
|
166
167
|
return true
|
|
167
168
|
} else {
|
|
169
|
+
if(i.action.type === 'custom'){
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
168
172
|
return this.crudHelperService.hasReadPermissionOnModel(activeUser, i.action.model.singularName)
|
|
169
173
|
}
|
|
170
174
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
1
|
+
import { BadRequestException, forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
2
2
|
import { InjectDataSource } from '@nestjs/typeorm';
|
|
3
3
|
import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
|
|
4
4
|
import { DataSource, EntityManager, In, Repository, SelectQueryBuilder } from 'typeorm';
|
|
@@ -39,6 +39,7 @@ export class ModelMetadataService {
|
|
|
39
39
|
// private readonly modelMetadataRepo: Repository<ModelMetadata>,
|
|
40
40
|
// @InjectRepository(FieldMetadata)
|
|
41
41
|
// private readonly fieldMetadataRepo: Repository<FieldMetadata>,
|
|
42
|
+
@Inject(forwardRef(() => ModelMetadataRepository))
|
|
42
43
|
private readonly modelMetadataRepo: ModelMetadataRepository,
|
|
43
44
|
private readonly fieldMetadataRepo: FieldMetadataRepository,
|
|
44
45
|
private readonly schematicService: SchematicService,
|
|
@@ -610,57 +611,62 @@ export class ModelMetadataService {
|
|
|
610
611
|
}
|
|
611
612
|
}
|
|
612
613
|
|
|
614
|
+
await this.dataSource.query(
|
|
615
|
+
`CALL cleanup_model_metadata($1, $2)`,
|
|
616
|
+
[modelEntity.singularName, true],
|
|
617
|
+
);
|
|
618
|
+
|
|
613
619
|
// Delete the permissions, menu, actions & views related to this model.
|
|
614
|
-
const controllerName = `${classify(modelEntity.singularName)}Controller`;
|
|
615
|
-
const permissionNames = [
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
];
|
|
627
|
-
const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
|
|
628
|
-
const permissionsToDelete = await permissionsRepo.find({
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
});
|
|
620
|
+
// const controllerName = `${classify(modelEntity.singularName)}Controller`;
|
|
621
|
+
// const permissionNames = [
|
|
622
|
+
// `${controllerName}.delete`,
|
|
623
|
+
// `${controllerName}.deleteMany`,
|
|
624
|
+
// `${controllerName}.findOne`,
|
|
625
|
+
// `${controllerName}.findMany`,
|
|
626
|
+
// `${controllerName}.recover`,
|
|
627
|
+
// `${controllerName}.recoverMany`,
|
|
628
|
+
// `${controllerName}.partialUpdate`,
|
|
629
|
+
// `${controllerName}.update`,
|
|
630
|
+
// `${controllerName}.insertMany`,
|
|
631
|
+
// `${controllerName}.create`,
|
|
632
|
+
// ];
|
|
633
|
+
// const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
|
|
634
|
+
// const permissionsToDelete = await permissionsRepo.find({
|
|
635
|
+
// where: { name: In(permissionNames) },
|
|
636
|
+
// relations: ['roles'],
|
|
637
|
+
// });
|
|
632
638
|
|
|
633
639
|
// Remove role associations first
|
|
634
|
-
for (const permission of permissionsToDelete) {
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
}
|
|
640
|
+
// for (const permission of permissionsToDelete) {
|
|
641
|
+
// if (permission.roles?.length) {
|
|
642
|
+
// await this.dataSource
|
|
643
|
+
// .createQueryBuilder()
|
|
644
|
+
// .relation(PermissionMetadata, 'roles')
|
|
645
|
+
// .of(permission) // permission instance or its ID
|
|
646
|
+
// .remove(permission.roles); // remove all linked roles
|
|
647
|
+
// }
|
|
648
|
+
// }
|
|
643
649
|
|
|
644
|
-
await permissionsRepo.remove(permissionsToDelete);
|
|
650
|
+
// await permissionsRepo.remove(permissionsToDelete);
|
|
645
651
|
|
|
646
652
|
// Delete actions
|
|
647
|
-
const actionRepo = this.dataSource.getRepository(ActionMetadata);
|
|
648
|
-
const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
|
|
649
|
-
await actionRepo.delete({ model: { id: modelEntity.id } });
|
|
650
|
-
|
|
651
|
-
// Delete menu items
|
|
652
|
-
const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
|
|
653
|
-
if (action) {
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
}
|
|
653
|
+
// const actionRepo = this.dataSource.getRepository(ActionMetadata);
|
|
654
|
+
// const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
|
|
655
|
+
// await actionRepo.delete({ model: { id: modelEntity.id } });
|
|
656
|
+
|
|
657
|
+
// // Delete menu items
|
|
658
|
+
// const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
|
|
659
|
+
// if (action) {
|
|
660
|
+
// const menuItems = await menuItemRepo.find({ where: { action: { id: action.id } } });
|
|
661
|
+
// for (let i = 0; i < menuItems.length; i++) {
|
|
662
|
+
// const menuItem = menuItems[i];
|
|
663
|
+
// await menuItemRepo.remove(menuItem);
|
|
664
|
+
// }
|
|
665
|
+
// }
|
|
660
666
|
|
|
661
667
|
// Delete view
|
|
662
|
-
const viewRepo = this.dataSource.getRepository(ViewMetadata);
|
|
663
|
-
await viewRepo.delete({ model: { id: modelEntity.id } })
|
|
668
|
+
// const viewRepo = this.dataSource.getRepository(ViewMetadata);
|
|
669
|
+
// await viewRepo.delete({ model: { id: modelEntity.id } })
|
|
664
670
|
|
|
665
671
|
// <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic
|
|
666
672
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
|
|
3
|
+
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
4
|
+
import { EntityManager, Repository } from 'typeorm';
|
|
5
|
+
|
|
6
|
+
import { CRUDService } from 'src/services/crud.service';
|
|
7
|
+
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
8
|
+
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
9
|
+
import { ConfigService } from '@nestjs/config';
|
|
10
|
+
import { FileService } from 'src/services/file.service';
|
|
11
|
+
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
12
|
+
|
|
13
|
+
import { ModelSequence } from '../entities/model-sequence.entity';
|
|
14
|
+
import { ModelSequenceRepository } from '../repository/model-sequence.repository';
|
|
15
|
+
|
|
16
|
+
@Injectable()
|
|
17
|
+
export class ModelSequenceService extends CRUDService<ModelSequence>{
|
|
18
|
+
constructor(
|
|
19
|
+
readonly modelMetadataService: ModelMetadataService,
|
|
20
|
+
readonly moduleMetadataService: ModuleMetadataService,
|
|
21
|
+
readonly configService: ConfigService,
|
|
22
|
+
readonly fileService: FileService,
|
|
23
|
+
readonly discoveryService: DiscoveryService,
|
|
24
|
+
readonly crudHelperService: CrudHelperService,
|
|
25
|
+
@InjectEntityManager()
|
|
26
|
+
readonly entityManager: EntityManager,
|
|
27
|
+
readonly repo: ModelSequenceRepository,
|
|
28
|
+
readonly moduleRef: ModuleRef
|
|
29
|
+
|
|
30
|
+
) {
|
|
31
|
+
super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService,entityManager, repo, 'modelSequence', 'solid-core', moduleRef);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -4,7 +4,7 @@ import { DataSource, EntityManager, Repository, SelectQueryBuilder } from 'typeo
|
|
|
4
4
|
import { CreateModuleMetadataDto } from '../dtos/create-module-metadata.dto';
|
|
5
5
|
import { ModuleMetadata } from '../entities/module-metadata.entity';
|
|
6
6
|
|
|
7
|
-
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
7
|
+
import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
|
|
8
8
|
import { ConfigService } from '@nestjs/config';
|
|
9
9
|
import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
|
|
10
10
|
import * as path from 'path'; // To handle file paths
|
|
@@ -320,7 +320,54 @@ export class ModuleMetadataService {
|
|
|
320
320
|
|
|
321
321
|
async remove(id: number) {
|
|
322
322
|
const entity = await this.findOne(id);
|
|
323
|
-
|
|
323
|
+
await this.cleanupOnDelete(entity.id);
|
|
324
|
+
const r = await this.moduleMetadataRepo.remove(entity);
|
|
325
|
+
return r
|
|
326
|
+
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
|
|
330
|
+
async cleanupOnDelete(moduleEntityId: number) {
|
|
331
|
+
const moduleEntity = await this.moduleMetadataRepo.findOne({
|
|
332
|
+
where: {
|
|
333
|
+
// @ts-ignore
|
|
334
|
+
id: moduleEntityId,
|
|
335
|
+
}
|
|
336
|
+
});
|
|
337
|
+
|
|
338
|
+
if (!moduleEntity) {
|
|
339
|
+
this.logger.log(`Invalid moduleEntityId: ${moduleEntityId} unable to resolve model metadata`);
|
|
340
|
+
return;
|
|
341
|
+
}
|
|
342
|
+
if (moduleEntity.id !== moduleEntityId) {
|
|
343
|
+
this.logger.log(`Invalid moduleEntityId: ${moduleEntityId} unable to resolve model metadata id ${moduleEntity.id} not matching with the one passed as argument ${moduleEntityId}`);
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
this.logger.log(`Cleaning up for module: ${moduleEntity.name}.`);
|
|
348
|
+
|
|
349
|
+
const modulePath = await this.moduleMetadataHelperService.getModulePath(moduleEntity.name);
|
|
350
|
+
if (modulePath) {
|
|
351
|
+
|
|
352
|
+
this.logger.log(`Module path: ${modulePath}`);
|
|
353
|
+
|
|
354
|
+
// Metadata file to be deleted
|
|
355
|
+
const moduleMetadataPAth = await this.moduleMetadataHelperService.getModuleMetadataFolderPath(moduleEntity.name)
|
|
356
|
+
this.logger.log(`About to delete module metadata path: ${moduleMetadataPAth}`);
|
|
357
|
+
|
|
358
|
+
try {
|
|
359
|
+
await fs.rm(modulePath, { recursive: true, force: true });
|
|
360
|
+
await fs.rm(moduleMetadataPAth, { recursive: true, force: true });
|
|
361
|
+
this.logger.log(`Deleted file: ${moduleMetadataPAth}`);
|
|
362
|
+
} catch (error) {
|
|
363
|
+
this.logger.error(`Error deleting file: ${moduleMetadataPAth}`, error);
|
|
364
|
+
throw new Error(ERROR_MESSAGES.FILE_DELETE_FAILED); // Trigger rollback
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
await this.dataSource.query(
|
|
368
|
+
`CALL cleanup_module_metadata($1, $2)`,
|
|
369
|
+
[moduleEntity.name, true],
|
|
370
|
+
);
|
|
324
371
|
}
|
|
325
372
|
|
|
326
373
|
async deleteMany(ids: number[]): Promise<any> {
|
|
@@ -1,23 +1,22 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import {
|
|
1
|
+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
3
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
4
|
-
import {
|
|
4
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
5
|
+
import { CrudHelperService } from "src/services/crud-helper.service";
|
|
5
6
|
import { CRUDService } from 'src/services/crud.service';
|
|
7
|
+
import { FileService } from "src/services/file.service";
|
|
6
8
|
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
7
9
|
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
8
|
-
import {
|
|
9
|
-
import { FileService } from "src/services/file.service";
|
|
10
|
-
import { CrudHelperService } from "src/services/crud-helper.service";
|
|
10
|
+
import { EntityManager, In } from 'typeorm';
|
|
11
11
|
|
|
12
12
|
|
|
13
|
-
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
14
|
-
import { ActiveUserData } from '../interfaces/active-user-data.interface';
|
|
15
|
-
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
16
13
|
import { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';
|
|
14
|
+
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
17
15
|
|
|
18
16
|
@Injectable()
|
|
19
17
|
export class PermissionMetadataService extends CRUDService<PermissionMetadata> {
|
|
20
18
|
constructor(
|
|
19
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
21
20
|
readonly modelMetadataService: ModelMetadataService,
|
|
22
21
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
23
22
|
readonly configService: ConfigService,
|
|
@@ -99,8 +99,10 @@ export abstract class DatabaseSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
99
99
|
|
|
100
100
|
async onModuleInit(): Promise<void> {
|
|
101
101
|
const defaultBroker = process.env.QUEUES_DEFAULT_BROKER || 'database';
|
|
102
|
+
const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
|
|
103
|
+
|
|
102
104
|
// we will start subscriber only if the current service role is subscriber.
|
|
103
|
-
if (['both', 'subscriber'].includes(this.serviceRole) && defaultBroker === 'database') {
|
|
105
|
+
if (['both', 'subscriber'].includes(this.serviceRole) && defaultBroker === 'database' && solidCliRunning === "false") {
|
|
104
106
|
|
|
105
107
|
const options = this.options();
|
|
106
108
|
|
|
@@ -52,8 +52,10 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
async onModuleInit(): Promise<void> {
|
|
55
|
+
const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
|
|
56
|
+
|
|
55
57
|
// we will start subscriber only if the current service role is subscriber.
|
|
56
|
-
if (this.url && ['both', 'subscriber'].includes(this.serviceRole)) {
|
|
58
|
+
if (this.url && ['both', 'subscriber'].includes(this.serviceRole) && solidCliRunning === "false") {
|
|
57
59
|
|
|
58
60
|
// this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
59
61
|
// const connection = await amqp.connect(this.url);
|
|
@@ -92,7 +94,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
92
94
|
async (rawMessage) => {
|
|
93
95
|
if (rawMessage) {
|
|
94
96
|
const messageContentString = rawMessage.content.toString();
|
|
95
|
-
this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);
|
|
97
|
+
// this.logger.debug(`RabbitMqSubscriber Received raw message: ${messageContentString}`);
|
|
96
98
|
|
|
97
99
|
let message: QueueMessage<T> = null;
|
|
98
100
|
|
|
@@ -23,6 +23,7 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
|
|
|
23
23
|
constructor(
|
|
24
24
|
@Inject(forwardRef(() => ModelMetadataService))
|
|
25
25
|
readonly modelMetadataService: ModelMetadataService,
|
|
26
|
+
@Inject(forwardRef(() => ModuleMetadataService))
|
|
26
27
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
27
28
|
readonly configService: ConfigService,
|
|
28
29
|
readonly fileService: FileService,
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import {
|
|
1
|
+
import { forwardRef, Inject, Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
import { ConfigService } from '@nestjs/config';
|
|
3
3
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
4
|
-
import {
|
|
4
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
5
5
|
import { ScheduledJob } from 'src/entities/scheduled-job.entity';
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { ConfigService } from '@nestjs/config';
|
|
9
|
-
import { FileService } from './file.service';
|
|
6
|
+
import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
|
|
7
|
+
import { EntityManager } from 'typeorm';
|
|
10
8
|
import { CrudHelperService } from './crud-helper.service';
|
|
11
9
|
import { CRUDService } from './crud.service';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { FileService } from './file.service';
|
|
11
|
+
import { ModelMetadataService } from './model-metadata.service';
|
|
12
|
+
import { ModuleMetadataService } from './module-metadata.service';
|
|
14
13
|
|
|
15
14
|
@Injectable()
|
|
16
15
|
export class ScheduledJobService extends CRUDService<ScheduledJob> {
|
|
17
16
|
private readonly logger = new Logger(ScheduledJobService.name);
|
|
18
17
|
|
|
19
18
|
constructor(
|
|
19
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
20
20
|
readonly modelMetadataService: ModelMetadataService,
|
|
21
21
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
22
22
|
readonly configService: ConfigService,
|
|
@@ -20,6 +20,11 @@ export class SchedulerServiceImpl implements ISchedulerService {
|
|
|
20
20
|
|
|
21
21
|
@Cron(CronExpression.EVERY_MINUTE)
|
|
22
22
|
async runScheduledJobs(): Promise<void> {
|
|
23
|
+
const solidCliRunning = process.env.SOLID_CLI_RUNNING || "false";
|
|
24
|
+
if (solidCliRunning === "true") {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
23
28
|
const now = new Date();
|
|
24
29
|
|
|
25
30
|
// this.logger.log(`[${now.getTime()}]: scheduler service started run...`);
|
|
@@ -18,6 +18,7 @@ import { SecurityRuleRepository } from 'src';
|
|
|
18
18
|
@Injectable()
|
|
19
19
|
export class SecurityRuleService extends CRUDService<SecurityRule> implements OnApplicationBootstrap {
|
|
20
20
|
constructor(
|
|
21
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
21
22
|
readonly modelMetadataService: ModelMetadataService,
|
|
22
23
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
23
24
|
readonly configService: ConfigService,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable } from "@nestjs/common";
|
|
1
|
+
import { forwardRef, Inject, Injectable } from "@nestjs/common";
|
|
2
2
|
import { ModelMetadataService } from "src/services/model-metadata.service";
|
|
3
3
|
import { SelectionProvider } from "src/decorators/selection-provider.decorator";
|
|
4
4
|
import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "../../interfaces";
|
|
@@ -8,7 +8,10 @@ import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues
|
|
|
8
8
|
@Injectable()
|
|
9
9
|
export class ListOfModelsSelectionProvider implements ISelectionProvider<ISelectionProviderContext> {
|
|
10
10
|
private readonly modelMetadataService: ModelMetadataService;
|
|
11
|
-
constructor(
|
|
11
|
+
constructor(
|
|
12
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
13
|
+
modelMetadataService: ModelMetadataService
|
|
14
|
+
) {
|
|
12
15
|
this.modelMetadataService = modelMetadataService;
|
|
13
16
|
}
|
|
14
17
|
help(): string {
|
|
@@ -1,25 +1,28 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@nestjs/common';
|
|
1
|
+
import { BadRequestException, ForbiddenException, forwardRef, Inject, Injectable } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { InjectEntityManager, InjectRepository } from '@nestjs/typeorm';
|
|
4
4
|
import { EntityManager, Repository } from 'typeorm';
|
|
5
5
|
|
|
6
6
|
import { ConfigService, ConfigType } from '@nestjs/config';
|
|
7
|
+
import commonConfig from 'src/config/common.config';
|
|
8
|
+
import { iamConfig } from 'src/config/iam.config';
|
|
9
|
+
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
10
|
+
import { CreateSettingDto } from 'src/dtos/create-setting.dto';
|
|
11
|
+
import { GetMcpUrlDto } from 'src/dtos/get-mcp-url.dto';
|
|
12
|
+
import { User } from 'src/entities/user.entity';
|
|
13
|
+
import { SettingRepository } from 'src/repository/setting.repository';
|
|
7
14
|
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
8
15
|
import { CRUDService } from 'src/services/crud.service';
|
|
9
16
|
import { FileService } from 'src/services/file.service';
|
|
10
17
|
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
11
18
|
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
12
|
-
import commonConfig from 'src/config/common.config';
|
|
13
|
-
import { iamConfig } from 'src/config/iam.config';
|
|
14
19
|
import { Setting } from '../entities/setting.entity';
|
|
15
20
|
import { RequestContextService } from './request-context.service';
|
|
16
|
-
import { User } from 'src/entities/user.entity';
|
|
17
|
-
import { CreateSettingDto } from 'src/dtos/create-setting.dto';
|
|
18
|
-
import { SettingRepository } from 'src/repository/setting.repository';
|
|
19
21
|
|
|
20
22
|
@Injectable()
|
|
21
23
|
export class SettingService extends CRUDService<Setting> {
|
|
22
24
|
constructor(
|
|
25
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
23
26
|
readonly modelMetadataService: ModelMetadataService,
|
|
24
27
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
25
28
|
readonly configService: ConfigService,
|
|
@@ -44,6 +47,7 @@ export class SettingService extends CRUDService<Setting> {
|
|
|
44
47
|
|
|
45
48
|
async seedDefaultSettings(): Promise<void> {
|
|
46
49
|
const settingsSeederData = {
|
|
50
|
+
passwordlessRegistrationValidateWhat: this.iamConfiguration.passwordlessRegistrationValidateWhat,
|
|
47
51
|
allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,
|
|
48
52
|
passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,
|
|
49
53
|
passwordLessAuth: this.iamConfiguration.passwordLessAuth,
|
|
@@ -163,6 +167,7 @@ export class SettingService extends CRUDService<Setting> {
|
|
|
163
167
|
|
|
164
168
|
private getDefaultSettings(): Record<string, any> {
|
|
165
169
|
return {
|
|
170
|
+
passwordlessRegistrationValidateWhat: this.iamConfiguration.passwordlessRegistrationValidateWhat,
|
|
166
171
|
allowPublicRegistration: this.iamConfiguration.allowPublicRegistration,
|
|
167
172
|
passwordBasedAuth: this.iamConfiguration.passwordBasedAuth,
|
|
168
173
|
passwordLessAuth: this.iamConfiguration.passwordLessAuth,
|
|
@@ -372,4 +377,26 @@ export class SettingService extends CRUDService<Setting> {
|
|
|
372
377
|
return { system, user };
|
|
373
378
|
}
|
|
374
379
|
|
|
380
|
+
async getMcpUrl(getMcpUrlDto: GetMcpUrlDto, solidRequestContext: any = {}): Promise<any> {
|
|
381
|
+
|
|
382
|
+
const { showHeader, inListView } = getMcpUrlDto;
|
|
383
|
+
|
|
384
|
+
if(process.env.MCP_ENABLED === 'false') {
|
|
385
|
+
throw new ForbiddenException(ERROR_MESSAGES.FORBIDDEN);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
if (solidRequestContext.activeUser) {
|
|
389
|
+
const permissionNames = ["SettingController.getMcpUrl"];
|
|
390
|
+
const matchingPermssions = solidRequestContext.activeUser.permissions.filter((p: any) => permissionNames.includes(p));
|
|
391
|
+
const hasPermission = matchingPermssions.length > 0;
|
|
392
|
+
if (!hasPermission) {
|
|
393
|
+
throw new BadRequestException(ERROR_MESSAGES.FORBIDDEN);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
const apiKey = process.env.MCP_API_KEY;
|
|
397
|
+
const userId = solidRequestContext.activeUser.sub;
|
|
398
|
+
const mcpServerUrl = process.env.MCP_SERVER_URL;
|
|
399
|
+
return { mcpUrl: `${mcpServerUrl}/static/frontend.html?solidx-mcp-api-key=${apiKey}&solidx-user-id=${userId}&solidx-show-header=${showHeader}&solidx-in-list-view=${inListView}` };
|
|
400
|
+
}
|
|
401
|
+
|
|
375
402
|
}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { ConfigService } from '@nestjs/config';
|
|
4
|
+
import { DiscoveryService, ModuleRef } from '@nestjs/core';
|
|
5
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
6
|
+
import { SmsTemplateRepository } from 'src/repository/sms-template.repository';
|
|
7
|
+
import { EntityManager } from 'typeorm';
|
|
6
8
|
import { SmsTemplate } from '../entities/sms-template.entity';
|
|
7
|
-
import {
|
|
8
|
-
import { UpdateSmsTemplateDto } from '../dtos/update-sms-template.dto';
|
|
9
|
+
import { CrudHelperService } from './crud-helper.service';
|
|
9
10
|
import { CRUDService } from './crud.service';
|
|
10
|
-
import { ModelMetadataService } from './model-metadata.service';
|
|
11
|
-
import { ModuleMetadataService } from './module-metadata.service';
|
|
12
|
-
import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
|
|
13
|
-
import { ConfigService } from '@nestjs/config';
|
|
14
11
|
import { FileService } from './file.service';
|
|
12
|
+
import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
|
|
15
13
|
import { MediaService } from './media.service';
|
|
16
|
-
import {
|
|
17
|
-
import {
|
|
18
|
-
import { SmsTemplateRepository } from 'src/repository/sms-template.repository';
|
|
14
|
+
import { ModelMetadataService } from './model-metadata.service';
|
|
15
|
+
import { ModuleMetadataService } from './module-metadata.service';
|
|
19
16
|
|
|
20
17
|
@Injectable()
|
|
21
18
|
export class SmsTemplateService extends CRUDService<SmsTemplate>{
|
|
22
19
|
constructor(
|
|
20
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
23
21
|
readonly modelMetadataService: ModelMetadataService,
|
|
24
22
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
25
23
|
readonly mediaStorageProviderService: MediaStorageProviderMetadataService,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
2
|
-
import {
|
|
2
|
+
import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';
|
|
3
3
|
import { DiscoveryService, MetadataScanner, ModuleRef, Reflector } from '@nestjs/core';
|
|
4
4
|
import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
|
|
5
5
|
import { getDataSourceToken } from '@nestjs/typeorm';
|
|
@@ -14,16 +14,12 @@ import { IS_SELECTION_PROVIDER } from 'src/decorators/selection-provider.decorat
|
|
|
14
14
|
import { IS_SOLID_DATABASE_MODULE } from 'src/decorators/solid-database-module.decorator';
|
|
15
15
|
import { IS_WA_PROVIDER } from 'src/decorators/whatsapp-provider.decorator';
|
|
16
16
|
import { SolidRegistry } from 'src/helpers/solid-registry';
|
|
17
|
-
import { DataSource } from 'typeorm';
|
|
18
|
-
import { CRUDService } from './crud.service';
|
|
19
|
-
import { RequestContextService } from './request-context.service';
|
|
20
|
-
import { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';
|
|
21
17
|
import { AuditSubscriber } from 'src/subscribers/audit.subscriber';
|
|
22
|
-
import { ComputedEntityFieldSubscriber
|
|
18
|
+
import { ComputedEntityFieldSubscriber } from 'src/subscribers/computed-entity-field.subscriber';
|
|
19
|
+
import { CreatedByUpdatedBySubscriber } from 'src/subscribers/created-by-updated-by.subscriber';
|
|
23
20
|
import { SoftDeleteAwareEventSubscriber } from 'src/subscribers/soft-delete-aware-event.subscriber';
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import { ModelMetadataHelperService, PublisherFactory } from 'src';
|
|
21
|
+
import { DataSource } from 'typeorm';
|
|
22
|
+
import { CRUDService } from './crud.service';
|
|
27
23
|
|
|
28
24
|
export const coreSubscriberClasses = [
|
|
29
25
|
AuditSubscriber,
|
|
@@ -40,20 +36,11 @@ export class SolidIntrospectService implements OnApplicationBootstrap {
|
|
|
40
36
|
private readonly metadataScanner: MetadataScanner,
|
|
41
37
|
private readonly solidRegistry: SolidRegistry,
|
|
42
38
|
private readonly moduleRef: ModuleRef,
|
|
43
|
-
private readonly requestContextService: RequestContextService,
|
|
44
|
-
// AuditSubscribe related dependencies
|
|
45
|
-
private readonly chatterMessageService: ChatterMessageService,
|
|
46
|
-
private readonly modelMetadataHelperService: ModelMetadataHelperService,
|
|
47
|
-
private readonly modelMetadataRepo: ModelMetadataRepository,
|
|
48
|
-
// ComputedEntityFieldSubscriber related dependencies
|
|
49
|
-
@Inject(forwardRef(() => PublisherFactory))
|
|
50
|
-
private readonly publisherFactory: PublisherFactory<any>,
|
|
51
|
-
|
|
52
39
|
) { }
|
|
53
40
|
|
|
54
41
|
private readonly logger = new Logger(SolidIntrospectService.name);
|
|
55
42
|
async onApplicationBootstrap() {
|
|
56
|
-
this.logger.
|
|
43
|
+
this.logger.debug('Introspecting the application for Solid metadata');
|
|
57
44
|
|
|
58
45
|
// Register all seeders
|
|
59
46
|
const seeders = this.discoveryService
|