@solidxai/core 0.1.6-beta.9 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +15 -0
- package/CHANGELOG.md +71 -0
- package/dist/controllers/dashboard-layout.controller.d.ts +47 -0
- package/dist/controllers/dashboard-layout.controller.d.ts.map +1 -0
- package/dist/controllers/dashboard-layout.controller.js +204 -0
- package/dist/controllers/dashboard-layout.controller.js.map +1 -0
- package/dist/dtos/create-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/create-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/create-dashboard-layout.dto.js +53 -0
- package/dist/dtos/create-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/create-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/create-dashboard-variable.dto.js +7 -1
- package/dist/dtos/create-dashboard-variable.dto.js.map +1 -1
- package/dist/dtos/update-dashboard-layout.dto.d.ts +8 -0
- package/dist/dtos/update-dashboard-layout.dto.d.ts.map +1 -0
- package/dist/dtos/update-dashboard-layout.dto.js +53 -0
- package/dist/dtos/update-dashboard-layout.dto.js.map +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts +1 -0
- package/dist/dtos/update-dashboard-variable.dto.d.ts.map +1 -1
- package/dist/dtos/update-dashboard-variable.dto.js +7 -1
- package/dist/dtos/update-dashboard-variable.dto.js.map +1 -1
- package/dist/entities/action-metadata.entity.d.ts.map +1 -1
- package/dist/entities/action-metadata.entity.js.map +1 -1
- package/dist/entities/ai-interaction.entity.d.ts.map +1 -1
- package/dist/entities/ai-interaction.entity.js +5 -4
- package/dist/entities/ai-interaction.entity.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +4 -3
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/chatter-message.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message.entity.js +4 -3
- package/dist/entities/chatter-message.entity.js.map +1 -1
- package/dist/entities/dashboard-layout.entity.d.ts +9 -0
- package/dist/entities/dashboard-layout.entity.d.ts.map +1 -0
- package/dist/entities/dashboard-layout.entity.js +41 -0
- package/dist/entities/dashboard-layout.entity.js.map +1 -0
- package/dist/entities/dashboard-question-sql-dataset-config.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js +5 -4
- package/dist/entities/dashboard-question-sql-dataset-config.entity.js.map +1 -1
- package/dist/entities/dashboard-question.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-question.entity.js +5 -4
- package/dist/entities/dashboard-question.entity.js.map +1 -1
- package/dist/entities/dashboard-variable.entity.d.ts +1 -0
- package/dist/entities/dashboard-variable.entity.d.ts.map +1 -1
- package/dist/entities/dashboard-variable.entity.js +10 -4
- package/dist/entities/dashboard-variable.entity.js.map +1 -1
- package/dist/entities/dashboard.entity.d.ts +2 -0
- package/dist/entities/dashboard.entity.d.ts.map +1 -1
- package/dist/entities/dashboard.entity.js +9 -3
- package/dist/entities/dashboard.entity.js.map +1 -1
- package/dist/entities/email-attachment.entity.d.ts.map +1 -1
- package/dist/entities/email-attachment.entity.js +2 -1
- package/dist/entities/email-attachment.entity.js.map +1 -1
- package/dist/entities/email-template.entity.js +1 -1
- package/dist/entities/email-template.entity.js.map +1 -1
- package/dist/entities/export-transaction.entity.d.ts.map +1 -1
- package/dist/entities/export-transaction.entity.js +2 -1
- package/dist/entities/export-transaction.entity.js.map +1 -1
- package/dist/entities/field-metadata.entity.js +2 -2
- package/dist/entities/field-metadata.entity.js.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction-error-log.entity.js +3 -2
- package/dist/entities/import-transaction-error-log.entity.js.map +1 -1
- package/dist/entities/import-transaction.entity.d.ts.map +1 -1
- package/dist/entities/import-transaction.entity.js +2 -1
- package/dist/entities/import-transaction.entity.js.map +1 -1
- package/dist/entities/mq-message-queue.entity.d.ts.map +1 -1
- package/dist/entities/mq-message-queue.entity.js.map +1 -1
- package/dist/entities/mq-message.entity.d.ts.map +1 -1
- package/dist/entities/mq-message.entity.js +5 -3
- package/dist/entities/mq-message.entity.js.map +1 -1
- package/dist/entities/saved-filters.entity.d.ts.map +1 -1
- package/dist/entities/saved-filters.entity.js +3 -2
- package/dist/entities/saved-filters.entity.js.map +1 -1
- package/dist/entities/security-rule.entity.d.ts.map +1 -1
- package/dist/entities/security-rule.entity.js +2 -1
- package/dist/entities/security-rule.entity.js.map +1 -1
- package/dist/entities/sms-template.entity.js +1 -1
- package/dist/entities/sms-template.entity.js.map +1 -1
- package/dist/entities/user-view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/user-view-metadata.entity.js +2 -1
- package/dist/entities/user-view-metadata.entity.js.map +1 -1
- package/dist/entities/user.entity.d.ts.map +1 -1
- package/dist/entities/user.entity.js +2 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/entities/view-metadata.entity.d.ts.map +1 -1
- package/dist/entities/view-metadata.entity.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts +14 -0
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -0
- package/dist/helpers/bootstrap.helper.js +132 -0
- package/dist/helpers/bootstrap.helper.js.map +1 -0
- package/dist/helpers/cache.helper.d.ts +2 -0
- package/dist/helpers/cache.helper.d.ts.map +1 -0
- package/dist/helpers/cache.helper.js +8 -0
- package/dist/helpers/cache.helper.js.map +1 -0
- package/dist/helpers/cors.helper.d.ts.map +1 -1
- package/dist/helpers/cors.helper.js +13 -4
- package/dist/helpers/cors.helper.js.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts +1 -0
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js +8 -9
- package/dist/helpers/field-crud-managers/MediaFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts +2 -2
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.d.ts.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js +8 -5
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
- package/dist/helpers/solid-registry.d.ts +3 -0
- package/dist/helpers/solid-registry.d.ts.map +1 -1
- package/dist/helpers/solid-registry.js +7 -0
- package/dist/helpers/solid-registry.js.map +1 -1
- package/dist/helpers/typeorm-db-helper.d.ts.map +1 -1
- package/dist/helpers/typeorm-db-helper.js +21 -0
- package/dist/helpers/typeorm-db-helper.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +2 -0
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/chatter-queue-options.js +1 -1
- package/dist/jobs/chatter-queue-options.js.map +1 -1
- package/dist/jobs/chatter-queue-publisher.service.d.ts +9 -9
- package/dist/jobs/chatter-queue-publisher.service.d.ts.map +1 -1
- package/dist/jobs/chatter-queue-publisher.service.js +5 -5
- package/dist/jobs/chatter-queue-publisher.service.js.map +1 -1
- package/dist/jobs/chatter-queue-subscriber.service.d.ts +4 -4
- package/dist/jobs/chatter-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/chatter-queue-subscriber.service.js +11 -11
- package/dist/jobs/chatter-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts +2 -0
- package/dist/jobs/computed-field-evaluation-queue-options.d.ts.map +1 -1
- package/dist/jobs/computed-field-evaluation-queue-options.js +2 -0
- package/dist/jobs/computed-field-evaluation-queue-options.js.map +1 -1
- package/dist/jobs/database/chatter-queue-options-database.d.ts +8 -0
- package/dist/jobs/database/chatter-queue-options-database.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-options-database.js +10 -0
- package/dist/jobs/database/chatter-queue-options-database.js.map +1 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts +12 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.js +39 -0
- package/dist/jobs/database/chatter-queue-publisher-database.service.js.map +1 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts +19 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js +62 -0
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -0
- package/dist/repository/dashboard-layout.repository.d.ts +12 -0
- package/dist/repository/dashboard-layout.repository.d.ts.map +1 -0
- package/dist/repository/dashboard-layout.repository.js +34 -0
- package/dist/repository/dashboard-layout.repository.js.map +1 -0
- package/dist/repository/model-metadata.repository.d.ts +6 -1
- package/dist/repository/model-metadata.repository.d.ts.map +1 -1
- package/dist/repository/model-metadata.repository.js +41 -2
- package/dist/repository/model-metadata.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +4 -4
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +372 -32
- package/dist/services/chatter-message.service.d.ts +4 -4
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +33 -9
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts +7 -3
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js +61 -22
- package/dist/services/computed-fields/entity/sequence-num-computed-field-provider.js.map +1 -1
- package/dist/services/crud.service.js +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/dashboard-layout.service.d.ts +20 -0
- package/dist/services/dashboard-layout.service.d.ts.map +1 -0
- package/dist/services/dashboard-layout.service.js +120 -0
- package/dist/services/dashboard-layout.service.js.map +1 -0
- package/dist/services/dashboard.service.d.ts +2 -0
- package/dist/services/dashboard.service.d.ts.map +1 -1
- package/dist/services/dashboard.service.js +4 -0
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +3 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +21 -2
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/permission-metadata.service.d.ts +5 -1
- package/dist/services/permission-metadata.service.d.ts.map +1 -1
- package/dist/services/permission-metadata.service.js +66 -20
- package/dist/services/permission-metadata.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +6 -1
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/publisher-factory.service.js +0 -1
- package/dist/services/queues/publisher-factory.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.d.ts +1 -0
- package/dist/services/queues/rabbitmq-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +6 -1
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts +5 -1
- package/dist/services/queues/rabbitmq-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +84 -9
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/request-context.service.d.ts +2 -1
- package/dist/services/request-context.service.d.ts.map +1 -1
- package/dist/services/request-context.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.d.ts.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js +20 -2
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts +6 -1
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +27 -2
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +9 -0
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- package/dist/services/solid-ts-morph.service.js +76 -0
- package/dist/services/solid-ts-morph.service.js.map +1 -1
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +16 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +10 -7
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +58 -85
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js +3 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts +0 -1
- package/dist/subscribers/created-by-updated-by.subscriber.d.ts.map +1 -1
- package/dist/subscribers/created-by-updated-by.subscriber.js +3 -13
- package/dist/subscribers/created-by-updated-by.subscriber.js.map +1 -1
- package/dist/winston.logger.d.ts.map +1 -1
- package/dist/winston.logger.js +2 -1
- package/dist/winston.logger.js.map +1 -1
- package/package.json +3 -1
- package/sql/default/mariadb/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mariadb/proc_CleanupModuleMetadata.sql +56 -0
- package/sql/default/mysql/proc_CleanupModelMetadata.sql +153 -0
- package/sql/default/mysql/proc_CleanupModuleMetadata.sql +56 -0
- package/src/controllers/dashboard-layout.controller.ts +106 -0
- package/src/dtos/create-dashboard-layout.dto.ts +31 -0
- package/src/dtos/create-dashboard-variable.dto.ts +4 -0
- package/src/dtos/update-dashboard-layout.dto.ts +30 -0
- package/src/dtos/update-dashboard-variable.dto.ts +5 -1
- package/src/entities/action-metadata.entity.ts +3 -2
- package/src/entities/ai-interaction.entity.ts +5 -4
- package/src/entities/chatter-message-details.entity.ts +4 -3
- package/src/entities/chatter-message.entity.ts +4 -3
- package/src/entities/dashboard-layout.entity.ts +18 -0
- package/src/entities/dashboard-question-sql-dataset-config.entity.ts +5 -4
- package/src/entities/dashboard-question.entity.ts +5 -4
- package/src/entities/dashboard-variable.entity.ts +9 -4
- package/src/entities/dashboard.entity.ts +7 -2
- package/src/entities/email-attachment.entity.ts +2 -1
- package/src/entities/email-template.entity.ts +1 -1
- package/src/entities/export-transaction.entity.ts +2 -1
- package/src/entities/field-metadata.entity.ts +2 -2
- package/src/entities/import-transaction-error-log.entity.ts +3 -2
- package/src/entities/import-transaction.entity.ts +2 -1
- package/src/entities/mq-message-queue.entity.ts +8 -8
- package/src/entities/mq-message.entity.ts +5 -3
- package/src/entities/saved-filters.entity.ts +3 -2
- package/src/entities/security-rule.entity.ts +2 -1
- package/src/entities/sms-template.entity.ts +1 -1
- package/src/entities/user-view-metadata.entity.ts +2 -1
- package/src/entities/user.entity.ts +37 -2
- package/src/entities/view-metadata.entity.ts +3 -0
- package/src/helpers/bootstrap.helper.ts +222 -0
- package/src/helpers/cache.helper.ts +5 -0
- package/src/helpers/cors.helper.ts +26 -6
- package/src/helpers/field-crud-managers/MediaFieldCrudManager.ts +9 -9
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +9 -6
- package/src/helpers/solid-registry.ts +10 -5
- package/src/helpers/typeorm-db-helper.ts +26 -0
- package/src/index.ts +3 -0
- package/src/interfaces.ts +3 -0
- package/src/jobs/chatter-queue-options.ts +1 -1
- package/src/jobs/chatter-queue-publisher.service.ts +11 -11
- package/src/jobs/chatter-queue-subscriber.service.ts +13 -8
- package/src/jobs/computed-field-evaluation-queue-options.ts +2 -0
- package/src/jobs/database/chatter-queue-options-database.ts +9 -0
- package/src/jobs/database/chatter-queue-publisher-database.service.ts +24 -0
- package/src/jobs/database/chatter-queue-subscriber-database.service.ts +53 -0
- package/src/repository/dashboard-layout.repository.ts +17 -0
- package/src/repository/model-metadata.repository.ts +45 -2
- package/src/seeders/module-metadata-seeder.service.ts +5 -5
- package/src/seeders/seed-data/solid-core-metadata.json +373 -33
- package/src/services/1.js +6 -0
- package/src/services/chatter-message.service.ts +41 -9
- package/src/services/computed-fields/entity/sequence-num-computed-field-provider.ts +79 -40
- package/src/services/crud.service.ts +1 -1
- package/src/services/dashboard-layout.service.ts +111 -0
- package/src/services/dashboard.service.ts +7 -0
- package/src/services/model-metadata.service.ts +22 -43
- package/src/services/permission-metadata.service.ts +73 -20
- package/src/services/queues/database-subscriber.service.ts +7 -1
- package/src/services/queues/publisher-factory.service.ts +1 -1
- package/src/services/queues/rabbitmq-publisher.service.ts +8 -2
- package/src/services/queues/rabbitmq-subscriber.service.ts +127 -10
- package/src/services/request-context.service.ts +2 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +22 -4
- package/src/services/solid-introspect.service.ts +28 -0
- package/src/services/solid-ts-morph.service.ts +98 -0
- package/src/solid-core.module.ts +21 -2
- package/src/subscribers/audit.subscriber.ts +63 -271
- package/src/subscribers/computed-entity-field.subscriber.ts +3 -3
- package/src/subscribers/created-by-updated-by.subscriber.ts +22 -16
- package/src/winston.logger.ts +2 -1
- package/dist-tests/api/authenticate.spec.js +0 -119
- package/dist-tests/api/authenticate.spec.js.map +0 -1
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +0 -97
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +0 -1
- package/dist-tests/api/ping.spec.js +0 -21
- package/dist-tests/api/ping.spec.js.map +0 -1
- package/dist-tests/helpers/auth.js +0 -41
- package/dist-tests/helpers/auth.js.map +0 -1
- package/dist-tests/helpers/env.js +0 -11
- package/dist-tests/helpers/env.js.map +0 -1
|
@@ -9,6 +9,29 @@ const LONG_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
|
|
|
9
9
|
[DatasourceType.oracle]: { type: "clob" },
|
|
10
10
|
};
|
|
11
11
|
|
|
12
|
+
// For simple-json columns that may contain large payloads: on MySQL/MariaDB the default
|
|
13
|
+
// TEXT backing store is limited to 64 KB, so we override the type to longtext and supply
|
|
14
|
+
// an explicit JSON transformer so TypeORM still serialises/deserialises correctly.
|
|
15
|
+
const SIMPLE_JSON_LARGE_TEXT_MAP: Record<DatasourceType, ColumnOptions> = {
|
|
16
|
+
[DatasourceType.postgres]: {},
|
|
17
|
+
[DatasourceType.mssql]: {},
|
|
18
|
+
[DatasourceType.mysql]: {
|
|
19
|
+
type: "longtext",
|
|
20
|
+
transformer: {
|
|
21
|
+
to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
|
|
22
|
+
from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
[DatasourceType.mariadb]: {
|
|
26
|
+
type: "longtext",
|
|
27
|
+
transformer: {
|
|
28
|
+
to: (value: any) => (value !== undefined && value !== null ? JSON.stringify(value) : value),
|
|
29
|
+
from: (value: any) => (value !== null && value !== undefined ? JSON.parse(value) : value),
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
[DatasourceType.oracle]: { type: "clob" },
|
|
33
|
+
};
|
|
34
|
+
|
|
12
35
|
const solidCoreDbType: DatasourceType =
|
|
13
36
|
Object.values(DatasourceType).includes(process.env.SOLID_CORE_DB_TYPE as DatasourceType)
|
|
14
37
|
? (process.env.SOLID_CORE_DB_TYPE as DatasourceType)
|
|
@@ -20,6 +43,9 @@ export function getColumnType(solidType: string): ColumnOptions {
|
|
|
20
43
|
case "richText":
|
|
21
44
|
return LONG_TEXT_MAP[solidCoreDbType];
|
|
22
45
|
|
|
46
|
+
case "simpleJsonLargeText":
|
|
47
|
+
return SIMPLE_JSON_LARGE_TEXT_MAP[solidCoreDbType];
|
|
48
|
+
|
|
23
49
|
default:
|
|
24
50
|
return {};
|
|
25
51
|
}
|
package/src/index.ts
CHANGED
|
@@ -137,6 +137,7 @@ export * from './entities/user-activity-history.entity'
|
|
|
137
137
|
export * from './entities/dashboard.entity'
|
|
138
138
|
export * from './entities/dashboard-variable.entity'
|
|
139
139
|
export * from './entities/dashboard-question.entity'
|
|
140
|
+
export * from './entities/dashboard-layout.entity'
|
|
140
141
|
export * from './entities/dashboard-question-sql-dataset-config.entity'
|
|
141
142
|
export * from './entities/ai-interaction.entity'
|
|
142
143
|
export * from './entities/model-sequence.entity'
|
|
@@ -175,7 +176,9 @@ export * from './helpers/field-crud-managers/SelectionDynamicFieldCrudManager' /
|
|
|
175
176
|
export * from './helpers/field-crud-managers/SelectionStaticFieldCrudManager' //rename
|
|
176
177
|
export * from './helpers/field-crud-managers/ShortTextFieldCrudManager' //rename
|
|
177
178
|
export * from './helpers/field-crud-managers/UUIDFieldCrudManager' //rename
|
|
179
|
+
export * from './helpers/bootstrap.helper'
|
|
178
180
|
export * from './helpers/environment.helper'
|
|
181
|
+
export * from './helpers/cache.helper'
|
|
179
182
|
export * from './helpers/cors.helper'
|
|
180
183
|
export * from './helpers/security.helper'
|
|
181
184
|
export * from './helpers/model-metadata-helper.service'
|
package/src/interfaces.ts
CHANGED
|
@@ -111,6 +111,8 @@ export interface ISelectionProviderContext {
|
|
|
111
111
|
limit: number;
|
|
112
112
|
offset: number;
|
|
113
113
|
formValues: Record<string, any>;
|
|
114
|
+
//Attribute to control the validation on creating the record
|
|
115
|
+
validateOnSave?: boolean;
|
|
114
116
|
// query: string;
|
|
115
117
|
}
|
|
116
118
|
|
|
@@ -269,6 +271,7 @@ export interface QueuesModuleOptions {
|
|
|
269
271
|
type: BrokerType;
|
|
270
272
|
queueName: string;
|
|
271
273
|
prefetch?: number;
|
|
274
|
+
persistToDatabase?: boolean;
|
|
272
275
|
}
|
|
273
276
|
|
|
274
277
|
export type MediaWithFullUrl = Media & {
|
|
@@ -7,21 +7,21 @@ import { MqMessageService } from '../services/mq-message.service';
|
|
|
7
7
|
import { QueuesModuleOptions } from "../interfaces";
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
export type
|
|
10
|
+
export type AuditEventType = 'insert' | 'update' | 'delete';
|
|
11
11
|
|
|
12
|
-
export interface
|
|
13
|
-
eventType:
|
|
14
|
-
|
|
15
|
-
entityId: string
|
|
16
|
-
occurredAt: string;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
userId?:
|
|
12
|
+
export interface AuditQueuePayload {
|
|
13
|
+
eventType: AuditEventType;
|
|
14
|
+
modelName: string; // TypeORM entity class name (e.g. 'Order')
|
|
15
|
+
entityId: string | number | null;
|
|
16
|
+
occurredAt: string; // ISO timestamp, captured at event time
|
|
17
|
+
after?: any; // entity state after operation (insert/update)
|
|
18
|
+
before?: any; // entity state before operation (update/delete)
|
|
19
|
+
updatedColumnNames?: string[]; // propertyNames of changed columns (update only)
|
|
20
|
+
userId?: number | null; // active user captured at event time
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
@Injectable()
|
|
24
|
-
export class
|
|
24
|
+
export class ChatterQueuePublisherRabbitmq extends RabbitMqPublisher<AuditQueuePayload> {
|
|
25
25
|
constructor(
|
|
26
26
|
protected readonly mqMessageService: MqMessageService,
|
|
27
27
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
@@ -6,12 +6,12 @@ import { MqMessageService } from '../services/mq-message.service';
|
|
|
6
6
|
import { MqMessageQueueService } from '../services/mq-message-queue.service';
|
|
7
7
|
import { QueuesModuleOptions } from "../interfaces";
|
|
8
8
|
import chatterQueueOptions from './chatter-queue-options';
|
|
9
|
-
import {
|
|
9
|
+
import { AuditQueuePayload } from './chatter-queue-publisher.service';
|
|
10
10
|
import { ChatterMessageService } from 'src/services/chatter-message.service';
|
|
11
11
|
|
|
12
12
|
@Injectable()
|
|
13
|
-
export class
|
|
14
|
-
private readonly
|
|
13
|
+
export class ChatterQueueSubscriberRabbitmq extends RabbitMqSubscriber<AuditQueuePayload> {
|
|
14
|
+
private readonly chatterLogger = new Logger(ChatterQueueSubscriberRabbitmq.name);
|
|
15
15
|
|
|
16
16
|
constructor(
|
|
17
17
|
readonly mqMessageService: MqMessageService,
|
|
@@ -27,19 +27,24 @@ export class ChatterQueueSubscriber extends RabbitMqSubscriber<any> {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
async subscribe(message: QueueMessage<
|
|
30
|
+
async subscribe(message: QueueMessage<AuditQueuePayload>) {
|
|
31
31
|
const p = message.payload;
|
|
32
|
-
this.
|
|
32
|
+
this.chatterLogger.debug(`Audit event ${p.eventType} ${p.modelName}#${p.entityId}`);
|
|
33
33
|
|
|
34
34
|
switch (p.eventType) {
|
|
35
35
|
case 'insert':
|
|
36
|
-
await this.chatterMessageService.postAuditMessageOnInsert(p.after,
|
|
36
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
|
|
37
37
|
break;
|
|
38
38
|
case 'update':
|
|
39
|
-
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
39
|
+
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
40
|
+
p.after,
|
|
41
|
+
p.modelName,
|
|
42
|
+
p.before,
|
|
43
|
+
(p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
|
|
44
|
+
);
|
|
40
45
|
break;
|
|
41
46
|
case 'delete':
|
|
42
|
-
await this.chatterMessageService.postAuditMessageOnDelete(p.
|
|
47
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
|
|
43
48
|
break;
|
|
44
49
|
}
|
|
45
50
|
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { DatabasePublisher } from 'src/services/queues/database-publisher.service';
|
|
4
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
5
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
6
|
+
import { QueuesModuleOptions } from "../../interfaces";
|
|
7
|
+
import { AuditQueuePayload } from '../chatter-queue-publisher.service';
|
|
8
|
+
import chatterQueueOptionsDatabase from './chatter-queue-options-database';
|
|
9
|
+
|
|
10
|
+
@Injectable()
|
|
11
|
+
export class ChatterQueuePublisherDatabase extends DatabasePublisher<AuditQueuePayload> {
|
|
12
|
+
constructor(
|
|
13
|
+
protected readonly mqMessageService: MqMessageService,
|
|
14
|
+
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
15
|
+
) {
|
|
16
|
+
super(mqMessageService, mqMessageQueueService);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
options(): QueuesModuleOptions {
|
|
20
|
+
return {
|
|
21
|
+
...chatterQueueOptionsDatabase
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Injectable, Logger } from '@nestjs/common';
|
|
2
|
+
|
|
3
|
+
import { DatabaseSubscriber } from 'src/services/queues/database-subscriber.service';
|
|
4
|
+
import { QueueMessage } from 'src/interfaces/mq';
|
|
5
|
+
import { MqMessageService } from '../../services/mq-message.service';
|
|
6
|
+
import { MqMessageQueueService } from '../../services/mq-message-queue.service';
|
|
7
|
+
import { QueuesModuleOptions } from "../../interfaces";
|
|
8
|
+
import { PollerService } from 'src/services/poller.service';
|
|
9
|
+
import { AuditQueuePayload } from '../chatter-queue-publisher.service';
|
|
10
|
+
import { ChatterMessageService } from 'src/services/chatter-message.service';
|
|
11
|
+
import chatterQueueOptionsDatabase from './chatter-queue-options-database';
|
|
12
|
+
|
|
13
|
+
@Injectable()
|
|
14
|
+
export class ChatterQueueSubscriberDatabase extends DatabaseSubscriber<AuditQueuePayload> {
|
|
15
|
+
private readonly chatterLogger = new Logger(ChatterQueueSubscriberDatabase.name);
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
readonly mqMessageService: MqMessageService,
|
|
19
|
+
readonly mqMessageQueueService: MqMessageQueueService,
|
|
20
|
+
readonly poller: PollerService,
|
|
21
|
+
private readonly chatterMessageService: ChatterMessageService,
|
|
22
|
+
) {
|
|
23
|
+
super(mqMessageService, mqMessageQueueService, poller);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
options(): QueuesModuleOptions {
|
|
27
|
+
return {
|
|
28
|
+
...chatterQueueOptionsDatabase
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
async subscribe(message: QueueMessage<AuditQueuePayload>) {
|
|
33
|
+
const p = message.payload;
|
|
34
|
+
this.chatterLogger.debug(`Audit event ${p.eventType} ${p.modelName}#${p.entityId}`);
|
|
35
|
+
|
|
36
|
+
switch (p.eventType) {
|
|
37
|
+
case 'insert':
|
|
38
|
+
await this.chatterMessageService.postAuditMessageOnInsert(p.after, p.modelName);
|
|
39
|
+
break;
|
|
40
|
+
case 'update':
|
|
41
|
+
await this.chatterMessageService.postAuditMessageOnUpdate(
|
|
42
|
+
p.after,
|
|
43
|
+
p.modelName,
|
|
44
|
+
p.before,
|
|
45
|
+
(p.updatedColumnNames ?? []).map(n => ({ propertyName: n })),
|
|
46
|
+
);
|
|
47
|
+
break;
|
|
48
|
+
case 'delete':
|
|
49
|
+
await this.chatterMessageService.postAuditMessageOnDelete(p.modelName, p.before);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { RequestContextService } from 'src/services/request-context.service';
|
|
3
|
+
import { DataSource } from 'typeorm';
|
|
4
|
+
import { SecurityRuleRepository } from './security-rule.repository';
|
|
5
|
+
import { SolidBaseRepository } from './solid-base.repository';
|
|
6
|
+
import { DashboardLayout } from 'src/entities/dashboard-layout.entity';
|
|
7
|
+
|
|
8
|
+
@Injectable()
|
|
9
|
+
export class DashboardLayoutRepository extends SolidBaseRepository<DashboardLayout> {
|
|
10
|
+
constructor(
|
|
11
|
+
readonly dataSource: DataSource,
|
|
12
|
+
readonly requestContextService: RequestContextService,
|
|
13
|
+
readonly securityRuleRepository: SecurityRuleRepository,
|
|
14
|
+
) {
|
|
15
|
+
super(DashboardLayout, dataSource, requestContextService, securityRuleRepository);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CACHE_MANAGER } from '@nestjs/cache-manager';
|
|
2
|
+
import { Inject, Injectable } from '@nestjs/common';
|
|
3
|
+
import { Cache } from 'cache-manager';
|
|
4
|
+
import { createHash } from 'crypto';
|
|
2
5
|
import { ModelMetadata } from 'src';
|
|
6
|
+
import { shouldUseCache } from 'src/helpers/cache.helper';
|
|
3
7
|
import { DataSource } from 'typeorm';
|
|
4
8
|
import { SolidBaseRepository } from './solid-base.repository';
|
|
5
9
|
|
|
@@ -7,9 +11,48 @@ import { SolidBaseRepository } from './solid-base.repository';
|
|
|
7
11
|
export class ModelMetadataRepository extends SolidBaseRepository<ModelMetadata> {
|
|
8
12
|
constructor(
|
|
9
13
|
readonly dataSource: DataSource,
|
|
14
|
+
@Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
|
|
10
15
|
// readonly requestContextService: RequestContextService,
|
|
11
16
|
// readonly securityRuleRepository: SecurityRuleRepository,
|
|
12
17
|
) {
|
|
13
18
|
super(ModelMetadata, dataSource, null, null);
|
|
14
19
|
}
|
|
15
|
-
|
|
20
|
+
|
|
21
|
+
async find(options?: any): Promise<ModelMetadata[]> {
|
|
22
|
+
if (!shouldUseCache()) {
|
|
23
|
+
return super.find(options);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const cacheKey = this.buildCacheKey('find', options);
|
|
27
|
+
const cached = await this.cacheManager.get<ModelMetadata[]>(cacheKey);
|
|
28
|
+
if (cached !== undefined) {
|
|
29
|
+
return cached;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const result = await super.find(options);
|
|
33
|
+
await this.cacheManager.set(cacheKey, result);
|
|
34
|
+
return result;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async findOne(options: any): Promise<ModelMetadata | null> {
|
|
38
|
+
if (!shouldUseCache()) {
|
|
39
|
+
return super.findOne(options);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const cacheKey = this.buildCacheKey('findOne', options);
|
|
43
|
+
const cached = await this.cacheManager.get<ModelMetadata | null>(cacheKey);
|
|
44
|
+
if (cached !== undefined) {
|
|
45
|
+
return cached;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const result = await super.findOne(options);
|
|
49
|
+
await this.cacheManager.set(cacheKey, result);
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
private buildCacheKey(method: 'find' | 'findOne', options: unknown): string {
|
|
54
|
+
const serialized = JSON.stringify(options ?? {});
|
|
55
|
+
const hash = createHash('sha256').update(serialized).digest('hex');
|
|
56
|
+
return `modelMetadataRepo:${method}:${hash}`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -140,17 +140,17 @@ export class ModuleMetadataSeederService {
|
|
|
140
140
|
console.log(`▶ Seeding Metadata for Module: ${moduleMetadata.name}`);
|
|
141
141
|
this.logger.log(`Seeding Metadata for Module: ${moduleMetadata.name}`);
|
|
142
142
|
|
|
143
|
+
currentStep = 'seedMediaStorageProviders';
|
|
144
|
+
this.logger.log(`Seeding Media Storage Providers`);
|
|
145
|
+
const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
|
|
146
|
+
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
|
|
147
|
+
|
|
143
148
|
// Process module metadata first.
|
|
144
149
|
currentStep = 'seedModuleModelFields';
|
|
145
150
|
this.logger.log(`Seeding Module / Model / Fields`);
|
|
146
151
|
const moduleModelFieldCounts = await this.seedModuleModelFields(moduleMetadata);
|
|
147
152
|
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Module/Model/Fields', moduleModelFieldCounts)}`);
|
|
148
153
|
|
|
149
|
-
currentStep = 'seedMediaStorageProviders';
|
|
150
|
-
this.logger.log(`Seeding Media Storage Providers`);
|
|
151
|
-
const mediaStorageCounts = await this.seedMediaStorageProviders(overallMetadata.mediaStorageProviders);
|
|
152
|
-
console.log(`${this.formatSeedResult(moduleMetadata.name, 'Media Storage Providers', mediaStorageCounts)}`);
|
|
153
|
-
|
|
154
154
|
currentStep = 'seedRoles';
|
|
155
155
|
this.logger.log(`Seeding Roles`);
|
|
156
156
|
const roleCounts = await this.seedRoles(overallMetadata);
|