@solidstarters/solid-core 1.2.189 → 1.2.192
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/config/iam.config.d.ts +6 -4
- package/dist/config/iam.config.d.ts.map +1 -1
- package/dist/config/iam.config.js +3 -2
- package/dist/config/iam.config.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 +2 -0
- package/dist/constants/error-messages.js.map +1 -1
- package/dist/controllers/authentication.controller.d.ts +1 -1
- package/dist/controllers/authentication.controller.d.ts.map +1 -1
- package/dist/controllers/authentication.controller.js +4 -3
- package/dist/controllers/authentication.controller.js.map +1 -1
- package/dist/controllers/email-template.controller.d.ts.map +1 -1
- package/dist/controllers/email-template.controller.js +8 -8
- package/dist/controllers/email-template.controller.js.map +1 -1
- package/dist/controllers/export-template.controller.d.ts +2 -1
- package/dist/controllers/export-template.controller.d.ts.map +1 -1
- package/dist/controllers/export-template.controller.js +5 -3
- package/dist/controllers/export-template.controller.js.map +1 -1
- package/dist/controllers/import-transaction.controller.d.ts +2 -1
- package/dist/controllers/import-transaction.controller.d.ts.map +1 -1
- package/dist/controllers/import-transaction.controller.js +6 -3
- package/dist/controllers/import-transaction.controller.js.map +1 -1
- package/dist/controllers/sms-template.controller.d.ts.map +1 -1
- package/dist/controllers/sms-template.controller.js +7 -7
- package/dist/controllers/sms-template.controller.js.map +1 -1
- package/dist/decorators/active-user.decorator.d.ts +1 -1
- package/dist/decorators/security-rule-config-provider.decorator.d.ts +3 -0
- package/dist/decorators/security-rule-config-provider.decorator.d.ts.map +1 -0
- package/dist/decorators/security-rule-config-provider.decorator.js +11 -0
- package/dist/decorators/security-rule-config-provider.decorator.js.map +1 -0
- package/dist/decorators/solid-password.decorator.d.ts +5 -1
- package/dist/decorators/solid-password.decorator.d.ts.map +1 -1
- package/dist/decorators/solid-password.decorator.js +18 -6
- package/dist/decorators/solid-password.decorator.js.map +1 -1
- package/dist/dtos/change-password.dto.js +1 -1
- package/dist/dtos/change-password.dto.js.map +1 -1
- package/dist/dtos/confirm-forgot-password.dto.js +1 -1
- package/dist/dtos/confirm-forgot-password.dto.js.map +1 -1
- package/dist/dtos/create-saved-filters.dto.d.ts +1 -0
- package/dist/dtos/create-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/create-saved-filters.dto.js +7 -1
- package/dist/dtos/create-saved-filters.dto.js.map +1 -1
- package/dist/dtos/create-security-rule.dto.d.ts +1 -0
- package/dist/dtos/create-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/create-security-rule.dto.js +7 -1
- package/dist/dtos/create-security-rule.dto.js.map +1 -1
- package/dist/dtos/update-saved-filters.dto.d.ts +1 -0
- package/dist/dtos/update-saved-filters.dto.d.ts.map +1 -1
- package/dist/dtos/update-saved-filters.dto.js +7 -1
- package/dist/dtos/update-saved-filters.dto.js.map +1 -1
- package/dist/dtos/update-security-rule.dto.d.ts +1 -0
- package/dist/dtos/update-security-rule.dto.d.ts.map +1 -1
- package/dist/dtos/update-security-rule.dto.js +7 -1
- package/dist/dtos/update-security-rule.dto.js.map +1 -1
- package/dist/entities/field-metadata.entity.d.ts.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -1
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts +1 -0
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +6 -2
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts +1 -0
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +5 -1
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/helpers/model-metadata-helper.service.d.ts +2 -3
- package/dist/helpers/model-metadata-helper.service.d.ts.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +2 -8
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- 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/solid-registry.d.ts +5 -1
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +16 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/user-helper.d.ts +2 -0
- package/dist/helpers/user-helper.d.ts.map +1 -0
- package/dist/helpers/user-helper.js +41 -0
- package/dist/helpers/user-helper.js.map +1 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +6 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/trigger-mcp-client-subscriber.service.d.ts +2 -2
- package/dist/jobs/trigger-mcp-client-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/trigger-mcp-client-subscriber.service.js +2 -2
- package/dist/jobs/trigger-mcp-client-subscriber.service.js.map +1 -1
- package/dist/jobs/twilio-sms-subscriber.service.d.ts +2 -2
- package/dist/jobs/twilio-sms-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/twilio-sms-subscriber.service.js +2 -2
- package/dist/jobs/twilio-sms-subscriber.service.js.map +1 -1
- package/dist/repository/action-metadata.repository.d.ts +12 -0
- package/dist/repository/action-metadata.repository.d.ts.map +1 -0
- package/dist/repository/action-metadata.repository.js +34 -0
- package/dist/repository/action-metadata.repository.js.map +1 -0
- package/dist/repository/ai-interaction.repository.d.ts +12 -0
- package/dist/repository/ai-interaction.repository.d.ts.map +1 -0
- package/dist/repository/ai-interaction.repository.js +34 -0
- package/dist/repository/ai-interaction.repository.js.map +1 -0
- package/dist/repository/chatter-message-details.repository.d.ts +1 -1
- package/dist/repository/chatter-message-details.repository.d.ts.map +1 -1
- package/dist/repository/chatter-message-details.repository.js +2 -2
- package/dist/repository/chatter-message-details.repository.js.map +1 -1
- package/dist/repository/chatter-message.repository.d.ts +1 -1
- package/dist/repository/chatter-message.repository.d.ts.map +1 -1
- package/dist/repository/chatter-message.repository.js +2 -2
- package/dist/repository/chatter-message.repository.js.map +1 -1
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts +12 -0
- package/dist/repository/dashboard-question-sql-dataset-config.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js +34 -0
- package/dist/repository/dashboard-question-sql-dataset-config.repository.js.map +1 -0
- package/dist/repository/dashboard-question.repository.d.ts +12 -0
- package/dist/repository/dashboard-question.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-question.repository.js +34 -0
- package/dist/repository/dashboard-question.repository.js.map +1 -0
- package/dist/repository/dashboard-variable.repository.d.ts +12 -0
- package/dist/repository/dashboard-variable.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-variable.repository.js +34 -0
- package/dist/repository/dashboard-variable.repository.js.map +1 -0
- package/dist/repository/dashboard.repository.d.ts +9 -5
- package/dist/repository/dashboard.repository.d.ts.map +1 -1
- package/dist/repository/dashboard.repository.js +11 -5
- package/dist/repository/dashboard.repository.js.map +1 -1
- package/dist/repository/email-template.repository.d.ts +12 -0
- package/dist/repository/email-template.repository.d.ts.map +1 -0
- package/dist/repository/email-template.repository.js +34 -0
- package/dist/repository/email-template.repository.js.map +1 -0
- package/dist/repository/export-template.repository.d.ts +12 -0
- package/dist/repository/export-template.repository.d.ts.map +1 -0
- package/dist/repository/export-template.repository.js +34 -0
- package/dist/repository/export-template.repository.js.map +1 -0
- package/dist/repository/export-transaction.repository.d.ts +12 -0
- package/dist/repository/export-transaction.repository.d.ts.map +1 -0
- package/dist/repository/export-transaction.repository.js +34 -0
- package/dist/repository/export-transaction.repository.js.map +1 -0
- package/dist/repository/field-metadata.repository.d.ts +4 -3
- package/dist/repository/field-metadata.repository.d.ts.map +1 -1
- package/dist/repository/field-metadata.repository.js +5 -5
- package/dist/repository/field-metadata.repository.js.map +1 -1
- package/dist/repository/import-transaction-error-log.repository.d.ts +12 -0
- package/dist/repository/import-transaction-error-log.repository.d.ts.map +1 -0
- package/dist/repository/import-transaction-error-log.repository.js +34 -0
- package/dist/repository/import-transaction-error-log.repository.js.map +1 -0
- package/dist/repository/import-transaction.repository.d.ts +12 -0
- package/dist/repository/import-transaction.repository.d.ts.map +1 -0
- package/dist/repository/import-transaction.repository.js +34 -0
- package/dist/repository/import-transaction.repository.js.map +1 -0
- package/dist/repository/list-of-values.repository.d.ts +12 -0
- package/dist/repository/list-of-values.repository.d.ts.map +1 -0
- package/dist/repository/list-of-values.repository.js +34 -0
- package/dist/repository/list-of-values.repository.js.map +1 -0
- package/dist/repository/locale.repository.d.ts +12 -0
- package/dist/repository/locale.repository.d.ts.map +1 -0
- package/dist/repository/locale.repository.js +34 -0
- package/dist/repository/locale.repository.js.map +1 -0
- package/dist/repository/media-storage-provider-metadata.repository.d.ts +8 -0
- package/dist/repository/media-storage-provider-metadata.repository.d.ts.map +1 -0
- package/dist/repository/media-storage-provider-metadata.repository.js +28 -0
- package/dist/repository/media-storage-provider-metadata.repository.js.map +1 -0
- package/dist/repository/media.repository.d.ts +13 -8
- package/dist/repository/media.repository.d.ts.map +1 -1
- package/dist/repository/media.repository.js +18 -18
- package/dist/repository/media.repository.js.map +1 -1
- package/dist/repository/menu-item-metadata.repository.d.ts +12 -0
- package/dist/repository/menu-item-metadata.repository.d.ts.map +1 -0
- package/dist/repository/menu-item-metadata.repository.js +34 -0
- package/dist/repository/menu-item-metadata.repository.js.map +1 -0
- package/dist/repository/model-metadata.repository.d.ts +8 -0
- package/dist/repository/model-metadata.repository.d.ts.map +1 -0
- package/dist/repository/model-metadata.repository.js +28 -0
- package/dist/repository/model-metadata.repository.js.map +1 -0
- package/dist/repository/module-metadata.repository.d.ts +8 -0
- package/dist/repository/module-metadata.repository.d.ts.map +1 -0
- package/dist/repository/module-metadata.repository.js +28 -0
- package/dist/repository/module-metadata.repository.js.map +1 -0
- package/dist/repository/mq-message-queue.repository.d.ts +12 -0
- package/dist/repository/mq-message-queue.repository.d.ts.map +1 -0
- package/dist/repository/mq-message-queue.repository.js +34 -0
- package/dist/repository/mq-message-queue.repository.js.map +1 -0
- package/dist/repository/mq-message.repository.d.ts +12 -0
- package/dist/repository/mq-message.repository.d.ts.map +1 -0
- package/dist/repository/mq-message.repository.js +34 -0
- package/dist/repository/mq-message.repository.js.map +1 -0
- package/dist/repository/permission-metadata.repository.d.ts +12 -0
- package/dist/repository/permission-metadata.repository.d.ts.map +1 -0
- package/dist/repository/permission-metadata.repository.js +34 -0
- package/dist/repository/permission-metadata.repository.js.map +1 -0
- package/dist/repository/role-metadata.repository.d.ts +12 -0
- package/dist/repository/role-metadata.repository.d.ts.map +1 -0
- package/dist/repository/role-metadata.repository.js +34 -0
- package/dist/repository/role-metadata.repository.js.map +1 -0
- package/dist/repository/saved-filters.repository.d.ts +12 -0
- package/dist/repository/saved-filters.repository.d.ts.map +1 -0
- package/dist/repository/saved-filters.repository.js +62 -0
- package/dist/repository/saved-filters.repository.js.map +1 -0
- package/dist/repository/scheduled-job.repository.d.ts +9 -9
- package/dist/repository/scheduled-job.repository.d.ts.map +1 -1
- package/dist/repository/scheduled-job.repository.js +11 -12
- package/dist/repository/scheduled-job.repository.js.map +1 -1
- package/dist/repository/security-rule.repository.d.ts +7 -7
- package/dist/repository/security-rule.repository.d.ts.map +1 -1
- package/dist/repository/security-rule.repository.js +28 -17
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/repository/setting.repository.d.ts +12 -0
- package/dist/repository/setting.repository.d.ts.map +1 -0
- package/dist/repository/setting.repository.js +34 -0
- package/dist/repository/setting.repository.js.map +1 -0
- package/dist/repository/sms-template.repository.d.ts +12 -0
- package/dist/repository/sms-template.repository.d.ts.map +1 -0
- package/dist/repository/sms-template.repository.js +34 -0
- package/dist/repository/sms-template.repository.js.map +1 -0
- package/dist/repository/solid-base.repository.d.ts +4 -3
- package/dist/repository/solid-base.repository.d.ts.map +1 -1
- package/dist/repository/solid-base.repository.js +12 -5
- package/dist/repository/solid-base.repository.js.map +1 -1
- package/dist/repository/user-activity-history.repository.d.ts +12 -0
- package/dist/repository/user-activity-history.repository.d.ts.map +1 -0
- package/dist/repository/user-activity-history.repository.js +34 -0
- package/dist/repository/user-activity-history.repository.js.map +1 -0
- package/dist/repository/user-view-metadata.repository.d.ts +12 -0
- package/dist/repository/user-view-metadata.repository.d.ts.map +1 -0
- package/dist/repository/user-view-metadata.repository.js +34 -0
- package/dist/repository/user-view-metadata.repository.js.map +1 -0
- package/dist/repository/view-metadata.repository.d.ts +9 -5
- package/dist/repository/view-metadata.repository.d.ts.map +1 -1
- package/dist/repository/view-metadata.repository.js +11 -5
- package/dist/repository/view-metadata.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +9 -5
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +32 -13
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.d.ts +2 -3
- package/dist/seeders/permission-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js +2 -5
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +109 -62
- package/dist/seeders/system-fields-seeder.service.d.ts +2 -3
- package/dist/seeders/system-fields-seeder.service.d.ts.map +1 -1
- package/dist/seeders/system-fields-seeder.service.js +4 -8
- package/dist/seeders/system-fields-seeder.service.js.map +1 -1
- package/dist/services/action-metadata.service.d.ts +7 -6
- package/dist/services/action-metadata.service.d.ts.map +1 -1
- package/dist/services/action-metadata.service.js +7 -8
- package/dist/services/action-metadata.service.js.map +1 -1
- package/dist/services/ai-interaction.service.d.ts +10 -9
- package/dist/services/ai-interaction.service.d.ts.map +1 -1
- package/dist/services/ai-interaction.service.js +9 -10
- package/dist/services/ai-interaction.service.js.map +1 -1
- package/dist/services/authentication.service.d.ts +3 -4
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +11 -11
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +12 -12
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +16 -18
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +5 -5
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +9 -9
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts +4 -3
- package/dist/services/dashboard-question-sql-dataset-config.service.d.ts.map +1 -1
- package/dist/services/dashboard-question-sql-dataset-config.service.js +2 -3
- package/dist/services/dashboard-question-sql-dataset-config.service.js.map +1 -1
- package/dist/services/dashboard-question.service.d.ts +4 -3
- package/dist/services/dashboard-question.service.d.ts.map +1 -1
- package/dist/services/dashboard-question.service.js +2 -2
- package/dist/services/dashboard-question.service.js.map +1 -1
- package/dist/services/dashboard-variable.service.d.ts +4 -3
- package/dist/services/dashboard-variable.service.d.ts.map +1 -1
- package/dist/services/dashboard-variable.service.js +2 -3
- package/dist/services/dashboard-variable.service.js.map +1 -1
- package/dist/services/email-template.service.d.ts +4 -3
- package/dist/services/email-template.service.d.ts.map +1 -1
- package/dist/services/email-template.service.js +2 -3
- package/dist/services/email-template.service.js.map +1 -1
- package/dist/services/export-template.service.d.ts +6 -4
- package/dist/services/export-template.service.d.ts.map +1 -1
- package/dist/services/export-template.service.js +14 -4
- package/dist/services/export-template.service.js.map +1 -1
- package/dist/services/export-transaction.service.d.ts +8 -7
- package/dist/services/export-transaction.service.d.ts.map +1 -1
- package/dist/services/export-transaction.service.js +11 -14
- package/dist/services/export-transaction.service.js.map +1 -1
- package/dist/services/field-metadata.service.js +1 -1
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/file.service.d.ts.map +1 -1
- package/dist/services/file.service.js +1 -17
- package/dist/services/file.service.js.map +1 -1
- package/dist/services/import-transaction-error-log.service.d.ts +4 -3
- package/dist/services/import-transaction-error-log.service.d.ts.map +1 -1
- package/dist/services/import-transaction-error-log.service.js +2 -3
- package/dist/services/import-transaction-error-log.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts +8 -4
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +43 -16
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.d.ts +19 -6
- package/dist/services/list-of-values.service.d.ts.map +1 -1
- package/dist/services/list-of-values.service.js +164 -9
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/locale.service.d.ts +9 -10
- package/dist/services/locale.service.d.ts.map +1 -1
- package/dist/services/locale.service.js +8 -14
- package/dist/services/locale.service.js.map +1 -1
- package/dist/services/mail/smtp-email.service.d.ts.map +1 -1
- package/dist/services/mail/smtp-email.service.js +6 -1
- package/dist/services/mail/smtp-email.service.js.map +1 -1
- package/dist/services/media-storage-provider-metadata.service.d.ts +4 -4
- package/dist/services/media-storage-provider-metadata.service.d.ts.map +1 -1
- package/dist/services/media-storage-provider-metadata.service.js +5 -11
- package/dist/services/media-storage-provider-metadata.service.js.map +1 -1
- package/dist/services/media.service.d.ts +7 -6
- package/dist/services/media.service.d.ts.map +1 -1
- package/dist/services/media.service.js +8 -12
- package/dist/services/media.service.js.map +1 -1
- package/dist/services/menu-item-metadata.service.d.ts +4 -3
- package/dist/services/menu-item-metadata.service.d.ts.map +1 -1
- package/dist/services/menu-item-metadata.service.js +4 -5
- package/dist/services/menu-item-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +3 -2
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +45 -43
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +3 -2
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +3 -3
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/mq-message-queue.service.d.ts +4 -3
- package/dist/services/mq-message-queue.service.d.ts.map +1 -1
- package/dist/services/mq-message-queue.service.js +2 -3
- package/dist/services/mq-message-queue.service.js.map +1 -1
- package/dist/services/mq-message.service.d.ts +4 -3
- package/dist/services/mq-message.service.d.ts.map +1 -1
- package/dist/services/mq-message.service.js +2 -2
- package/dist/services/mq-message.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +4 -3
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +2 -3
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.d.ts +8 -3
- package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +79 -18
- package/dist/services/queues/rabbitmq-publisher.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 +9 -3
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts +10 -9
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +9 -11
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/saved-filters.service.d.ts +7 -6
- package/dist/services/saved-filters.service.d.ts.map +1 -1
- package/dist/services/saved-filters.service.js +6 -7
- package/dist/services/saved-filters.service.js.map +1 -1
- package/dist/services/scheduled-job.service.d.ts +4 -3
- package/dist/services/scheduled-job.service.d.ts.map +1 -1
- package/dist/services/scheduled-job.service.js +2 -3
- package/dist/services/scheduled-job.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts +3 -4
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +6 -11
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/security-rule.service.d.ts +4 -3
- package/dist/services/security-rule.service.d.ts.map +1 -1
- package/dist/services/security-rule.service.js +3 -3
- package/dist/services/security-rule.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +3 -2
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +25 -9
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/sms-template.service.d.ts +4 -3
- package/dist/services/sms-template.service.d.ts.map +1 -1
- package/dist/services/sms-template.service.js +2 -3
- package/dist/services/sms-template.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +1 -0
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +14 -0
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user-activity-history.service.d.ts +4 -3
- package/dist/services/user-activity-history.service.d.ts.map +1 -1
- package/dist/services/user-activity-history.service.js +2 -3
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/user-view-metadata.service.d.ts +4 -3
- package/dist/services/user-view-metadata.service.d.ts.map +1 -1
- package/dist/services/user-view-metadata.service.js +2 -3
- package/dist/services/user-view-metadata.service.js.map +1 -1
- package/dist/services/user.service.d.ts +2 -2
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +3 -3
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +5 -6
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +5 -10
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +164 -121
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +4 -4
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +4 -5
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/{list-of-values-metadata.subscriber.d.ts → list-of-values.subscriber.d.ts} +5 -5
- package/dist/subscribers/list-of-values.subscriber.d.ts.map +1 -0
- package/dist/subscribers/{list-of-values-metadata.subscriber.js → list-of-values.subscriber.js} +13 -13
- package/dist/subscribers/list-of-values.subscriber.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/rebuild.sh +2 -3
- package/src/config/iam.config.ts +3 -2
- package/src/constants/error-messages.ts +3 -0
- package/src/controllers/authentication.controller.ts +2 -2
- package/src/controllers/email-template.controller.ts +57 -64
- package/src/controllers/export-template.controller.ts +4 -2
- package/src/controllers/import-transaction.controller.ts +5 -2
- package/src/controllers/sms-template.controller.ts +55 -55
- package/src/decorators/security-rule-config-provider.decorator.ts +7 -0
- package/src/decorators/solid-password.decorator.ts +25 -17
- package/src/dtos/change-password.dto.ts +1 -1
- package/src/dtos/confirm-forgot-password.dto.ts +1 -1
- package/src/dtos/create-saved-filters.dto.ts +4 -0
- package/src/dtos/create-security-rule.dto.ts +5 -0
- package/src/dtos/update-saved-filters.dto.ts +4 -0
- package/src/dtos/update-security-rule.dto.ts +6 -1
- package/src/entities/field-metadata.entity.ts +2 -1
- package/src/entities/saved-filters.entity.ts +3 -1
- package/src/entities/security-rule.entity.ts +2 -0
- package/src/helpers/model-metadata-helper.service.ts +4 -5
- package/src/helpers/module-metadata-helper.service.ts +9 -0
- package/src/helpers/solid-registry.ts +21 -2
- package/src/helpers/user-helper.ts +37 -0
- package/src/index.ts +0 -1
- package/src/interfaces.ts +7 -0
- package/src/jobs/trigger-mcp-client-subscriber.service.ts +2 -2
- package/src/jobs/twilio-sms-subscriber.service.ts +2 -2
- package/src/repository/action-metadata.repository.ts +17 -0
- package/src/repository/ai-interaction.repository.ts +17 -0
- package/src/repository/chatter-message-details.repository.ts +3 -3
- package/src/repository/chatter-message.repository.ts +2 -2
- package/src/repository/dashboard-question-sql-dataset-config.repository.ts +17 -0
- package/src/repository/dashboard-question.repository.ts +17 -0
- package/src/repository/dashboard-variable.repository.ts +17 -0
- package/src/repository/dashboard.repository.ts +10 -10
- package/src/repository/email-template.repository.ts +17 -0
- package/src/repository/export-template.repository.ts +17 -0
- package/src/repository/export-transaction.repository.ts +17 -0
- package/src/repository/field-metadata.repository.ts +8 -6
- package/src/repository/import-transaction-error-log.repository.ts +17 -0
- package/src/repository/import-transaction.repository.ts +17 -0
- package/src/repository/list-of-values.repository.ts +17 -0
- package/src/repository/locale.repository.ts +17 -0
- package/src/repository/media-storage-provider-metadata.repository.ts +15 -0
- package/src/repository/media.repository.ts +21 -15
- package/src/repository/menu-item-metadata.repository.ts +17 -0
- package/src/repository/model-metadata.repository.ts +15 -0
- package/src/repository/module-metadata.repository.ts +15 -0
- package/src/repository/mq-message-queue.repository.ts +17 -0
- package/src/repository/mq-message.repository.ts +17 -0
- package/src/repository/permission-metadata.repository.ts +17 -0
- package/src/repository/role-metadata.repository.ts +17 -0
- package/src/repository/saved-filters.repository.ts +65 -0
- package/src/repository/scheduled-job.repository.ts +13 -14
- package/src/repository/security-rule.repository.ts +45 -25
- package/src/repository/setting.repository.ts +17 -0
- package/src/repository/sms-template.repository.ts +17 -0
- package/src/repository/solid-base.repository.ts +16 -8
- package/src/repository/user-activity-history.repository.ts +17 -0
- package/src/repository/user-view-metadata.repository.ts +17 -0
- package/src/repository/view-metadata.repository.ts +10 -8
- package/src/seeders/module-metadata-seeder.service.ts +35 -5
- package/src/seeders/permission-metadata-seeder.service.ts +4 -2
- package/src/seeders/seed-data/solid-core-metadata.json +111 -66
- package/src/seeders/system-fields-seeder.service.ts +6 -4
- package/src/services/action-metadata.service.ts +9 -7
- package/src/services/ai-interaction.service.ts +15 -13
- package/src/services/authentication.service.ts +26 -12
- package/src/services/chatter-message.service.ts +23 -21
- package/src/services/crud.service.ts +27 -32
- package/src/services/dashboard-question-sql-dataset-config.service.ts +4 -2
- package/src/services/dashboard-question.service.ts +4 -2
- package/src/services/dashboard-variable.service.ts +5 -2
- package/src/services/docker exec -it mssql //" +8 -0
- package/src/services/email-template.service.ts +4 -2
- package/src/services/export-template.service.ts +22 -4
- package/src/services/export-transaction.service.ts +16 -9
- package/src/services/field-metadata.service.ts +1 -1
- package/src/services/file.service.ts +1 -24
- package/src/services/import-transaction-error-log.service.ts +4 -2
- package/src/services/import-transaction.service.ts +109 -30
- package/src/services/list-of-values.service.ts +192 -8
- package/src/services/locale.service.ts +16 -14
- package/src/services/mail/smtp-email.service.ts +7 -1
- package/src/services/media-storage-provider-metadata.service.ts +10 -9
- package/src/services/media.service.ts +16 -8
- package/src/services/menu-item-metadata.service.ts +7 -4
- package/src/services/model-metadata.service.ts +64 -58
- package/src/services/module-metadata.service.ts +6 -3
- package/src/services/mq-message-queue.service.ts +4 -2
- package/src/services/mq-message.service.ts +4 -2
- package/src/services/permission-metadata.service.ts +5 -3
- package/src/services/queues/rabbitmq-publisher.service.ts +99 -41
- package/src/services/queues/rabbitmq-subscriber.service.ts +18 -5
- package/src/services/role-metadata.service.ts +16 -12
- package/src/services/saved-filters.service.ts +10 -8
- package/src/services/scheduled-job.service.ts +4 -2
- package/src/services/scheduled-jobs/scheduler.service.ts +9 -9
- package/src/services/security-rule.service.ts +6 -3
- package/src/services/setting.service.ts +31 -14
- package/src/services/sms-template.service.ts +4 -2
- package/src/services/solid-introspect.service.ts +23 -2
- package/src/services/user-activity-history.service.ts +4 -2
- package/src/services/user-view-metadata.service.ts +4 -2
- package/src/services/user.service.ts +5 -2
- package/src/services/view-metadata.service.ts +11 -9
- package/src/solid-core.module.ts +166 -138
- package/src/subscribers/audit.subscriber.ts +8 -7
- package/src/subscribers/{list-of-values-metadata.subscriber.ts → list-of-values.subscriber.ts} +7 -7
- package/dist/repository/field.repository.d.ts +0 -9
- package/dist/repository/field.repository.d.ts.map +0 -1
- package/dist/repository/field.repository.js +0 -46
- package/dist/repository/field.repository.js.map +0 -1
- package/dist/services/list-of-values-metadata.service.d.ts +0 -34
- package/dist/services/list-of-values-metadata.service.d.ts.map +0 -1
- package/dist/services/list-of-values-metadata.service.js +0 -213
- package/dist/services/list-of-values-metadata.service.js.map +0 -1
- package/dist/subscribers/list-of-values-metadata.subscriber.d.ts.map +0 -1
- package/dist/subscribers/list-of-values-metadata.subscriber.js.map +0 -1
- package/solid_seed_fixes.ts.txt +0 -93
- package/src/repository/field.repository.ts +0 -33
- package/src/services/list-of-values-metadata.service.ts +0 -216
|
@@ -1,13 +1,19 @@
|
|
|
1
1
|
import { BadRequestException, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
2
|
-
import { InjectDataSource
|
|
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';
|
|
5
5
|
import { CreateModelMetadataDto } from '../dtos/create-model-metadata.dto';
|
|
6
6
|
import { ModelMetadata } from '../entities/model-metadata.entity';
|
|
7
7
|
import { ModuleMetadata } from '../entities/module-metadata.entity';
|
|
8
8
|
|
|
9
|
+
import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
|
|
10
|
+
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
11
|
+
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
9
12
|
import { SolidFieldType } from 'src/dtos/create-field-metadata.dto';
|
|
13
|
+
import { PermissionMetadata } from 'src/entities/permission-metadata.entity';
|
|
10
14
|
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
15
|
+
import { FieldMetadataRepository } from 'src/repository/field-metadata.repository';
|
|
16
|
+
import { ModelMetadataRepository } from 'src/repository/model-metadata.repository';
|
|
11
17
|
import { BasicFilterDto } from '../dtos/basic-filters.dto';
|
|
12
18
|
import { UpdateModelMetaDataDto } from '../dtos/update-model-metadata.dto';
|
|
13
19
|
import { ActionMetadata } from '../entities/action-metadata.entity';
|
|
@@ -24,19 +30,17 @@ import { CrudHelperService } from './crud-helper.service';
|
|
|
24
30
|
import { FieldMetadataService } from './field-metadata.service';
|
|
25
31
|
import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
|
|
26
32
|
import { RoleMetadataService } from './role-metadata.service';
|
|
27
|
-
import { PermissionMetadata } from 'src/entities/permission-metadata.entity';
|
|
28
|
-
import { classify, dasherize } from '@angular-devkit/core/src/utils/strings';
|
|
29
|
-
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
30
|
-
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
31
33
|
|
|
32
34
|
@Injectable()
|
|
33
35
|
export class ModelMetadataService {
|
|
34
36
|
private logger = new Logger('ModelMetadataService');
|
|
35
37
|
constructor(
|
|
36
|
-
@InjectRepository(ModelMetadata)
|
|
37
|
-
private readonly modelMetadataRepo: Repository<ModelMetadata>,
|
|
38
|
-
@InjectRepository(FieldMetadata)
|
|
39
|
-
private readonly fieldMetadataRepo: Repository<FieldMetadata>,
|
|
38
|
+
// @InjectRepository(ModelMetadata)
|
|
39
|
+
// private readonly modelMetadataRepo: Repository<ModelMetadata>,
|
|
40
|
+
// @InjectRepository(FieldMetadata)
|
|
41
|
+
// private readonly fieldMetadataRepo: Repository<FieldMetadata>,
|
|
42
|
+
private readonly modelMetadataRepo: ModelMetadataRepository,
|
|
43
|
+
private readonly fieldMetadataRepo: FieldMetadataRepository,
|
|
40
44
|
private readonly schematicService: SchematicService,
|
|
41
45
|
@InjectDataSource()
|
|
42
46
|
private readonly dataSource: DataSource,
|
|
@@ -55,7 +59,7 @@ export class ModelMetadataService {
|
|
|
55
59
|
let { limit, offset } = basicFilterDto;
|
|
56
60
|
|
|
57
61
|
// Create above query on pincode table using query builder
|
|
58
|
-
var qb: SelectQueryBuilder<ModelMetadata> = this.modelMetadataRepo.
|
|
62
|
+
var qb: SelectQueryBuilder<ModelMetadata> = await this.modelMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)
|
|
59
63
|
qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
|
|
60
64
|
|
|
61
65
|
// Get the records and the count
|
|
@@ -555,50 +559,52 @@ export class ModelMetadataService {
|
|
|
555
559
|
return;
|
|
556
560
|
}
|
|
557
561
|
|
|
558
|
-
this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module
|
|
559
|
-
|
|
560
|
-
const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
562
|
+
this.logger.log(`Cleaning up for model: ${modelEntity.singularName} belonging to module: ${modelEntity.module?.name}`);
|
|
563
|
+
|
|
564
|
+
const modulePath = await this.moduleMetadataHelperService.getModulePath(modelEntity.module?.name);
|
|
565
|
+
if (modulePath) {
|
|
566
|
+
// /Users/harishpatel/Code/javascript/school-fees-portal/solid-api/src/solid-core
|
|
567
|
+
this.logger.log(`Module path: ${modulePath}`);
|
|
568
|
+
|
|
569
|
+
const filesToDelete = [];
|
|
570
|
+
// <singularName>.entity.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
571
|
+
const entityFilePath = `${modulePath}/entities/${dasherize(modelEntity.singularName)}.entity.ts`;
|
|
572
|
+
filesToDelete.push(entityFilePath);
|
|
573
|
+
this.logger.log(`About to delete entity file path: ${entityFilePath}`);
|
|
574
|
+
|
|
575
|
+
// <singularName>.create.dto.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
576
|
+
const createDtoFilePath = `${modulePath}/dtos/create-${dasherize(modelEntity.singularName)}.dto.ts`;
|
|
577
|
+
filesToDelete.push(createDtoFilePath);
|
|
578
|
+
this.logger.log(`About to delete create DTO file path: ${createDtoFilePath}`);
|
|
579
|
+
|
|
580
|
+
// <singularName>.update.dto.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
581
|
+
const updateDtoFilePath = `${modulePath}/dtos/update-${dasherize(modelEntity.singularName)}.dto.ts`;
|
|
582
|
+
filesToDelete.push(updateDtoFilePath);
|
|
583
|
+
this.logger.log(`About to delete update DTO file path: ${updateDtoFilePath}`);
|
|
584
|
+
|
|
585
|
+
// <singularName>.repository.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
586
|
+
const repositoryFilePath = `${modulePath}/repositories/${dasherize(modelEntity.singularName)}.repository.ts`;
|
|
587
|
+
filesToDelete.push(repositoryFilePath);
|
|
588
|
+
this.logger.log(`About to delete repository file path: ${repositoryFilePath}`);
|
|
589
|
+
|
|
590
|
+
// <singularName>.service.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
591
|
+
const serviceFilePath = `${modulePath}/services/${dasherize(modelEntity.singularName)}.service.ts`;
|
|
592
|
+
filesToDelete.push(serviceFilePath);
|
|
593
|
+
this.logger.log(`About to delete service file path: ${serviceFilePath}`);
|
|
594
|
+
|
|
595
|
+
// <singularName>.controller.ts | The TypeORM model that needs to be deleted. | Automatic
|
|
596
|
+
const controllerFilePath = `${modulePath}/controllers/${dasherize(modelEntity.singularName)}.controller.ts`;
|
|
597
|
+
filesToDelete.push(controllerFilePath);
|
|
598
|
+
this.logger.log(`About to delete controller file path: ${controllerFilePath}`);
|
|
599
|
+
|
|
600
|
+
for (let i = 0; i < filesToDelete.length; i++) {
|
|
601
|
+
const fileToDelete = filesToDelete[i];
|
|
602
|
+
try {
|
|
603
|
+
await fs.unlink(fileToDelete);
|
|
604
|
+
this.logger.log(`Deleted file: ${fileToDelete}`);
|
|
605
|
+
} catch (error) {
|
|
606
|
+
this.logger.error(`Error deleting file: ${fileToDelete}`, error);
|
|
607
|
+
}
|
|
602
608
|
}
|
|
603
609
|
}
|
|
604
610
|
|
|
@@ -655,7 +661,7 @@ export class ModelMetadataService {
|
|
|
655
661
|
await viewRepo.delete({ model: { id: modelEntity.id } })
|
|
656
662
|
|
|
657
663
|
// <moduleName>-metadata.json | Remove references to this model in the model metadata, menu, action & view sections. | Automatic
|
|
658
|
-
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module
|
|
664
|
+
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(modelEntity.module?.name);
|
|
659
665
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
660
666
|
if (metaData) {
|
|
661
667
|
const existingModelIndex = metaData.moduleMetadata.models.findIndex(
|
|
@@ -668,13 +674,13 @@ export class ModelMetadataService {
|
|
|
668
674
|
}
|
|
669
675
|
|
|
670
676
|
// Remove references to this model in the menu, action & view sections.
|
|
671
|
-
metaData.moduleMetadata.menus = metaData.moduleMetadata
|
|
677
|
+
metaData.moduleMetadata.menus = metaData.moduleMetadata?.menus?.filter(
|
|
672
678
|
(menu: any) => menu.modelUserKey !== modelEntity.singularName
|
|
673
679
|
);
|
|
674
|
-
metaData.moduleMetadata.actions = metaData.moduleMetadata
|
|
680
|
+
metaData.moduleMetadata.actions = metaData.moduleMetadata?.actions?.filter(
|
|
675
681
|
(action: any) => action.modelUserKey !== modelEntity.singularName
|
|
676
682
|
);
|
|
677
|
-
metaData.moduleMetadata.views = metaData.moduleMetadata
|
|
683
|
+
metaData.moduleMetadata.views = metaData.moduleMetadata?.views?.filter(
|
|
678
684
|
(view: any) => view.modelUserKey !== modelEntity.singularName
|
|
679
685
|
);
|
|
680
686
|
|
|
@@ -23,6 +23,8 @@ import { ModelMetadataService } from './model-metadata.service';
|
|
|
23
23
|
import { ModuleMetadataHelperService } from 'src/helpers/module-metadata-helper.service';
|
|
24
24
|
import { DisallowInProduction } from 'src/decorators/disallow-in-production.decorator';
|
|
25
25
|
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
26
|
+
import Module from 'module';
|
|
27
|
+
import { ModuleMetadataRepository } from 'src/repository/module-metadata.repository';
|
|
26
28
|
|
|
27
29
|
@Injectable()
|
|
28
30
|
export class ModuleMetadataService {
|
|
@@ -31,8 +33,9 @@ export class ModuleMetadataService {
|
|
|
31
33
|
constructor(
|
|
32
34
|
@InjectDataSource()
|
|
33
35
|
private readonly dataSource: DataSource,
|
|
34
|
-
@InjectRepository(ModuleMetadata)
|
|
35
|
-
private readonly moduleMetadataRepo: Repository<ModuleMetadata>,
|
|
36
|
+
// @InjectRepository(ModuleMetadata)
|
|
37
|
+
// private readonly moduleMetadataRepo: Repository<ModuleMetadata>,
|
|
38
|
+
private readonly moduleMetadataRepo: ModuleMetadataRepository,
|
|
36
39
|
private readonly crudHelperService: CrudHelperService,
|
|
37
40
|
private readonly schematicService: SchematicService,
|
|
38
41
|
private readonly configService: ConfigService,
|
|
@@ -50,7 +53,7 @@ export class ModuleMetadataService {
|
|
|
50
53
|
let { limit, offset } = basicFilterDto;
|
|
51
54
|
|
|
52
55
|
// Create above query on pincode table using query builder
|
|
53
|
-
var qb: SelectQueryBuilder<ModuleMetadata> = this.moduleMetadataRepo.
|
|
56
|
+
var qb: SelectQueryBuilder<ModuleMetadata> = await this.moduleMetadataRepo.createSecurityRuleAwareQueryBuilder(alias)
|
|
54
57
|
qb = await this.crudHelperService.buildFilterQuery(qb, basicFilterDto, alias);
|
|
55
58
|
|
|
56
59
|
// Get the records and the count
|
|
@@ -11,6 +11,7 @@ import { CrudHelperService } from "src/services/crud-helper.service";
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
import { MqMessageQueue } from '../entities/mq-message-queue.entity';
|
|
14
|
+
import { MqMessageQueueRepository } from 'src/repository/mq-message-queue.repository';
|
|
14
15
|
|
|
15
16
|
@Injectable()
|
|
16
17
|
export class MqMessageQueueService extends CRUDService<MqMessageQueue> {
|
|
@@ -24,8 +25,9 @@ export class MqMessageQueueService extends CRUDService<MqMessageQueue> {
|
|
|
24
25
|
readonly crudHelperService: CrudHelperService,
|
|
25
26
|
@InjectEntityManager()
|
|
26
27
|
readonly entityManager: EntityManager,
|
|
27
|
-
@InjectRepository(MqMessageQueue)
|
|
28
|
-
readonly repo: Repository<MqMessageQueue>,
|
|
28
|
+
// @InjectRepository(MqMessageQueue)
|
|
29
|
+
// readonly repo: Repository<MqMessageQueue>,
|
|
30
|
+
readonly repo: MqMessageQueueRepository,
|
|
29
31
|
readonly moduleRef: ModuleRef
|
|
30
32
|
|
|
31
33
|
) {
|
|
@@ -10,6 +10,7 @@ import { FileService } from "src/services/file.service";
|
|
|
10
10
|
import { CrudHelperService } from "src/services/crud-helper.service";
|
|
11
11
|
import { MqMessage } from '../entities/mq-message.entity';
|
|
12
12
|
import { Logger } from '@nestjs/common';
|
|
13
|
+
import { MqMessageRepository } from 'src/repository/mq-message.repository';
|
|
13
14
|
|
|
14
15
|
@Injectable()
|
|
15
16
|
export class MqMessageService extends CRUDService<MqMessage> {
|
|
@@ -25,8 +26,9 @@ export class MqMessageService extends CRUDService<MqMessage> {
|
|
|
25
26
|
readonly crudHelperService: CrudHelperService,
|
|
26
27
|
@InjectEntityManager()
|
|
27
28
|
readonly entityManager: EntityManager,
|
|
28
|
-
@InjectRepository(MqMessage)
|
|
29
|
-
readonly repo: Repository<MqMessage>,
|
|
29
|
+
// @InjectRepository(MqMessage)
|
|
30
|
+
// readonly repo: Repository<MqMessage>,
|
|
31
|
+
readonly repo: MqMessageRepository,
|
|
30
32
|
readonly moduleRef: ModuleRef
|
|
31
33
|
) {
|
|
32
34
|
super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'mqMessage', 'solid-core', moduleRef);
|
|
@@ -13,6 +13,7 @@ import { CrudHelperService } from "src/services/crud-helper.service";
|
|
|
13
13
|
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
14
14
|
import { ActiveUserData } from '../interfaces/active-user-data.interface';
|
|
15
15
|
import { classify } from '@angular-devkit/core/src/utils/strings';
|
|
16
|
+
import { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';
|
|
16
17
|
|
|
17
18
|
@Injectable()
|
|
18
19
|
export class PermissionMetadataService extends CRUDService<PermissionMetadata> {
|
|
@@ -25,9 +26,10 @@ export class PermissionMetadataService extends CRUDService<PermissionMetadata> {
|
|
|
25
26
|
readonly crudHelperService: CrudHelperService,
|
|
26
27
|
@InjectEntityManager()
|
|
27
28
|
readonly entityManager: EntityManager,
|
|
28
|
-
@InjectRepository(PermissionMetadata, 'default')
|
|
29
|
-
readonly repo: Repository<PermissionMetadata>,
|
|
30
|
-
|
|
29
|
+
// @InjectRepository(PermissionMetadata, 'default')
|
|
30
|
+
// readonly repo: Repository<PermissionMetadata>,
|
|
31
|
+
readonly repo: PermissionMetadataRepository,
|
|
32
|
+
readonly moduleRef: ModuleRef
|
|
31
33
|
|
|
32
34
|
) {
|
|
33
35
|
super(modelMetadataService, moduleMetadataService, configService, fileService, discoveryService, crudHelperService, entityManager, repo, 'permissionMetadata', 'solid-core',moduleRef);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Logger } from '@nestjs/common';
|
|
1
|
+
import { Logger, OnModuleDestroy } from '@nestjs/common';
|
|
2
2
|
import * as amqp from 'amqplib';
|
|
3
3
|
import { v4 as uuidv4 } from 'uuid';
|
|
4
4
|
import { QueuesModuleOptions } from "../../interfaces";
|
|
@@ -6,11 +6,16 @@ import { QueueMessage, QueuePublisher } from '../../interfaces/mq';
|
|
|
6
6
|
import { MqMessageQueueService } from '../mq-message-queue.service';
|
|
7
7
|
import { MqMessageService } from '../mq-message.service';
|
|
8
8
|
|
|
9
|
-
export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
|
|
9
|
+
export abstract class RabbitMqPublisher<T> implements OnModuleDestroy, QueuePublisher<T> {
|
|
10
10
|
private readonly logger = new Logger(RabbitMqPublisher.name);
|
|
11
11
|
private readonly url: string;
|
|
12
12
|
private readonly serviceRole: string;
|
|
13
13
|
|
|
14
|
+
// Maintain connection...
|
|
15
|
+
private connection: amqp.Connection | null = null;
|
|
16
|
+
private channel: amqp.Channel | null = null;
|
|
17
|
+
private connectingPromise: Promise<void> | null = null;
|
|
18
|
+
|
|
14
19
|
constructor(
|
|
15
20
|
protected readonly mqMessageService: MqMessageService,
|
|
16
21
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -23,27 +28,106 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
|
|
|
23
28
|
if (!this.serviceRole) {
|
|
24
29
|
this.logger.debug('Queue service Role is not defined in the environment variables');
|
|
25
30
|
}
|
|
26
|
-
this.logger.debug(`RabbitMqPublisher instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
31
|
+
// this.logger.debug(`RabbitMqPublisher instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
abstract options(): QueuesModuleOptions;
|
|
30
35
|
|
|
31
|
-
async
|
|
36
|
+
private async ensureConnectionAndChannel(): Promise<amqp.Channel> {
|
|
37
|
+
if (this.channel) {
|
|
38
|
+
return this.channel;
|
|
39
|
+
}
|
|
32
40
|
|
|
33
|
-
|
|
41
|
+
// If another call is already connecting, wait for it
|
|
42
|
+
if (this.connectingPromise) {
|
|
43
|
+
await this.connectingPromise;
|
|
44
|
+
if (this.channel) return this.channel;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this.connectingPromise = (async () => {
|
|
48
|
+
const url = new URL(this.url);
|
|
49
|
+
|
|
50
|
+
const conn = await amqp.connect({
|
|
51
|
+
protocol: url.protocol.replace(':', ''), // "amqps"
|
|
52
|
+
hostname: url.hostname,
|
|
53
|
+
port: parseInt(url.port),
|
|
54
|
+
username: url.username,
|
|
55
|
+
// Node's URL already decodes percent-encoding; decodeURIComponent is not needed
|
|
56
|
+
// But without it does not seem to be working...
|
|
57
|
+
password: decodeURIComponent(url.password),
|
|
58
|
+
frameMax: 131072,
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
conn.on('error', (err) => {
|
|
62
|
+
this.logger.error(`RabbitMQ connection error: ${err.message}`, err.stack);
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
conn.on('close', () => {
|
|
66
|
+
this.logger.warn('RabbitMQ connection closed, resetting');
|
|
67
|
+
this.connection = null;
|
|
68
|
+
this.channel = null;
|
|
69
|
+
});
|
|
34
70
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
71
|
+
const channel = await conn.createChannel();
|
|
72
|
+
|
|
73
|
+
const options = this.options();
|
|
74
|
+
const queueName = options.queueName;
|
|
75
|
+
const exchangeName = `${queueName}.exchange`;
|
|
76
|
+
const routingKey = `${queueName}.routing-key`;
|
|
77
|
+
|
|
78
|
+
await channel.assertExchange(exchangeName, 'direct', {});
|
|
79
|
+
const queue = await channel.assertQueue(queueName, {});
|
|
80
|
+
await channel.bindQueue(queue.queue, exchangeName, routingKey);
|
|
81
|
+
|
|
82
|
+
this.connection = conn;
|
|
83
|
+
this.channel = channel;
|
|
84
|
+
})();
|
|
85
|
+
|
|
86
|
+
try {
|
|
87
|
+
await this.connectingPromise;
|
|
88
|
+
} finally {
|
|
89
|
+
this.connectingPromise = null;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (!this.channel) {
|
|
93
|
+
throw new Error('Failed to initialize RabbitMQ channel');
|
|
94
|
+
}
|
|
43
95
|
|
|
44
|
-
return
|
|
96
|
+
return this.channel;
|
|
45
97
|
}
|
|
46
98
|
|
|
99
|
+
// Nest will call this for every subclass instance, because they inherit the method
|
|
100
|
+
async onModuleDestroy(): Promise<void> {
|
|
101
|
+
await this.closeConnectionAndChannel();
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private async closeConnectionAndChannel(): Promise<void> {
|
|
105
|
+
if (this.channel) {
|
|
106
|
+
try {
|
|
107
|
+
await this.channel.close();
|
|
108
|
+
} catch (err) {
|
|
109
|
+
this.logger.warn(
|
|
110
|
+
`RabbitMqPublisher error closing channel: ${(err as Error).message}`,
|
|
111
|
+
);
|
|
112
|
+
} finally {
|
|
113
|
+
this.channel = null;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (this.connection) {
|
|
118
|
+
try {
|
|
119
|
+
await this.connection.close();
|
|
120
|
+
} catch (err) {
|
|
121
|
+
this.logger.warn(
|
|
122
|
+
`RabbitMqPublisher error closing connection: ${(err as Error).message}`,
|
|
123
|
+
);
|
|
124
|
+
} finally {
|
|
125
|
+
this.connection = null;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
|
|
47
131
|
async publish(message: QueueMessage<T>): Promise<string> {
|
|
48
132
|
if (!this.url) {
|
|
49
133
|
this.logger.error('RabbitMqPublisher url is not defined in the environment variables');
|
|
@@ -58,13 +142,7 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
|
|
|
58
142
|
throw new Error('Queue service Role is subscriber, cannot publish messages');
|
|
59
143
|
}
|
|
60
144
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// const connection = await amqp.connect(this.url);
|
|
64
|
-
const connection = await this.establishConnection();
|
|
65
|
-
// this.logger.debug(`RabbitMqPublisher publisher connected options: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
66
|
-
|
|
67
|
-
const channel = await connection.createChannel();
|
|
145
|
+
const channel = await this.ensureConnectionAndChannel();
|
|
68
146
|
// this.logger.debug(`RabbitMqPublisher publisher channel created options: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
69
147
|
|
|
70
148
|
const options = this.options();
|
|
@@ -73,15 +151,6 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
|
|
|
73
151
|
const exchangeName = `${queueName}.exchange`;
|
|
74
152
|
const routingKey = `${queueName}.routing-key`;
|
|
75
153
|
|
|
76
|
-
await channel.assertExchange(exchangeName, 'direct', {});
|
|
77
|
-
// this.logger.debug(`RabbitMqPublisher channel asserted: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
78
|
-
|
|
79
|
-
const queue = await channel.assertQueue(queueName, {});
|
|
80
|
-
// this.logger.debug(`RabbitMqPublisher queue asserted: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
81
|
-
|
|
82
|
-
await channel.bindQueue(queue.queue, exchangeName, routingKey);
|
|
83
|
-
// this.logger.debug(`RabbitMqPublisher queue bound: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
84
|
-
|
|
85
154
|
// Set default values for retry.
|
|
86
155
|
// by default there are no retries.
|
|
87
156
|
if (!message.retryCount) message.retryCount = 0;
|
|
@@ -111,20 +180,9 @@ export abstract class RabbitMqPublisher<T> implements QueuePublisher<T> {
|
|
|
111
180
|
}
|
|
112
181
|
}
|
|
113
182
|
finally {
|
|
114
|
-
// TODO: check if we want to do this or keep the connection open all the time.
|
|
115
|
-
// connection.close();
|
|
116
|
-
// setTimeout(() => {
|
|
117
|
-
// connection.close();
|
|
118
|
-
// this.logger.error('RabbitMqPublisher connection closed');
|
|
119
|
-
// }, 3000);
|
|
120
183
|
}
|
|
121
184
|
// this.logger.debug(`Sent message: ${JSON.stringify(message)}`);
|
|
122
185
|
|
|
123
|
-
// TODO: check if we want to do this or keep the connection open all the time.
|
|
124
|
-
// setTimeout(() => {
|
|
125
|
-
// connection.close();
|
|
126
|
-
// }, 500);
|
|
127
|
-
|
|
128
186
|
// return the newly created message id.
|
|
129
187
|
return message.messageId;
|
|
130
188
|
}
|
|
@@ -23,7 +23,7 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
23
23
|
if (!this.serviceRole) {
|
|
24
24
|
this.logger.debug('Queue service Role is not defined in the environment variables');
|
|
25
25
|
}
|
|
26
|
-
this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
26
|
+
// this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
abstract subscribe(message: QueueMessage<T>);
|
|
@@ -34,12 +34,17 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
34
34
|
|
|
35
35
|
const url = new URL(this.url);
|
|
36
36
|
|
|
37
|
+
// this.logger.debug(`user: ${url.username}`);
|
|
38
|
+
// // just for local debug, don’t log in prod
|
|
39
|
+
// this.logger.debug(`pass: ${url.password}`);
|
|
40
|
+
// this.logger.debug(`path (vhost): ${url.pathname}`);
|
|
41
|
+
|
|
37
42
|
const connection = await amqp.connect({
|
|
38
43
|
protocol: url.protocol.replace(':', ''),
|
|
39
44
|
hostname: url.hostname,
|
|
40
45
|
port: parseInt(url.port),
|
|
41
46
|
username: url.username,
|
|
42
|
-
password: url.password,
|
|
47
|
+
password: decodeURIComponent(url.password),
|
|
43
48
|
frameMax: 131072,
|
|
44
49
|
});
|
|
45
50
|
|
|
@@ -50,10 +55,18 @@ export abstract class RabbitMqSubscriber<T> implements OnModuleInit, QueueSubscr
|
|
|
50
55
|
// we will start subscriber only if the current service role is subscriber.
|
|
51
56
|
if (this.url && ['both', 'subscriber'].includes(this.serviceRole)) {
|
|
52
57
|
|
|
53
|
-
// this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
58
|
+
// this.logger.debug(`RabbitMqSubscriber instance created with options: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
54
59
|
// const connection = await amqp.connect(this.url);
|
|
55
|
-
|
|
56
|
-
|
|
60
|
+
|
|
61
|
+
let connection;
|
|
62
|
+
try {
|
|
63
|
+
connection = await this.establishConnection();
|
|
64
|
+
// this.logger.debug(`RabbitMqSubscriber connection established: ${JSON.stringify(this.options())} and url: ${this.url}`);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
this.logger.error(`Failed to connect to RabbitMQ: ${(err as Error).message}`, (err as Error).stack);
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
57
70
|
|
|
58
71
|
const channel = await connection.createChannel();
|
|
59
72
|
// this.logger.debug(`RabbitMqSubscriber channel created: ${JSON.stringify(this.options())} and url: ${url}`);
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
import { forwardRef, Inject, Injectable, Logger, NotFoundException } from '@nestjs/common';
|
|
2
|
-
import {
|
|
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
|
-
import { RoleMetadata } from '../entities/role-metadata.entity';
|
|
13
|
-
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
14
|
-
import { CreateRoleMetadataDto } from '../dtos/create-role-metadata.dto';
|
|
15
12
|
import { ERROR_MESSAGES } from 'src/constants/error-messages';
|
|
13
|
+
import { PermissionMetadataRepository } from 'src/repository/permission-metadata.repository';
|
|
14
|
+
import { RoleMetadataRepository } from 'src/repository/role-metadata.repository';
|
|
15
|
+
import { CreateRoleMetadataDto } from '../dtos/create-role-metadata.dto';
|
|
16
|
+
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
17
|
+
import { RoleMetadata } from '../entities/role-metadata.entity';
|
|
16
18
|
|
|
17
19
|
@Injectable()
|
|
18
20
|
export class RoleMetadataService extends CRUDService<RoleMetadata> {
|
|
@@ -28,10 +30,12 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
|
|
|
28
30
|
readonly crudHelperService: CrudHelperService,
|
|
29
31
|
@InjectEntityManager()
|
|
30
32
|
readonly entityManager: EntityManager,
|
|
31
|
-
@InjectRepository(RoleMetadata, 'default')
|
|
32
|
-
readonly repo: Repository<RoleMetadata>,
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
// @InjectRepository(RoleMetadata, 'default')
|
|
34
|
+
// readonly repo: Repository<RoleMetadata>,
|
|
35
|
+
readonly repo: RoleMetadataRepository,
|
|
36
|
+
// @InjectRepository(PermissionMetadata)
|
|
37
|
+
// private readonly permissionRepository: Repository<PermissionMetadata>,
|
|
38
|
+
readonly permissionRepository: PermissionMetadataRepository,
|
|
35
39
|
readonly moduleRef: ModuleRef
|
|
36
40
|
|
|
37
41
|
) {
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { Injectable } from '@nestjs/common';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { EntityManager
|
|
2
|
+
import { DiscoveryService, ModuleRef } from "@nestjs/core";
|
|
3
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
|
+
import { EntityManager } from 'typeorm';
|
|
5
5
|
|
|
6
|
+
import { ConfigService } from '@nestjs/config';
|
|
7
|
+
import { CrudHelperService } from 'src/services/crud-helper.service';
|
|
6
8
|
import { CRUDService } from 'src/services/crud.service';
|
|
9
|
+
import { FileService } from 'src/services/file.service';
|
|
7
10
|
import { ModelMetadataService } from 'src/services/model-metadata.service';
|
|
8
11
|
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
12
|
|
|
13
13
|
|
|
14
|
+
import { SavedFiltersRepository } from 'src/repository/saved-filters.repository';
|
|
14
15
|
import { SavedFilters } from '../entities/saved-filters.entity';
|
|
15
16
|
|
|
16
17
|
@Injectable()
|
|
@@ -24,8 +25,9 @@ export class SavedFiltersService extends CRUDService<SavedFilters>{
|
|
|
24
25
|
readonly crudHelperService: CrudHelperService,
|
|
25
26
|
@InjectEntityManager()
|
|
26
27
|
readonly entityManager: EntityManager,
|
|
27
|
-
@InjectRepository(SavedFilters, 'default')
|
|
28
|
-
readonly repo: Repository<SavedFilters>,
|
|
28
|
+
// @InjectRepository(SavedFilters, 'default')
|
|
29
|
+
// readonly repo: Repository<SavedFilters>,
|
|
30
|
+
readonly repo: SavedFiltersRepository,
|
|
29
31
|
readonly moduleRef: ModuleRef
|
|
30
32
|
|
|
31
33
|
) {
|
|
@@ -10,6 +10,7 @@ import { FileService } from './file.service';
|
|
|
10
10
|
import { CrudHelperService } from './crud-helper.service';
|
|
11
11
|
import { CRUDService } from './crud.service';
|
|
12
12
|
import { Logger } from '@nestjs/common';
|
|
13
|
+
import { ScheduledJobRepository } from 'src/repository/scheduled-job.repository';
|
|
13
14
|
|
|
14
15
|
@Injectable()
|
|
15
16
|
export class ScheduledJobService extends CRUDService<ScheduledJob> {
|
|
@@ -24,8 +25,9 @@ export class ScheduledJobService extends CRUDService<ScheduledJob> {
|
|
|
24
25
|
readonly crudHelperService: CrudHelperService,
|
|
25
26
|
@InjectEntityManager()
|
|
26
27
|
readonly entityManager: EntityManager,
|
|
27
|
-
@InjectRepository(ScheduledJob)
|
|
28
|
-
readonly repo: Repository<ScheduledJob>,
|
|
28
|
+
// @InjectRepository(ScheduledJob)
|
|
29
|
+
// readonly repo: Repository<ScheduledJob>,
|
|
30
|
+
readonly repo: ScheduledJobRepository,
|
|
29
31
|
readonly moduleRef: ModuleRef
|
|
30
32
|
|
|
31
33
|
) {
|