@solidstarters/solid-core 1.2.193 → 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/mcp.command.d.ts +20 -0
- package/dist/commands/mcp.command.d.ts.map +1 -0
- package/dist/commands/mcp.command.js +208 -0
- package/dist/commands/mcp.command.js.map +1 -0
- package/dist/commands/refresh-model.command.d.ts +8 -5
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +36 -0
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/commands/remove-fields.command.js +1 -1
- package/dist/commands/remove-fields.command.js.map +1 -1
- package/dist/commands/seed.command.d.ts +2 -0
- package/dist/commands/seed.command.d.ts.map +1 -1
- package/dist/commands/seed.command.js +28 -1
- package/dist/commands/seed.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/authentication.controller.js +1 -1
- package/dist/controllers/authentication.controller.js.map +1 -1
- package/dist/controllers/email-template.controller.js +1 -1
- package/dist/controllers/email-template.controller.js.map +1 -1
- package/dist/controllers/field-metadata.controller.d.ts +136 -4
- package/dist/controllers/field-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/field-metadata.controller.js +14 -1
- package/dist/controllers/field-metadata.controller.js.map +1 -1
- package/dist/controllers/media-storage-provider-metadata.controller.js +1 -1
- package/dist/controllers/media-storage-provider-metadata.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.js +1 -1
- package/dist/controllers/model-metadata.controller.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/module-metadata.controller.js +1 -1
- package/dist/controllers/module-metadata.controller.js.map +1 -1
- package/dist/controllers/otp-authentication.controller.js +1 -1
- package/dist/controllers/otp-authentication.controller.js.map +1 -1
- package/dist/controllers/service.controller.js +1 -1
- package/dist/controllers/service.controller.js.map +1 -1
- 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/controllers/sms-template.controller.js +1 -1
- package/dist/controllers/sms-template.controller.js.map +1 -1
- package/dist/controllers/test-queue.controller.js +1 -1
- package/dist/controllers/test-queue.controller.js.map +1 -1
- package/dist/controllers/test.controller.js +1 -1
- package/dist/controllers/test.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-ai-interaction.dto.d.ts +2 -0
- package/dist/dtos/create-ai-interaction.dto.d.ts.map +1 -1
- package/dist/dtos/create-ai-interaction.dto.js +14 -1
- package/dist/dtos/create-ai-interaction.dto.js.map +1 -1
- package/dist/dtos/create-field-metadata.dto.d.ts +22 -5
- package/dist/dtos/create-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-field-metadata.dto.js +34 -8
- package/dist/dtos/create-field-metadata.dto.js.map +1 -1
- package/dist/dtos/create-import-transaction.dto.d.ts +0 -1
- package/dist/dtos/create-import-transaction.dto.d.ts.map +1 -1
- package/dist/dtos/create-import-transaction.dto.js +1 -7
- package/dist/dtos/create-import-transaction.dto.js.map +1 -1
- package/dist/dtos/create-model-metadata.dto.d.ts +2 -0
- package/dist/dtos/create-model-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/create-model-metadata.dto.js +13 -1
- package/dist/dtos/create-model-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 +6 -1
- 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 +10 -0
- package/dist/dtos/resolve-s3-url.dto.d.ts.map +1 -0
- package/dist/dtos/resolve-s3-url.dto.js +49 -0
- package/dist/dtos/resolve-s3-url.dto.js.map +1 -0
- package/dist/dtos/update-ai-interaction.dto.d.ts +2 -0
- package/dist/dtos/update-ai-interaction.dto.d.ts.map +1 -1
- package/dist/dtos/update-ai-interaction.dto.js +13 -1
- package/dist/dtos/update-ai-interaction.dto.js.map +1 -1
- package/dist/dtos/update-field-metadata.dto.d.ts.map +1 -1
- package/dist/dtos/update-field-metadata.dto.js.map +1 -1
- package/dist/dtos/update-import-transaction.dto.d.ts +0 -1
- package/dist/dtos/update-import-transaction.dto.d.ts.map +1 -1
- package/dist/dtos/update-import-transaction.dto.js +1 -7
- package/dist/dtos/update-import-transaction.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/action-metadata.entity.js +4 -4
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/ai-interaction.entity.d.ts +2 -0
- package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
- package/dist/entities/ai-interaction.entity.js +15 -6
- package/dist/entities/ai-interaction.entity.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +1 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.js +1 -1
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/common.entity.d.ts +2 -3
- package/dist/entities/common.entity.d.ts.map +1 -1
- package/dist/entities/common.entity.js +10 -11
- package/dist/entities/common.entity.js.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +2 -2
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
- package/dist/entities/dashboard-question.entity.js +3 -3
- package/dist/entities/dashboard-question.entity.js.map +1 -1
- package/dist/entities/dashboard-variable.entity.js +3 -3
- package/dist/entities/dashboard-variable.entity.js.map +1 -1
- package/dist/entities/dashboard.entity.js +1 -1
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/entities/email-template.entity.d.ts.map +1 -1
- package/dist/entities/email-template.entity.js +4 -3
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/export-template.entity.js +2 -2
- package/dist/entities/export-template.entity.js.map +1 -1
- package/dist/entities/export-transaction.entity.js +2 -2
- package/dist/entities/export-transaction.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts +1 -0
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +8 -4
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.js +1 -1
- package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
- package/dist/entities/import-transaction.entity.d.ts +0 -1
- package/dist/entities/import-transaction.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction.entity.js +2 -7
- package/dist/entities/import-transaction.entity.js.map +1 -1
- package/dist/entities/legacy-common-with-id.entity.d.ts +5 -0
- package/dist/entities/legacy-common-with-id.entity.d.ts.map +1 -0
- package/dist/entities/legacy-common-with-id.entity.js +32 -0
- package/dist/entities/legacy-common-with-id.entity.js.map +1 -0
- package/dist/entities/legacy-common.entity.d.ts +13 -0
- package/dist/entities/legacy-common.entity.d.ts.map +1 -0
- package/dist/entities/legacy-common.entity.js +68 -0
- package/dist/entities/legacy-common.entity.js.map +1 -0
- package/dist/entities/list-of-values.entity.js +2 -2
- package/dist/entities/list-of-values.entity.js.map +1 -1
- package/dist/entities/locale.entity.js +1 -1
- package/dist/entities/locale.entity.js.map +1 -1
- package/dist/entities/media.entity.d.ts.map +1 -1
- package/dist/entities/media.entity.js +3 -3
- package/dist/entities/media.entity.js.map +1 -1
- package/dist/entities/menu-item-metadata.entity.js +4 -4
- package/dist/entities/menu-item-metadata.entity.js.map +1 -1
- package/dist/entities/model-metadata.entity.d.ts +2 -0
- package/dist/entities/model-metadata.entity.d.ts.map +1 -1
- package/dist/entities/model-metadata.entity.js +11 -3
- package/dist/entities/model-metadata.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/entities/mq-message-queue.entity.js +1 -1
- package/dist/entities/mq-message-queue.entity.js.map +1 -1
- package/dist/entities/mq-message.entity.d.ts +3 -3
- package/dist/entities/mq-message.entity.d.ts.map +1 -1
- package/dist/entities/mq-message.entity.js +10 -10
- package/dist/entities/mq-message.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.js +4 -4
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/scheduled-job.entity.js +4 -4
- package/dist/entities/scheduled-job.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.js +2 -2
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/setting.entity.js +2 -2
- package/dist/entities/setting.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.js +2 -2
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-activity-history.entity.d.ts.map +1 -1
- package/dist/entities/user-activity-history.entity.js +1 -1
- package/dist/entities/user-activity-history.entity.js.map +1 -1
- package/dist/entities/user-view-metadata.entity.js +2 -2
- package/dist/entities/user-view-metadata.entity.js.map +1 -1
- package/dist/entities/user.entity.js +13 -15
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.js +3 -3
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/date.helper.d.ts +1 -1
- package/dist/helpers/date.helper.d.ts.map +1 -1
- package/dist/helpers/date.helper.js +24 -2
- package/dist/helpers/date.helper.js.map +1 -1
- 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 +4 -1
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +52 -30
- 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 +26 -2
- package/dist/helpers/module.helper.js.map +1 -1
- package/dist/helpers/schematic.service.d.ts +9 -3
- package/dist/helpers/schematic.service.d.ts.map +1 -1
- package/dist/helpers/schematic.service.js +49 -32
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +14 -2
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +10 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts +3 -0
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -0
- package/dist/helpers/typeorm-db-helper.js +24 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -0
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -3
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +3 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.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/jobs/database/trigger-mcp-client-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js +6 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.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 +8 -13
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +103 -43
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +553 -652
- 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 +12 -3
- 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 +2 -1
- 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 +10 -6
- 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 +31 -6
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +285 -50
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +7 -2
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +135 -26
- 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 +146 -6
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +218 -58
- 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 +3 -1
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +35 -11
- 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 +16 -45
- 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/mq-message.service.d.ts.map +1 -1
- package/dist/services/mq-message.service.js +3 -4
- package/dist/services/mq-message.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/publisher-factory.service.d.ts.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +4 -0
- package/dist/services/queues/publisher-factory.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/{providers → services/selection-providers}/list-of-values-selection-providers.service.d.ts +2 -2
- package/dist/services/selection-providers/list-of-values-selection-providers.service.d.ts.map +1 -0
- package/dist/{providers → services/selection-providers}/list-of-values-selection-providers.service.js +3 -3
- package/dist/services/selection-providers/list-of-values-selection-providers.service.js.map +1 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts +20 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.d.ts.map +1 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js +87 -0
- package/dist/services/selection-providers/pseudo-foreign-key-selection-provider.service.js.map +1 -0
- 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 +28 -5
- 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 +10 -3
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +66 -12
- 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 +3 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +33 -5
- 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 +23 -1
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +3 -2
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +8 -10
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.d.ts +7 -4
- package/dist/subscribers/computed-entity-field.subscriber.d.ts.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +60 -21
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts +4 -2
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.js +10 -8
- package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/field-metadata.subscriber.js +0 -1
- package/dist/subscribers/field-metadata.subscriber.js.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.d.ts.map +1 -1
- package/dist/subscribers/model-metadata.subscriber.js +3 -2
- package/dist/subscribers/model-metadata.subscriber.js.map +1 -1
- package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts +3 -2
- package/dist/subscribers/soft-delete-aware-event.subscriber.d.ts.map +1 -1
- package/dist/subscribers/soft-delete-aware-event.subscriber.js +6 -11
- package/dist/subscribers/soft-delete-aware-event.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/sql/default/mssql/proc_CleanupModelMetadata.sql +175 -0
- package/sql/default/mssql/proc_CleanupModuleMetadata.sql +78 -0
- package/sql/default/mssql/scratchpad.sql.txt +10 -0
- package/sql/default/postgres/proc_CleanupModelMetadata.sql +148 -0
- package/sql/default/postgres/proc_CleanupModuleMetadata.sql +50 -0
- package/sql/default/postgres/scratchpad.sql.txt +12 -0
- package/sql-server-changes.txt +88 -0
- package/src/commands/fixtures/fixtures-setup.command.ts +44 -0
- package/src/commands/fixtures/fixtures-tear-down.command.ts +45 -0
- package/src/commands/mcp.command.ts +215 -0
- package/src/commands/refresh-model.command.ts +39 -5
- package/src/commands/remove-fields.command.ts +1 -1
- package/src/commands/seed.command.ts +34 -15
- package/src/constants/error-messages.ts +7 -1
- package/src/controllers/authentication.controller.ts +1 -1
- package/src/controllers/email-template.controller.ts +1 -1
- package/src/controllers/field-metadata.controller.ts +7 -1
- package/src/controllers/media-storage-provider-metadata.controller.ts +1 -1
- package/src/controllers/model-metadata.controller.ts +1 -1
- package/src/controllers/model-sequence.controller.ts +93 -0
- package/src/controllers/module-metadata.controller.ts +1 -1
- package/src/controllers/otp-authentication.controller.ts +1 -1
- package/src/controllers/service.controller.ts +1 -1
- package/src/controllers/setting.controller.ts +33 -21
- package/src/controllers/sms-template.controller.ts +1 -1
- package/src/controllers/test-queue.controller.ts +1 -1
- package/src/controllers/test.controller.ts +1 -1
- package/src/dtos/basic-filters.dto.ts +6 -1
- package/src/dtos/basic-group-filters.dto.ts +23 -0
- package/src/dtos/create-ai-interaction.dto.ts +16 -9
- package/src/dtos/create-field-metadata.dto.ts +43 -13
- package/src/dtos/create-import-transaction.dto.ts +0 -4
- package/src/dtos/create-model-metadata.dto.ts +10 -0
- package/src/dtos/create-model-sequence.dto.ts +51 -0
- package/src/dtos/create-role-metadata.dto.ts +23 -4
- package/src/dtos/get-mcp-url.dto.ts +13 -0
- package/src/dtos/resolve-s3-url.dto.ts +31 -0
- package/src/dtos/update-ai-interaction.dto.ts +16 -9
- package/src/dtos/update-field-metadata.dto.ts +1 -2
- package/src/dtos/update-import-transaction.dto.ts +0 -4
- package/src/dtos/update-model-sequence.dto.ts +53 -0
- package/src/entities/action-metadata.entity.ts +4 -4
- package/src/entities/ai-interaction.entity.ts +16 -12
- package/src/entities/chatter-message-details.entity.ts +18 -18
- package/src/entities/chatter-message.entity.ts +2 -2
- package/src/entities/common.entity.ts +20 -11
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +2 -2
- package/src/entities/dashboard-question.entity.ts +3 -3
- package/src/entities/dashboard-variable.entity.ts +3 -3
- package/src/entities/dashboard.entity.ts +1 -1
- package/src/entities/email-template.entity.ts +4 -3
- package/src/entities/export-template.entity.ts +2 -2
- package/src/entities/export-transaction.entity.ts +2 -2
- package/src/entities/field-metadata.entity.ts +6 -3
- package/src/entities/import-transaction-error-log.entity.ts +2 -2
- package/src/entities/import-transaction.entity.ts +2 -5
- package/src/entities/legacy-common-with-id.entity.ts +11 -0
- package/src/entities/legacy-common.entity.ts +58 -0
- package/src/entities/list-of-values.entity.ts +2 -2
- package/src/entities/locale.entity.ts +1 -1
- package/src/entities/media.entity.ts +25 -25
- package/src/entities/menu-item-metadata.entity.ts +4 -4
- package/src/entities/model-metadata.entity.ts +9 -2
- package/src/entities/model-sequence.entity.ts +32 -0
- package/src/entities/mq-message-queue.entity.ts +1 -1
- package/src/entities/mq-message.entity.ts +34 -34
- package/src/entities/saved-filters.entity.ts +5 -5
- package/src/entities/scheduled-job.entity.ts +4 -4
- package/src/entities/security-rule.entity.ts +2 -2
- package/src/entities/setting.entity.ts +2 -2
- package/src/entities/sms-template.entity.ts +2 -2
- package/src/entities/user-activity-history.entity.ts +14 -14
- package/src/entities/user-view-metadata.entity.ts +2 -2
- package/src/entities/user.entity.ts +15 -15
- package/src/entities/view-metadata.entity.ts +3 -3
- package/src/helpers/date.helper.ts +31 -10
- 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 +67 -34
- package/src/helpers/module-metadata-helper.service.ts +18 -1
- package/src/helpers/module.helper.ts +37 -1
- package/src/helpers/schematic.service.ts +72 -46
- package/src/helpers/solid-registry.ts +28 -2
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +7 -2
- package/src/interfaces.ts +3 -0
- package/src/jobs/computed-field-evaluation-subscriber.service.ts +15 -4
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +17 -21
- 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 +176 -58
- package/src/seeders/seed-data/solid-core-metadata.json +555 -654
- package/src/seeders/system-fields-seeder.service.ts +39 -36
- package/src/services/action-metadata.service.ts +3 -2
- package/src/services/ai-interaction.service.ts +3 -2
- 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 +17 -12
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +86 -0
- package/src/services/crud-helper.service.ts +319 -53
- package/src/services/crud.service.ts +233 -34
- 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 +322 -70
- 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 +87 -52
- package/src/services/model-metadata.service.ts +68 -47
- package/src/services/model-sequence.service.ts +33 -0
- package/src/services/module-metadata.service.ts +49 -2
- package/src/services/mq-message.service.ts +16 -15
- package/src/services/permission-metadata.service.ts +8 -9
- package/src/services/queues/database-subscriber.service.ts +3 -1
- package/src/services/queues/publisher-factory.service.ts +2 -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/{providers → services/selection-providers}/list-of-values-selection-providers.service.ts +2 -2
- package/src/services/selection-providers/pseudo-foreign-key-selection-provider.service.ts +94 -0
- package/src/services/setting.service.ts +46 -16
- package/src/services/sms-template.service.ts +11 -13
- package/src/services/solid-introspect.service.ts +97 -10
- 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 +52 -21
- package/src/solid-core-cli-db.module.ts +5 -4
- package/src/solid-core.module.ts +23 -1
- package/src/subscribers/audit.subscriber.ts +14 -9
- package/src/subscribers/computed-entity-field.subscriber.ts +71 -22
- package/src/subscribers/created-by-updated-by.subscriber.ts +14 -8
- package/src/subscribers/field-metadata.subscriber.ts +1 -1
- package/src/subscribers/model-metadata.subscriber.ts +4 -2
- package/src/subscribers/soft-delete-aware-event.subscriber.ts +12 -6
- package/src/transformers/typeorm/local-date-time-transformer.ts +30 -0
- package/dist/providers/list-of-values-selection-providers.service.d.ts.map +0 -1
- package/dist/providers/list-of-values-selection-providers.service.js.map +0 -1
- package/src/commands/ingest-rag-chunking-strategy-for.md +0 -224
- package/src/entities/user.entity.ts.bkp +0 -144
- package/src/services/docker exec -it mssql //" +0 -8
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BadRequestException, ForbiddenException, Injectable, Logger } from '@nestjs/common';
|
|
1
|
+
import { BadRequestException, ForbiddenException, forwardRef, Inject, Injectable, Logger } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
4
|
import { EntityManager } from 'typeorm';
|
|
@@ -94,6 +94,7 @@ interface ImportRecordsResult {
|
|
|
94
94
|
@Injectable()
|
|
95
95
|
export class ImportTransactionService extends CRUDService<ImportTransaction> {
|
|
96
96
|
constructor(
|
|
97
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
97
98
|
readonly modelMetadataService: ModelMetadataService,
|
|
98
99
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
99
100
|
readonly configService: ConfigService,
|
|
@@ -305,9 +306,12 @@ export class ImportTransactionService extends CRUDService<ImportTransaction> {
|
|
|
305
306
|
: userPermissions[permissionKey] === true;
|
|
306
307
|
|
|
307
308
|
if (!hasPermission) {
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
309
|
+
const action = permissionKey.split('.').pop()!;
|
|
310
|
+
const message = ERROR_MESSAGES.PERMISSION_MESSAGES[action]?.(modelName) ?? 'You are not allowed to perform this action.';
|
|
311
|
+
throw new ForbiddenException({
|
|
312
|
+
message,
|
|
313
|
+
errorCode: 'permission-denied',
|
|
314
|
+
});
|
|
311
315
|
}
|
|
312
316
|
|
|
313
317
|
// Get the import file media object from the import transaction
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable } from '@nestjs/common';
|
|
1
|
+
import { forwardRef, Inject, Injectable } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
4
|
import { EntityManager } from 'typeorm';
|
|
@@ -12,11 +12,10 @@ import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
import * as fs from 'fs/promises'; // Use the Promise-based version of fs for async/await
|
|
15
|
-
import { ListOfValuesRepository } from 'src/repository/list-of-values.repository';
|
|
16
|
-
import { ListOfValues } from '../entities/list-of-values.entity';
|
|
17
|
-
import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';
|
|
18
15
|
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
19
16
|
import { ListOfValuesMapper } from 'src/mappers/list-of-values-mapper';
|
|
17
|
+
import { ListOfValuesRepository } from 'src/repository/list-of-values.repository';
|
|
18
|
+
import { ListOfValues } from '../entities/list-of-values.entity';
|
|
20
19
|
|
|
21
20
|
|
|
22
21
|
@Injectable()
|
|
@@ -25,6 +24,7 @@ export class ListOfValuesService extends CRUDService<ListOfValues> {
|
|
|
25
24
|
// moduleMetadataHelperService: any;
|
|
26
25
|
// listOfValuesMapper: any;
|
|
27
26
|
constructor(
|
|
27
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
28
28
|
readonly modelMetadataService: ModelMetadataService,
|
|
29
29
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
30
30
|
readonly configService: ConfigService,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';
|
|
1
|
+
import { forwardRef, Inject, Injectable, Logger, OnApplicationBootstrap } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
3
|
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
4
|
import { EntityManager } from 'typeorm';
|
|
@@ -16,6 +16,7 @@ import { RequestContextService } from './request-context.service';
|
|
|
16
16
|
@Injectable()
|
|
17
17
|
export class LocaleService extends CRUDService<Locale> implements OnApplicationBootstrap{
|
|
18
18
|
constructor(
|
|
19
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
19
20
|
readonly modelMetadataService: ModelMetadataService,
|
|
20
21
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
21
22
|
readonly configService: ConfigService,
|
|
@@ -153,7 +153,7 @@ export class SMTPEMailService implements IMail {
|
|
|
153
153
|
attachments: attachmentsList,
|
|
154
154
|
});
|
|
155
155
|
// this.logger.debug(`Sending email to ${to} with subject ${subject} and body ${body}`);
|
|
156
|
-
this.logger.debug(`Sending email to ${to} with subject ${subject}`);
|
|
156
|
+
// this.logger.debug(`Sending email to ${to} with subject ${subject}`);
|
|
157
157
|
|
|
158
158
|
return r;
|
|
159
159
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { Injectable, NotFoundException } from '@nestjs/common';
|
|
1
|
+
import { forwardRef, Inject, Injectable, NotFoundException } from '@nestjs/common';
|
|
2
2
|
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
|
-
import { InjectEntityManager
|
|
4
|
-
import { EntityManager,
|
|
3
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
|
+
import { EntityManager, In } from 'typeorm';
|
|
5
5
|
|
|
6
6
|
import { ConfigService } from '@nestjs/config';
|
|
7
7
|
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
@@ -11,23 +11,21 @@ import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
|
11
11
|
import { ModuleMetadataService } from 'src/services/module-metadata.service';
|
|
12
12
|
|
|
13
13
|
|
|
14
|
+
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
15
|
+
import { BasicFilterDto } from 'src/dtos/basic-filters.dto';
|
|
14
16
|
import { MediaStorageProviderType } from 'src/dtos/create-media-storage-provider-metadata.dto';
|
|
15
|
-
import { FieldMetadata } from 'src/entities/field-metadata.entity';
|
|
16
|
-
import { MediaStorageProviderMetadata } from 'src/entities/media-storage-provider-metadata.entity';
|
|
17
17
|
import { Media } from 'src/entities/media.entity';
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
20
|
-
import { BasicFilterDto } from 'src/dtos/basic-filters.dto';
|
|
21
|
-
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
18
|
+
import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
|
|
19
|
+
import { MediaStorageProviderMetadataRepository } from 'src/repository/media-storage-provider-metadata.repository';
|
|
22
20
|
import { MediaRepository } from 'src/repository/media.repository';
|
|
23
21
|
import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
|
|
24
|
-
import {
|
|
25
|
-
import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
|
|
22
|
+
import { getMediaStorageProvider } from "./mediaStorageProviders";
|
|
26
23
|
|
|
27
24
|
|
|
28
25
|
@Injectable()
|
|
29
26
|
export class MediaService extends CRUDService<Media> {
|
|
30
27
|
constructor(
|
|
28
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
31
29
|
readonly modelMetadataService: ModelMetadataService,
|
|
32
30
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
33
31
|
readonly configService: ConfigService,
|
|
@@ -45,6 +43,7 @@ export class MediaService extends CRUDService<Media> {
|
|
|
45
43
|
// private readonly mediaStorageProviderMetadataRepo: Repository<MediaStorageProviderMetadata>,
|
|
46
44
|
// @InjectRepository(FieldMetadata)
|
|
47
45
|
// private readonly fieldMetadataRepo: Repository<FieldMetadata>,
|
|
46
|
+
@Inject(forwardRef(() => ModelMetadataRepository))
|
|
48
47
|
private readonly modelMetadataRepo: ModelMetadataRepository,
|
|
49
48
|
private readonly mediaStorageProviderMetadataRepo: MediaStorageProviderMetadataRepository,
|
|
50
49
|
private readonly fieldMetadataRepo: FieldMetadataRepository,
|
|
@@ -2,6 +2,8 @@ import { Inject, Injectable, Logger } from "@nestjs/common";
|
|
|
2
2
|
import { ConfigService, ConfigType } from "@nestjs/config";
|
|
3
3
|
import { CommonEntity } from "src/entities/common.entity";
|
|
4
4
|
import { FieldMetadata } from "src/entities/field-metadata.entity";
|
|
5
|
+
import { LegacyCommonEntity } from "src/entities/legacy-common.entity";
|
|
6
|
+
import { LegacyCommonWithIdEntity } from "src/entities/legacy-common-with-id.entity";
|
|
5
7
|
import { Media } from "src/entities/media.entity";
|
|
6
8
|
import { MediaStorageProvider } from "src/interfaces";
|
|
7
9
|
import { FileService } from "src/services/file.service";
|
|
@@ -28,9 +30,13 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
async retrieve(entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
+
const isSupportedEntity = entity instanceof CommonEntity
|
|
34
|
+
|| entity instanceof LegacyCommonEntity
|
|
35
|
+
|| entity instanceof LegacyCommonWithIdEntity;
|
|
36
|
+
if (!isSupportedEntity) {
|
|
37
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
33
38
|
}
|
|
39
|
+
// @ts-ignore
|
|
34
40
|
const media = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
|
|
35
41
|
|
|
36
42
|
// TODO: Check if the mediaStorageProvider (s3 in this case) is configured with a public bucket or not.
|
|
@@ -56,8 +62,11 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
56
62
|
}
|
|
57
63
|
|
|
58
64
|
async store(files: Express.Multer.File[], entity: T, mediaFieldMetadata: FieldMetadata): Promise<Media[]> {
|
|
59
|
-
|
|
60
|
-
|
|
65
|
+
const isSupportedEntity = entity instanceof CommonEntity
|
|
66
|
+
|| entity instanceof LegacyCommonEntity
|
|
67
|
+
|| entity instanceof LegacyCommonWithIdEntity;
|
|
68
|
+
if (!isSupportedEntity) {
|
|
69
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
61
70
|
}
|
|
62
71
|
const result: Media[] = [];
|
|
63
72
|
for (const file of files) {
|
|
@@ -73,6 +82,7 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
73
82
|
|
|
74
83
|
// Create an entry in the media table
|
|
75
84
|
const mediaEntity = await this.mediaRepository.createMedia({
|
|
85
|
+
// @ts-ignore
|
|
76
86
|
entityId: entity.id,
|
|
77
87
|
modelMetadataId: mediaFieldMetadata.model.id,
|
|
78
88
|
relativeUri: awsFileUrl,
|
|
@@ -89,10 +99,15 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
89
99
|
}
|
|
90
100
|
|
|
91
101
|
async delete(entity: T, mediaFieldMetadata: FieldMetadata): Promise<void> {
|
|
92
|
-
|
|
93
|
-
|
|
102
|
+
const isSupportedEntity = entity instanceof CommonEntity
|
|
103
|
+
|| entity instanceof LegacyCommonEntity
|
|
104
|
+
|| entity instanceof LegacyCommonWithIdEntity;
|
|
105
|
+
if (!isSupportedEntity) {
|
|
106
|
+
throw new Error("Entity must be an instance of CommonEntity, LegacyCommonEntity or LegacyCommonWithIdEntity"); // FIXME This needs to be handled through generics. e.g T extends CommonEntity
|
|
94
107
|
}
|
|
108
|
+
// @ts-ignore
|
|
95
109
|
const existingMedia = await this.mediaRepository.findByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id, ['mediaStorageProviderMetadata']);
|
|
110
|
+
// @ts-ignore
|
|
96
111
|
this.mediaRepository.deleteByEntityIdAndFieldIdAndModelMetadataId(entity.id, mediaFieldMetadata.id, mediaFieldMetadata.model.id);
|
|
97
112
|
existingMedia.forEach(media => {
|
|
98
113
|
this.fileService.deleteFromS3(media.relativeUri, mediaFieldMetadata.mediaStorageProvider.bucketName); //TODO
|
|
@@ -108,4 +123,4 @@ export class FileS3StorageProvider<T> implements MediaStorageProvider<T> {
|
|
|
108
123
|
private getFileName(file: Express.Multer.File): string {
|
|
109
124
|
return `${file.filename}-${file.originalname}`;
|
|
110
125
|
}
|
|
111
|
-
}
|
|
126
|
+
}
|
|
@@ -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';
|
|
@@ -16,10 +16,12 @@ import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
|
|
|
16
16
|
import { ModuleMetadata } from '../entities/module-metadata.entity';
|
|
17
17
|
import { dasherize } from '@angular-devkit/core/src/utils/strings';
|
|
18
18
|
import { MenuItemMetadataRepository } from 'src/repository/menu-item-metadata.repository';
|
|
19
|
+
import { SavedFiltersRepository } from 'src/repository/saved-filters.repository';
|
|
19
20
|
|
|
20
21
|
@Injectable()
|
|
21
22
|
export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
22
23
|
constructor(
|
|
24
|
+
@Inject(forwardRef(() => ModelMetadataService))
|
|
23
25
|
readonly modelMetadataService: ModelMetadataService,
|
|
24
26
|
readonly moduleMetadataService: ModuleMetadataService,
|
|
25
27
|
readonly configService: ConfigService,
|
|
@@ -31,6 +33,7 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
|
31
33
|
// @InjectRepository(MenuItemMetadata, 'default')
|
|
32
34
|
// readonly repo: Repository<MenuItemMetadata>,
|
|
33
35
|
readonly repo: MenuItemMetadataRepository,
|
|
36
|
+
readonly savedFiltersRepo: SavedFiltersRepository,
|
|
34
37
|
readonly moduleRef: ModuleRef
|
|
35
38
|
|
|
36
39
|
) {
|
|
@@ -92,7 +95,7 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
|
92
95
|
.leftJoinAndSelect('menuItem.parentMenuItem', 'parentMenuItem')
|
|
93
96
|
.leftJoinAndSelect('menuItem.action', 'action')
|
|
94
97
|
.leftJoinAndSelect('action.model', 'model') // Join the model relation of action
|
|
95
|
-
.leftJoinAndSelect('action.view', 'view') // Join the
|
|
98
|
+
.leftJoinAndSelect('action.view', 'view') // Join the view relation of action
|
|
96
99
|
.leftJoinAndSelect('menuItem.roles', 'roles')
|
|
97
100
|
.where('roles.name IN (:...roleNames)', { roleNames: activeUser.roles })
|
|
98
101
|
.addOrderBy('module.menuSequenceNumber', 'ASC')
|
|
@@ -120,73 +123,105 @@ export class MenuItemMetadataService extends CRUDService<MenuItemMetadata> {
|
|
|
120
123
|
// 3. Then for each module, do a recursive compilation of children based on parentMenuItem, while doing this use the relation - action to get hold of the path.
|
|
121
124
|
const menu: any[] = [];
|
|
122
125
|
|
|
123
|
-
modulesToMenuItemsMap.forEach((menuItems, moduleName) => {
|
|
124
|
-
|
|
126
|
+
// modulesToMenuItemsMap.forEach((menuItems, moduleName) => {
|
|
127
|
+
// const rootMenuItems = menuItems.filter(item => !item.parentMenuItem);
|
|
128
|
+
// const moduleMetadata = modulesMap.get(moduleName);
|
|
129
|
+
|
|
130
|
+
// const moduleMenu = {
|
|
131
|
+
// title: moduleMetadata.displayName,
|
|
132
|
+
// // No need for path the module level.
|
|
133
|
+
// // path: ``,
|
|
134
|
+
// key: moduleName.toLowerCase().replace(/\s+/g, '-'),
|
|
135
|
+
// // TODO: We need to add the module icon as part of the metadata so it can be brought here.
|
|
136
|
+
// // icon: `/images/menu/${moduleName.toLowerCase().replace(/\s+/g, '-')}.svg`,
|
|
137
|
+
// children: this.buildMenuTree(rootMenuItems, menuItems, activeUser),
|
|
138
|
+
// icon: moduleMetadata.menuIconUrl,
|
|
139
|
+
// };
|
|
140
|
+
|
|
141
|
+
// menu.push(moduleMenu);
|
|
142
|
+
// });
|
|
143
|
+
for (const [moduleName, menuItemsForModule] of modulesToMenuItemsMap.entries()) {
|
|
144
|
+
const rootMenuItems = menuItemsForModule.filter(item => !item.parentMenuItem);
|
|
125
145
|
const moduleMetadata = modulesMap.get(moduleName);
|
|
126
146
|
|
|
127
147
|
const moduleMenu = {
|
|
128
148
|
title: moduleMetadata.displayName,
|
|
129
|
-
// No need for path the module level.
|
|
130
|
-
// path: ``,
|
|
131
149
|
key: moduleName.toLowerCase().replace(/\s+/g, '-'),
|
|
132
|
-
|
|
133
|
-
// icon: `/images/menu/${moduleName.toLowerCase().replace(/\s+/g, '-')}.svg`,
|
|
134
|
-
children: this.buildMenuTree(rootMenuItems, menuItems, activeUser),
|
|
150
|
+
children: await this.buildMenuTree(rootMenuItems, menuItemsForModule, activeUser), // ✅ await here
|
|
135
151
|
icon: moduleMetadata.menuIconUrl,
|
|
136
152
|
};
|
|
137
153
|
|
|
138
154
|
menu.push(moduleMenu);
|
|
139
|
-
}
|
|
155
|
+
}
|
|
156
|
+
|
|
140
157
|
|
|
141
158
|
return menu.filter(m => m.children.length > 0);
|
|
142
159
|
}
|
|
143
160
|
|
|
144
161
|
// Recursive function to build the tree
|
|
145
|
-
private buildMenuTree(rootItems: MenuItemMetadata[], allMenuItems: MenuItemMetadata[], activeUser: ActiveUserData): any[] {
|
|
146
|
-
const menuItemsData =
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
162
|
+
private async buildMenuTree(rootItems: MenuItemMetadata[], allMenuItems: MenuItemMetadata[], activeUser: ActiveUserData): Promise<any[]> {
|
|
163
|
+
const menuItemsData = await Promise.all(
|
|
164
|
+
rootItems.map(async rootItem => {
|
|
165
|
+
const allowedMenuItems = allMenuItems.filter(i => {
|
|
166
|
+
if (!i.parentMenuItem) {
|
|
167
|
+
return true
|
|
168
|
+
} else {
|
|
169
|
+
if(i.action.type === 'custom'){
|
|
170
|
+
return true;
|
|
171
|
+
}
|
|
172
|
+
return this.crudHelperService.hasReadPermissionOnModel(activeUser, i.action.model.singularName)
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
// Get immediate children of the current loop variable menuItem.
|
|
176
|
+
const children = allowedMenuItems.filter(item => item.parentMenuItem && item.parentMenuItem.id === rootItem.id);
|
|
177
|
+
const menuItemId = rootItem?.id ?? "";
|
|
178
|
+
const menuItemName = rootItem?.name ?? "";
|
|
179
|
+
const actionId = rootItem?.action?.id ?? "";
|
|
180
|
+
const actionName = rootItem?.action?.name ?? "";
|
|
181
|
+
// TODO: We should specify path only if there are no more children present.
|
|
182
|
+
// For now adding path everywhere.
|
|
183
|
+
let path = '';
|
|
184
|
+
|
|
185
|
+
const layout = rootItem?.action?.view && rootItem?.action?.view?.layout ? JSON.parse(rootItem?.action?.view?.layout) : null
|
|
186
|
+
let savedFilterId = null;
|
|
187
|
+
if (layout && layout?.attrs?.defaultSavedFilter) {
|
|
188
|
+
const savedFilter = await this.savedFiltersRepo.findOne({
|
|
189
|
+
where: {
|
|
190
|
+
name: layout?.attrs?.defaultSavedFilter,
|
|
191
|
+
isPrivate: false
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
if (savedFilter) {
|
|
195
|
+
savedFilterId = savedFilter.id
|
|
196
|
+
}
|
|
152
197
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (rootItem.action && rootItem.action.type === 'solid') {
|
|
165
|
-
if (this.crudHelperService.hasReadPermissionOnModel(activeUser, rootItem.action.model.singularName)) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
// TODO: Here we are assuming that we will always take the user to collection view of a model.
|
|
169
|
-
// We can make provision to take them other views also in the future.
|
|
170
|
-
// path = `/admin/core/${rootItem.module.name}/${rootItem.action.model.singularName}/${rootItem.action.view.name}`;
|
|
171
|
-
path = `/admin/core/${rootItem.module.name}/${dasherize(rootItem.action?.model?.singularName ?? 'unknown')}/${rootItem.action?.view?.type ?? 'list'}`;
|
|
172
|
-
|
|
198
|
+
if (rootItem.action && rootItem.action.type === 'custom') {
|
|
199
|
+
path = `${rootItem.action.customComponent}?menuItemId=${menuItemId}&menuItemName=${menuItemName}&actionId=${actionId}&actionName=${actionName}${savedFilterId ? `&savedQuery=${savedFilterId}` : ''}`;
|
|
200
|
+
}
|
|
201
|
+
if (rootItem.action && rootItem.action.type === 'solid') {
|
|
202
|
+
if (this.crudHelperService.hasReadPermissionOnModel(activeUser, rootItem.action.model.singularName)) {
|
|
203
|
+
// TODO: Here we are assuming that we will always take the user to collection view of a model.
|
|
204
|
+
// We can make provision to take them other views also in the future.
|
|
205
|
+
// path = `/admin/core/${rootItem.module.name}/${rootItem.action.model.singularName}/${rootItem.action.view.name}`;
|
|
206
|
+
path = `/admin/core/${rootItem.module.name}/${dasherize(rootItem.action?.model?.singularName ?? 'unknown')}/${rootItem.action?.view?.type ?? 'list'}?menuItemId=${menuItemId}&menuItemName=${menuItemName}&actionId=${actionId}&actionName=${actionName}${savedFilterId ? `&savedQuery=${savedFilterId}` : ''}`;
|
|
207
|
+
|
|
208
|
+
}
|
|
173
209
|
}
|
|
174
|
-
}
|
|
175
210
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
211
|
+
// We are not checking for empty path coz, this is required for parent menu items.
|
|
212
|
+
const data = {
|
|
213
|
+
title: rootItem.displayName || rootItem.name,
|
|
214
|
+
path: path,
|
|
215
|
+
key: rootItem.name.toLowerCase().replace(/\s+/g, '-'),
|
|
216
|
+
icon: rootItem.iconName,
|
|
217
|
+
// iconVariant : rootItem.iconVariant
|
|
218
|
+
}
|
|
219
|
+
if (children.length > 0) {
|
|
220
|
+
data["children"] = await this.buildMenuTree(children, allMenuItems, activeUser);
|
|
221
|
+
}
|
|
222
|
+
return data;
|
|
188
223
|
|
|
189
|
-
|
|
224
|
+
}));
|
|
190
225
|
return menuItemsData.filter(mi => mi && mi)
|
|
191
226
|
}
|
|
192
227
|
|
|
@@ -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,
|
|
@@ -270,6 +271,8 @@ export class ModelMetadataService {
|
|
|
270
271
|
tableName: model.tableName,
|
|
271
272
|
userKeyFieldUserKey: model.fields.find(field => field.isUserKey)?.name,
|
|
272
273
|
isChild: model?.isChild,
|
|
274
|
+
isLegacyTable: model?.isLegacyTable,
|
|
275
|
+
isLegacyTableWithId: model?.isLegacyTableWithId,
|
|
273
276
|
parentModelUserKey: model?.parentModel?.singularName,
|
|
274
277
|
enableAuditTracking: model?.enableAuditTracking,
|
|
275
278
|
enableSoftDelete: model?.enableSoftDelete,
|
|
@@ -608,57 +611,62 @@ export class ModelMetadataService {
|
|
|
608
611
|
}
|
|
609
612
|
}
|
|
610
613
|
|
|
614
|
+
await this.dataSource.query(
|
|
615
|
+
`CALL cleanup_model_metadata($1, $2)`,
|
|
616
|
+
[modelEntity.singularName, true],
|
|
617
|
+
);
|
|
618
|
+
|
|
611
619
|
// Delete the permissions, menu, actions & views related to this model.
|
|
612
|
-
const controllerName = `${classify(modelEntity.singularName)}Controller`;
|
|
613
|
-
const permissionNames = [
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
];
|
|
625
|
-
const permissionsRepo = this.dataSource.getRepository(PermissionMetadata);
|
|
626
|
-
const permissionsToDelete = await permissionsRepo.find({
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
});
|
|
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
|
+
// });
|
|
630
638
|
|
|
631
639
|
// Remove role associations first
|
|
632
|
-
for (const permission of permissionsToDelete) {
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
}
|
|
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
|
+
// }
|
|
641
649
|
|
|
642
|
-
await permissionsRepo.remove(permissionsToDelete);
|
|
650
|
+
// await permissionsRepo.remove(permissionsToDelete);
|
|
643
651
|
|
|
644
652
|
// Delete actions
|
|
645
|
-
const actionRepo = this.dataSource.getRepository(ActionMetadata);
|
|
646
|
-
const action = await actionRepo.findOne({ where: { model: { id: modelEntity.id } } });
|
|
647
|
-
await actionRepo.delete({ model: { id: modelEntity.id } });
|
|
648
|
-
|
|
649
|
-
// Delete menu items
|
|
650
|
-
const menuItemRepo = this.dataSource.getRepository(MenuItemMetadata);
|
|
651
|
-
if (action) {
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
}
|
|
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
|
+
// }
|
|
658
666
|
|
|
659
667
|
// Delete view
|
|
660
|
-
const viewRepo = this.dataSource.getRepository(ViewMetadata);
|
|
661
|
-
await viewRepo.delete({ model: { id: modelEntity.id } })
|
|
668
|
+
// const viewRepo = this.dataSource.getRepository(ViewMetadata);
|
|
669
|
+
// await viewRepo.delete({ model: { id: modelEntity.id } })
|
|
662
670
|
|
|
663
671
|
// <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic
|
|
664
672
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);
|
|
@@ -1174,14 +1182,24 @@ export class ModelMetadataService {
|
|
|
1174
1182
|
};
|
|
1175
1183
|
const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);
|
|
1176
1184
|
|
|
1185
|
+
let fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1186
|
+
|
|
1187
|
+
// If a list of field ids or field names is passed for refresh, use these fields only
|
|
1188
|
+
if (options.fieldIdsForRefresh && options.fieldIdsForRefresh.length > 0) {
|
|
1189
|
+
fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldIdsForRefresh.includes(+field.id));
|
|
1190
|
+
} else if (options.fieldNamesForRefresh && options.fieldNamesForRefresh.length > 0) {
|
|
1191
|
+
fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldNamesForRefresh.includes(field.name));
|
|
1192
|
+
}
|
|
1193
|
+
// const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1194
|
+
|
|
1177
1195
|
//Execute the schematic command to refresh the model
|
|
1178
|
-
const refreshOuput = await this.executeRefreshModelCommand(model, options.dryRun);
|
|
1196
|
+
const refreshOuput = await this.executeRefreshModelCommand(model, fieldsForRefresh, options.dryRun);
|
|
1179
1197
|
|
|
1180
1198
|
return `${refreshOuput}`;
|
|
1181
1199
|
}
|
|
1182
1200
|
|
|
1183
|
-
private async executeRefreshModelCommand(model: ModelMetadata, dryRun: boolean = false): Promise<string> {
|
|
1184
|
-
const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1201
|
+
private async executeRefreshModelCommand(model: ModelMetadata, fieldsForRefresh: FieldMetadata[], dryRun: boolean = false): Promise<string> {
|
|
1202
|
+
// const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1185
1203
|
const output = await this.schematicService.executeSchematicCommand(
|
|
1186
1204
|
REFRESH_MODEL_COMMAND,
|
|
1187
1205
|
{
|
|
@@ -1195,6 +1213,9 @@ export class ModelMetadataService {
|
|
|
1195
1213
|
parentModel: model.parentModel?.singularName,
|
|
1196
1214
|
parentModule: model.parentModel?.module?.name,
|
|
1197
1215
|
draftPublishWorkflowEnabled: model.draftPublishWorkflow,
|
|
1216
|
+
isLegacyTable: model.isLegacyTable,
|
|
1217
|
+
isLegacyTableWithId: model.isLegacyTableWithId,
|
|
1218
|
+
dataSourceType: model.dataSourceType,
|
|
1198
1219
|
},
|
|
1199
1220
|
dryRun
|
|
1200
1221
|
);
|