@solidxai/core 0.1.10-beta.0 → 0.1.10-beta.11
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/CLAUDE.md +18 -0
- package/CURRENT_PROMPT +6 -0
- package/dist/commands/refresh-model.command.d.ts +0 -4
- package/dist/commands/refresh-model.command.d.ts.map +1 -1
- package/dist/commands/refresh-model.command.js +0 -32
- package/dist/commands/refresh-model.command.js.map +1 -1
- package/dist/commands/run-tests.command.d.ts +2 -0
- package/dist/commands/run-tests.command.d.ts.map +1 -1
- package/dist/commands/run-tests.command.js +49 -17
- package/dist/commands/run-tests.command.js.map +1 -1
- package/dist/controllers/action-metadata.controller.js +1 -1
- package/dist/controllers/action-metadata.controller.js.map +1 -1
- package/dist/controllers/facebook-authentication.controller.js +1 -1
- package/dist/controllers/facebook-authentication.controller.js.map +1 -1
- package/dist/controllers/google-authentication.controller.js +1 -1
- package/dist/controllers/google-authentication.controller.js.map +1 -1
- package/dist/controllers/mcp-audit-log.controller.d.ts +35 -0
- package/dist/controllers/mcp-audit-log.controller.d.ts.map +1 -0
- package/dist/controllers/mcp-audit-log.controller.js +147 -0
- package/dist/controllers/mcp-audit-log.controller.js.map +1 -0
- package/dist/controllers/menu-item-metadata.controller.js +1 -1
- package/dist/controllers/menu-item-metadata.controller.js.map +1 -1
- package/dist/controllers/microsoft-authentication.controller.js +1 -1
- package/dist/controllers/microsoft-authentication.controller.js.map +1 -1
- package/dist/controllers/model-metadata.controller.d.ts +1 -1
- package/dist/controllers/model-metadata.controller.js +2 -2
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/module-metadata.controller.js +1 -1
- package/dist/controllers/module-metadata.controller.js.map +1 -1
- package/dist/controllers/mq-message-queue.controller.js +1 -1
- package/dist/controllers/mq-message-queue.controller.js.map +1 -1
- package/dist/controllers/mq-message.controller.js +1 -1
- package/dist/controllers/mq-message.controller.js.map +1 -1
- package/dist/controllers/user.controller.d.ts.map +1 -1
- package/dist/controllers/user.controller.js.map +1 -1
- package/dist/controllers/view-metadata.controller.js +1 -1
- package/dist/controllers/view-metadata.controller.js.map +1 -1
- package/dist/dtos/create-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/create-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/create-mcp-audit-log.dto.js +118 -0
- package/dist/dtos/create-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts +19 -0
- package/dist/dtos/update-mcp-audit-log.dto.d.ts.map +1 -0
- package/dist/dtos/update-mcp-audit-log.dto.js +117 -0
- package/dist/dtos/update-mcp-audit-log.dto.js.map +1 -0
- package/dist/dtos/update-user.dto.d.ts +1 -0
- package/dist/dtos/update-user.dto.d.ts.map +1 -1
- package/dist/dtos/update-user.dto.js +7 -1
- package/dist/dtos/update-user.dto.js.map +1 -1
- package/dist/entities/chatter-message-details.entity.d.ts.map +1 -1
- package/dist/entities/chatter-message-details.entity.js +0 -1
- package/dist/entities/chatter-message-details.entity.js.map +1 -1
- package/dist/entities/mcp-audit-log.entity.d.ts +19 -0
- package/dist/entities/mcp-audit-log.entity.d.ts.map +1 -0
- package/dist/entities/mcp-audit-log.entity.js +90 -0
- package/dist/entities/mcp-audit-log.entity.js.map +1 -0
- package/dist/entities/user.entity.js +1 -0
- package/dist/entities/user.entity.js.map +1 -1
- package/dist/helpers/bootstrap.helper.d.ts.map +1 -1
- package/dist/helpers/bootstrap.helper.js +2 -0
- package/dist/helpers/bootstrap.helper.js.map +1 -1
- package/dist/helpers/command.service.d.ts +1 -0
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +1 -0
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/field-crud-managers/BigIntFieldCrudManager.js.map +1 -1
- package/dist/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.js.map +1 -1
- package/dist/helpers/module-metadata-helper.service.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +0 -2
- package/dist/interfaces.d.ts.map +1 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.d.ts.map +1 -1
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js +3 -3
- package/dist/jobs/database/chatter-queue-subscriber-database.service.js.map +1 -1
- package/dist/jobs/database/trigger-mcp-client-subscriber-database.service.js.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js +3 -3
- package/dist/jobs/rabbitmq/chatter-queue-subscriber.service.js.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.d.ts.map +1 -1
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js +3 -3
- package/dist/jobs/redis/chatter-queue-subscriber-redis.service.js.map +1 -1
- package/dist/repository/mcp-audit-log.repository.d.ts +12 -0
- package/dist/repository/mcp-audit-log.repository.d.ts.map +1 -0
- package/dist/repository/mcp-audit-log.repository.js +34 -0
- package/dist/repository/mcp-audit-log.repository.js.map +1 -0
- package/dist/repository/security-rule.repository.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/module-test-data.service.d.ts +7 -0
- package/dist/seeders/module-test-data.service.d.ts.map +1 -1
- package/dist/seeders/module-test-data.service.js +94 -18
- package/dist/seeders/module-test-data.service.js.map +1 -1
- package/dist/seeders/permission-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +380 -2
- package/dist/services/authentication.service.d.ts.map +1 -1
- package/dist/services/authentication.service.js +5 -5
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/chatter-message.service.d.ts +6 -3
- package/dist/services/chatter-message.service.d.ts.map +1 -1
- package/dist/services/chatter-message.service.js +23 -35
- package/dist/services/chatter-message.service.js.map +1 -1
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/csv.service.js.map +1 -1
- package/dist/services/dashboard.service.js.map +1 -1
- package/dist/services/database/database-bootstrap.service.js.map +1 -1
- package/dist/services/excel.service.js.map +1 -1
- package/dist/services/export-transaction.service.js.map +1 -1
- package/dist/services/field-metadata.service.js +2 -2
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/fixtures.service.js.map +1 -1
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/list-of-values.service.js.map +1 -1
- package/dist/services/mcp-audit-log.service.d.ts +12 -0
- package/dist/services/mcp-audit-log.service.d.ts.map +1 -0
- package/dist/services/mcp-audit-log.service.js +38 -0
- package/dist/services/mcp-audit-log.service.js.map +1 -0
- package/dist/services/model-metadata.service.d.ts +4 -1
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +23 -24
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts +4 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +18 -2
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/queues/database-publisher.service.js +3 -3
- package/dist/services/queues/database-publisher.service.js.map +1 -1
- package/dist/services/queues/database-subscriber.service.js +3 -3
- package/dist/services/queues/database-subscriber.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-publisher.service.js +3 -3
- package/dist/services/queues/rabbitmq-publisher.service.js.map +1 -1
- package/dist/services/queues/rabbitmq-subscriber.service.js +4 -4
- package/dist/services/queues/rabbitmq-subscriber.service.js.map +1 -1
- package/dist/services/queues/redis-publisher.service.d.ts.map +1 -1
- package/dist/services/queues/redis-publisher.service.js +4 -1
- package/dist/services/queues/redis-publisher.service.js.map +1 -1
- package/dist/services/queues/redis-subscriber.service.d.ts.map +1 -1
- package/dist/services/queues/redis-subscriber.service.js +4 -1
- package/dist/services/queues/redis-subscriber.service.js.map +1 -1
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/scheduled-jobs/scheduler.service.js.map +1 -1
- package/dist/services/settings/default-settings-provider.service.d.ts +58 -8
- package/dist/services/settings/default-settings-provider.service.d.ts.map +1 -1
- package/dist/services/settings/default-settings-provider.service.js +21 -4
- package/dist/services/settings/default-settings-provider.service.js.map +1 -1
- package/dist/services/sms/TwilioSMSService.js.map +1 -1
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/user-activity-history.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +17 -2
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/solid-core.module.d.ts +1 -0
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +9 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/computed-entity-field.subscriber.js.map +1 -1
- package/dist/subscribers/security-rule.subscriber.d.ts.map +1 -1
- package/dist/subscribers/security-rule.subscriber.js.map +1 -1
- package/dist/subscribers/view-metadata.subscriber.js.map +1 -1
- package/dist/testing/core/testing-engine.js.map +1 -1
- package/dist/testing/reporter/console-reporter.d.ts +10 -0
- package/dist/testing/reporter/console-reporter.d.ts.map +1 -1
- package/dist/testing/reporter/console-reporter.js +21 -0
- package/dist/testing/reporter/console-reporter.js.map +1 -1
- package/dist/testing/reporter/reporter.types.d.ts +7 -0
- package/dist/testing/reporter/reporter.types.d.ts.map +1 -1
- package/dist/testing/reporter/reporter.types.js.map +1 -1
- package/dist/testing/reporter/webhook-reporter.d.ts +54 -0
- package/dist/testing/reporter/webhook-reporter.d.ts.map +1 -0
- package/dist/testing/reporter/webhook-reporter.js +74 -0
- package/dist/testing/reporter/webhook-reporter.js.map +1 -0
- package/dist/testing/runner/run-from-metadata.d.ts.map +1 -1
- package/dist/testing/runner/run-from-metadata.js +20 -1
- package/dist/testing/runner/run-from-metadata.js.map +1 -1
- package/package.json +8 -8
- package/src/commands/refresh-model.command.ts +1 -32
- package/src/commands/run-tests.command.ts +45 -17
- package/src/controllers/action-metadata.controller.ts +1 -1
- package/src/controllers/facebook-authentication.controller.ts +1 -1
- package/src/controllers/google-authentication.controller.ts +1 -1
- package/src/controllers/mcp-audit-log.controller.ts +70 -0
- package/src/controllers/menu-item-metadata.controller.ts +1 -1
- package/src/controllers/microsoft-authentication.controller.ts +1 -1
- package/src/controllers/model-metadata.controller.ts +1 -1
- package/src/controllers/module-metadata.controller.ts +1 -1
- package/src/controllers/mq-message-queue.controller.ts +1 -1
- package/src/controllers/mq-message.controller.ts +1 -1
- package/src/controllers/user.controller.ts +16 -16
- package/src/controllers/view-metadata.controller.ts +1 -1
- package/src/dtos/create-mcp-audit-log.dto.ts +84 -0
- package/src/dtos/update-mcp-audit-log.dto.ts +83 -0
- package/src/dtos/update-user.dto.ts +4 -0
- package/src/entities/chatter-message-details.entity.ts +1 -2
- package/src/entities/mcp-audit-log.entity.ts +55 -0
- package/src/entities/user.entity.ts +1 -1
- package/src/helpers/bootstrap.helper.ts +3 -0
- package/src/helpers/command.service.ts +2 -0
- package/src/helpers/field-crud-managers/BigIntFieldCrudManager.ts +1 -1
- package/src/helpers/field-crud-managers/SelectionDynamicFieldCrudManager.ts +1 -1
- package/src/helpers/module-metadata-helper.service.ts +1 -1
- package/src/index.ts +4 -0
- package/src/interfaces.ts +0 -2
- package/src/jobs/database/chatter-queue-subscriber-database.service.ts +4 -2
- package/src/jobs/database/trigger-mcp-client-subscriber-database.service.ts +1 -1
- package/src/jobs/rabbitmq/chatter-queue-subscriber.service.ts +4 -2
- package/src/jobs/redis/chatter-queue-subscriber-redis.service.ts +10 -3
- package/src/repository/mcp-audit-log.repository.ts +17 -0
- package/src/repository/security-rule.repository.ts +1 -1
- package/src/seeders/module-metadata-seeder.service.ts +4 -4
- package/src/seeders/module-test-data.service.ts +107 -15
- package/src/seeders/permission-metadata-seeder.service.ts +1 -1
- package/src/seeders/seed-data/solid-core-metadata.json +380 -2
- package/src/services/1.js +6 -0
- package/src/services/authentication.service.ts +19 -31
- package/src/services/chatter-message.service.ts +28 -38
- package/src/services/crud.service.ts +3 -3
- package/src/services/csv.service.ts +1 -1
- package/src/services/dashboard.service.ts +1 -1
- package/src/services/database/database-bootstrap.service.ts +1 -1
- package/src/services/excel.service.ts +1 -1
- package/src/services/export-transaction.service.ts +2 -2
- package/src/services/field-metadata.service.ts +3 -3
- package/src/services/fixtures.service.ts +2 -2
- package/src/services/import-transaction.service.ts +2 -2
- package/src/services/list-of-values.service.ts +1 -1
- package/src/services/mcp-audit-log.service.ts +19 -0
- package/src/services/model-metadata.service.ts +35 -34
- package/src/services/module-metadata.service.ts +18 -7
- package/src/services/queues/database-publisher.service.ts +4 -4
- package/src/services/queues/database-subscriber.service.ts +7 -7
- package/src/services/queues/rabbitmq-publisher.service.ts +7 -7
- package/src/services/queues/rabbitmq-subscriber.service.ts +13 -13
- package/src/services/queues/redis-publisher.service.ts +7 -4
- package/src/services/queues/redis-subscriber.service.ts +9 -6
- package/src/services/role-metadata.service.ts +1 -1
- package/src/services/scheduled-jobs/scheduler.service.ts +5 -5
- package/src/services/settings/default-settings-provider.service.ts +21 -4
- package/src/services/sms/TwilioSMSService.ts +2 -2
- package/src/services/solid-introspect.service.ts +2 -2
- package/src/services/user-activity-history.service.ts +1 -1
- package/src/services/view-metadata.service.ts +25 -8
- package/src/solid-core.module.ts +9 -0
- package/src/subscribers/computed-entity-field.subscriber.ts +1 -1
- package/src/subscribers/security-rule.subscriber.ts +8 -8
- package/src/subscribers/view-metadata.subscriber.ts +1 -1
- package/src/testing/core/testing-engine.ts +2 -2
- package/src/testing/reporter/console-reporter.ts +27 -0
- package/src/testing/reporter/reporter.types.ts +7 -0
- package/src/testing/reporter/webhook-reporter.ts +116 -0
- package/src/testing/runner/run-from-metadata.ts +19 -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
- package/docs/grouping-enhancements.md +0 -89
- package/docs/java-spring/README.md +0 -3
- package/docs/java-spring/solid-core-module-deep-dive-report.md +0 -1317
- package/docs/seed-changes.md +0 -65
- package/docs/test-data-workflow.md +0 -200
- package/docs/type-declaration-import-issue.md +0 -24
|
@@ -47,6 +47,26 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
47
47
|
super(entityManager, repo, 'chatterMessage', 'solid-core', moduleRef);
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
+
private resolveMessageUserId(userId?: number | null): number | null {
|
|
51
|
+
if (userId) {
|
|
52
|
+
return userId;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
return this.requestContextService.getActiveUser()?.sub ?? null;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private resolveMessageUser(userId?: number | null) {
|
|
59
|
+
const resolvedUserId = this.resolveMessageUserId(userId);
|
|
60
|
+
return resolvedUserId ? ({ id: resolvedUserId } as any) : null;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
private stampMessageAuditFields(chatterMessage: ChatterMessage, userId?: number | null) {
|
|
64
|
+
const resolvedUserId = this.resolveMessageUserId(userId);
|
|
65
|
+
chatterMessage.user = resolvedUserId ? ({ id: resolvedUserId } as any) : null;
|
|
66
|
+
chatterMessage.createdBy = resolvedUserId;
|
|
67
|
+
chatterMessage.updatedBy = resolvedUserId;
|
|
68
|
+
}
|
|
69
|
+
|
|
50
70
|
async markCompleted(id: number) {
|
|
51
71
|
const activeUser = this.requestContextService.getActiveUser();
|
|
52
72
|
if (!activeUser) {
|
|
@@ -78,14 +98,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
78
98
|
});
|
|
79
99
|
chatterMessage.modelDisplayName = model?.displayName ?? null;
|
|
80
100
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
if (activeUser) {
|
|
84
|
-
const userId = activeUser?.sub;
|
|
85
|
-
chatterMessage.user = { id: userId } as any;
|
|
86
|
-
} else {
|
|
87
|
-
chatterMessage.user = null;
|
|
88
|
-
}
|
|
101
|
+
this.stampMessageAuditFields(chatterMessage);
|
|
89
102
|
|
|
90
103
|
const savedMessage = await this.repo.save(chatterMessage);
|
|
91
104
|
|
|
@@ -114,7 +127,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
114
127
|
return savedMessage;
|
|
115
128
|
}
|
|
116
129
|
|
|
117
|
-
async postAuditMessageOnInsert(entity: any, modelName: string, messageQueue: boolean = false) {
|
|
130
|
+
async postAuditMessageOnInsert(entity: any, modelName: string, messageQueue: boolean = false, userId?: number | null) {
|
|
118
131
|
if (!entity) {
|
|
119
132
|
return;
|
|
120
133
|
}
|
|
@@ -139,8 +152,6 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
139
152
|
!(field.type === 'relation' && field.relationType === 'one-to-many')
|
|
140
153
|
);
|
|
141
154
|
|
|
142
|
-
const activeUser = this.requestContextService.getActiveUser();
|
|
143
|
-
|
|
144
155
|
const chatterMessage = new ChatterMessage();
|
|
145
156
|
chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
|
|
146
157
|
chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_INSERT;
|
|
@@ -150,13 +161,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
150
161
|
chatterMessage.modelDisplayName = model?.displayName;
|
|
151
162
|
chatterMessage.modelUserKey = entity[model?.userKeyField?.name];
|
|
152
163
|
chatterMessage.messageBody = `New ${model?.displayName} created`;
|
|
153
|
-
|
|
154
|
-
if (activeUser) {
|
|
155
|
-
const userId = activeUser?.sub;
|
|
156
|
-
chatterMessage.user = { id: userId } as any;
|
|
157
|
-
} else {
|
|
158
|
-
chatterMessage.user = null;
|
|
159
|
-
}
|
|
164
|
+
this.stampMessageAuditFields(chatterMessage, userId);
|
|
160
165
|
|
|
161
166
|
const savedMessage = await this.repo.save(chatterMessage);
|
|
162
167
|
|
|
@@ -177,7 +182,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
177
182
|
}
|
|
178
183
|
}
|
|
179
184
|
|
|
180
|
-
async postAuditMessageOnUpdate(entity: any, modelName: string, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false) {
|
|
185
|
+
async postAuditMessageOnUpdate(entity: any, modelName: string, databaseEntity: any, updatedColumns: any[] = [], messageQueue: boolean = false, userId?: number | null) {
|
|
181
186
|
if (!databaseEntity || !entity) {
|
|
182
187
|
return;
|
|
183
188
|
}
|
|
@@ -259,8 +264,6 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
259
264
|
return;
|
|
260
265
|
}
|
|
261
266
|
|
|
262
|
-
const activeUser = this.requestContextService.getActiveUser();
|
|
263
|
-
|
|
264
267
|
const chatterMessage = new ChatterMessage();
|
|
265
268
|
chatterMessage.messageType = CHATTER_MESSAGE_TYPE.AUDIT;
|
|
266
269
|
chatterMessage.messageSubType = CHATTER_MESSAGE_SUBTYPE.AUDIT_UPDATE;
|
|
@@ -270,13 +273,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
270
273
|
chatterMessage.modelDisplayName = model.displayName;
|
|
271
274
|
chatterMessage.modelUserKey = entity[model?.userKeyField?.name];
|
|
272
275
|
chatterMessage.messageBody = `${model?.displayName} updated`;
|
|
273
|
-
|
|
274
|
-
if (activeUser) {
|
|
275
|
-
const userId = activeUser?.sub;
|
|
276
|
-
chatterMessage.user = { id: userId } as any;
|
|
277
|
-
} else {
|
|
278
|
-
chatterMessage.user = null;
|
|
279
|
-
}
|
|
276
|
+
this.stampMessageAuditFields(chatterMessage, userId);
|
|
280
277
|
|
|
281
278
|
const savedMessage = await this.repo.save(chatterMessage);
|
|
282
279
|
|
|
@@ -294,7 +291,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
294
291
|
}
|
|
295
292
|
}
|
|
296
293
|
|
|
297
|
-
async postAuditMessageOnDelete(modelName: string, databaseEntity: any, messageQueue: boolean = false) {
|
|
294
|
+
async postAuditMessageOnDelete(modelName: string, databaseEntity: any, messageQueue: boolean = false, userId?: number | null) {
|
|
298
295
|
const model = await this.modelMetadataRepo.findOne({
|
|
299
296
|
where: {
|
|
300
297
|
singularName: lowerFirst(modelName)
|
|
@@ -335,14 +332,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
335
332
|
chatterMessage.modelUserKey = databaseEntity[model?.userKeyField?.name];
|
|
336
333
|
chatterMessage.messageBody = `${model?.displayName} deleted`;
|
|
337
334
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
if (activeUser) {
|
|
341
|
-
const userId = activeUser?.sub;
|
|
342
|
-
chatterMessage.user = { id: userId } as any;
|
|
343
|
-
} else {
|
|
344
|
-
chatterMessage.user = null;
|
|
345
|
-
}
|
|
335
|
+
this.stampMessageAuditFields(chatterMessage, userId);
|
|
346
336
|
|
|
347
337
|
const savedMessage = await this.repo.save(chatterMessage);
|
|
348
338
|
|
|
@@ -421,7 +411,7 @@ export class ChatterMessageService extends CRUDService<ChatterMessage> {
|
|
|
421
411
|
if (value.id) {
|
|
422
412
|
return value.id.toString();
|
|
423
413
|
}
|
|
424
|
-
} catch (error) {
|
|
414
|
+
} catch (error: any) {
|
|
425
415
|
console.error('Error fetching related model metadata:', error);
|
|
426
416
|
return value.id ? value.id.toString() : '';
|
|
427
417
|
}
|
|
@@ -129,7 +129,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
129
129
|
await this.saveMedia(model, files, savedEntity);
|
|
130
130
|
}
|
|
131
131
|
return savedEntity;
|
|
132
|
-
} catch (error) {
|
|
132
|
+
} catch (error: any) {
|
|
133
133
|
if (error instanceof QueryFailedError && error.message.includes('duplicate key value violates unique constraint')) {
|
|
134
134
|
throw new BadRequestException(ERROR_MESSAGES.DUPLICATE_ENTRY);
|
|
135
135
|
}
|
|
@@ -920,7 +920,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
920
920
|
);
|
|
921
921
|
|
|
922
922
|
return { message: SUCCESS_MESSAGES.RECORD_RECOVERED, data: softDeletedRows };
|
|
923
|
-
} catch (error) {
|
|
923
|
+
} catch (error: any) {
|
|
924
924
|
if (error instanceof QueryFailedError) {
|
|
925
925
|
if ((error as any).code === '23505') {
|
|
926
926
|
throw new Error(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
@@ -966,7 +966,7 @@ export class CRUDService<T extends CommonEntity> { // Add two generic value i.e
|
|
|
966
966
|
);
|
|
967
967
|
|
|
968
968
|
return { message: SUCCESS_MESSAGES.SELECTED_RECORDS_RECOVERED, recoveredIds: ids };
|
|
969
|
-
} catch (error) {
|
|
969
|
+
} catch (error: any) {
|
|
970
970
|
if (error instanceof QueryFailedError) {
|
|
971
971
|
if ((error as any).code === "23505") {
|
|
972
972
|
throw new Error(ERROR_MESSAGES.CONFLICTING_RECORD_ON_UNARCHIVE);
|
|
@@ -68,7 +68,7 @@ export class CsvService {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
csvStream.end(); // ✅ Ensure CSV stream is finalized
|
|
71
|
-
} catch (error) {
|
|
71
|
+
} catch (error: any) {
|
|
72
72
|
this.logger.error(`❌ Error writing CSV: ${error.message}`);
|
|
73
73
|
passThrough.destroy(error); // ✅ Properly destroy stream on error
|
|
74
74
|
throw error;
|
|
@@ -117,7 +117,7 @@ export class DashboardService extends CRUDService<Dashboard> {
|
|
|
117
117
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
|
|
118
118
|
try {
|
|
119
119
|
await fs.access(filePath);
|
|
120
|
-
} catch (error) {
|
|
120
|
+
} catch (error: any) {
|
|
121
121
|
throw new Error(`Configuration file not found for module: ${moduleName}`);
|
|
122
122
|
}
|
|
123
123
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
@@ -80,7 +80,7 @@ export class DatabaseBootstrapService implements OnModuleInit {
|
|
|
80
80
|
await this.dataSource.query(sql);
|
|
81
81
|
|
|
82
82
|
this.logger.debug(`[${this.dataSource.name}] Applied ${fileName}`);
|
|
83
|
-
} catch (error) {
|
|
83
|
+
} catch (error: any) {
|
|
84
84
|
// DO NOT THROW — continue with next file
|
|
85
85
|
this.logger.error(
|
|
86
86
|
`[${this.dataSource.name}] Failed ${fileName}`,
|
|
@@ -93,7 +93,7 @@ export class ExcelService {
|
|
|
93
93
|
|
|
94
94
|
workbook.commit();
|
|
95
95
|
// passThrough.end(); // ✅ Properly close the stream
|
|
96
|
-
} catch (error) {
|
|
96
|
+
} catch (error: any) {
|
|
97
97
|
this.logger.error(`❌ Error writing Excel: ${error.message}`);
|
|
98
98
|
passThrough.destroy(error); // Destroy stream
|
|
99
99
|
throw error;
|
|
@@ -90,7 +90,7 @@ export class ExportTransactionService extends CRUDService<ExportTransaction> {
|
|
|
90
90
|
const fileName = this.getFileName(templateName, uuid, templateFormat);
|
|
91
91
|
const mimeType = this.getMimeType(templateFormat);
|
|
92
92
|
return { exportStream, fileName, mimeType, exportTransaction };
|
|
93
|
-
} catch (error) {
|
|
93
|
+
} catch (error: any) {
|
|
94
94
|
this.updateExportTransaction(id, ExportStatus.FAILED, error.message);
|
|
95
95
|
throw error;
|
|
96
96
|
}
|
|
@@ -114,7 +114,7 @@ export class ExportTransactionService extends CRUDService<ExportTransaction> {
|
|
|
114
114
|
// Store the file using the appropriate storage provider
|
|
115
115
|
await this.storeExportStream(exportStream, exportTransaction, this.getFileName(templateName, uuid, templateFormat));
|
|
116
116
|
this.updateExportTransaction(id, ExportStatus.COMPLETED);
|
|
117
|
-
} catch (error) {
|
|
117
|
+
} catch (error: any) {
|
|
118
118
|
this.updateExportTransaction(id, ExportStatus.FAILED, error.message);
|
|
119
119
|
throw error;
|
|
120
120
|
|
|
@@ -745,6 +745,8 @@ export class FieldMetadataService implements OnApplicationBootstrap {
|
|
|
745
745
|
"type",
|
|
746
746
|
"ormType",
|
|
747
747
|
"isSystem",
|
|
748
|
+
"regexPattern",
|
|
749
|
+
"regexPatternNotMatchingErrorMsg",
|
|
748
750
|
"defaultValue",
|
|
749
751
|
"min",
|
|
750
752
|
"max",
|
|
@@ -772,8 +774,6 @@ export class FieldMetadataService implements OnApplicationBootstrap {
|
|
|
772
774
|
"regexPattern",
|
|
773
775
|
"regexPatternNotMatchingErrorMsg",
|
|
774
776
|
"defaultValue",
|
|
775
|
-
"min",
|
|
776
|
-
"max",
|
|
777
777
|
"required",
|
|
778
778
|
"unique",
|
|
779
779
|
"index",
|
|
@@ -1256,7 +1256,7 @@ export class FieldMetadataService implements OnApplicationBootstrap {
|
|
|
1256
1256
|
// Write the updated object back to the file
|
|
1257
1257
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
1258
1258
|
await fs.writeFile(filePath, updatedContent);
|
|
1259
|
-
} catch (error) {
|
|
1259
|
+
} catch (error: any) {
|
|
1260
1260
|
this.logger.error('File creation failed:', error);
|
|
1261
1261
|
throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
|
|
1262
1262
|
}
|
|
@@ -35,7 +35,7 @@ export class FixturesService {
|
|
|
35
35
|
// Create the model instance in the database
|
|
36
36
|
const createdInstance = await modelServiceInstance.create(modelFixture.data);
|
|
37
37
|
this.logger.log(`Successfully created fixture for model: ${modelFixture.singularName} with ID: ${createdInstance.id}`);
|
|
38
|
-
} catch (error) {
|
|
38
|
+
} catch (error: any) {
|
|
39
39
|
this.logger.error(`Error creating fixture for model: ${modelFixture.singularName} - ${error.message}`);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
@@ -59,7 +59,7 @@ export class FixturesService {
|
|
|
59
59
|
const deleteCriteria = modelFixture.data; // This should be adjusted based on actual criteria
|
|
60
60
|
await modelServiceInstance.delete(deleteCriteria);
|
|
61
61
|
this.logger.log(`Successfully deleted fixture for model: ${modelFixture.singularName}`);
|
|
62
|
-
} catch (error) {
|
|
62
|
+
} catch (error: any) {
|
|
63
63
|
this.logger.error(`Error deleting fixture for model: ${modelFixture.singularName} - ${error.message}`);
|
|
64
64
|
}
|
|
65
65
|
}
|
|
@@ -25,7 +25,7 @@ import { SolidIntrospectService } from './solid-introspect.service';
|
|
|
25
25
|
import { ModelMetadataHelperService } from 'src/helpers/model-metadata-helper.service';
|
|
26
26
|
import { getUserExcludedFields } from 'src/helpers/user-helper';
|
|
27
27
|
import { ActiveUserData } from 'src/interfaces/active-user-data.interface';
|
|
28
|
-
import {upperFirst, camelCase} from 'lodash';
|
|
28
|
+
import { upperFirst, camelCase } from 'lodash';
|
|
29
29
|
import { classify } from '../helpers/string.helper';
|
|
30
30
|
|
|
31
31
|
interface ImportTemplateFileInfo {
|
|
@@ -557,7 +557,7 @@ export class ImportTransactionService extends CRUDService<ImportTransaction> {
|
|
|
557
557
|
const createdRecord = await this.insertRecord(record, JSON.parse(importTransaction.mapping) as ImportMapping[], importTransaction.modelMetadata, modelService);
|
|
558
558
|
ids.push(createdRecord.id); // Add the ID of the created record to the ids array
|
|
559
559
|
}
|
|
560
|
-
catch (error) {
|
|
560
|
+
catch (error: any) {
|
|
561
561
|
this.logger.debug(`Error inserting record: ${JSON.stringify(record)}. Error: ${error.message}`);
|
|
562
562
|
// Get the Import transaction error log repo
|
|
563
563
|
const errorLog = await this.createErrorLogEntry(importTransaction, record, error);
|
|
@@ -140,7 +140,7 @@ export class ListOfValuesService extends CRUDService<ListOfValues> {
|
|
|
140
140
|
const filePath = await this.moduleMetadataHelperService.getModuleMetadataFilePath(moduleName);
|
|
141
141
|
try {
|
|
142
142
|
await fs.access(filePath);
|
|
143
|
-
} catch (error) {
|
|
143
|
+
} catch (error: any) {
|
|
144
144
|
throw new Error(`Configuration file not found for module: ${moduleName}`);
|
|
145
145
|
}
|
|
146
146
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Injectable } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
3
|
+
import { InjectEntityManager } from '@nestjs/typeorm';
|
|
4
|
+
import { McpAuditLog } from 'src/entities/mcp-audit-log.entity';
|
|
5
|
+
import { McpAuditLogRepository } from 'src/repository/mcp-audit-log.repository';
|
|
6
|
+
import { EntityManager } from 'typeorm';
|
|
7
|
+
import { CRUDService } from './crud.service';
|
|
8
|
+
|
|
9
|
+
@Injectable()
|
|
10
|
+
export class McpAuditLogService extends CRUDService<McpAuditLog> {
|
|
11
|
+
constructor(
|
|
12
|
+
@InjectEntityManager()
|
|
13
|
+
readonly entityManager: EntityManager,
|
|
14
|
+
readonly repo: McpAuditLogRepository,
|
|
15
|
+
readonly moduleRef: ModuleRef,
|
|
16
|
+
) {
|
|
17
|
+
super(entityManager, repo, 'mcpAuditLog', 'solid-core', moduleRef);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -27,6 +27,7 @@ import {
|
|
|
27
27
|
REMOVE_FIELDS_COMMAND,
|
|
28
28
|
SchematicService
|
|
29
29
|
} from '../helpers/schematic.service';
|
|
30
|
+
import { CommandService } from '../helpers/command.service';
|
|
30
31
|
import { CodeGenerationOptions } from '../interfaces';
|
|
31
32
|
import { CrudHelperService } from './crud-helper.service';
|
|
32
33
|
import { FieldMetadataService } from './field-metadata.service';
|
|
@@ -49,6 +50,7 @@ export class ModelMetadataService {
|
|
|
49
50
|
private readonly modelMetadataRepo: ModelMetadataRepository,
|
|
50
51
|
private readonly fieldMetadataRepo: FieldMetadataRepository,
|
|
51
52
|
private readonly schematicService: SchematicService,
|
|
53
|
+
private readonly commandService: CommandService,
|
|
52
54
|
@InjectDataSource()
|
|
53
55
|
private readonly dataSource: DataSource,
|
|
54
56
|
private readonly crudHelperService: CrudHelperService,
|
|
@@ -154,7 +156,7 @@ export class ModelMetadataService {
|
|
|
154
156
|
|
|
155
157
|
return model
|
|
156
158
|
});
|
|
157
|
-
} catch (error) {
|
|
159
|
+
} catch (error: any) {
|
|
158
160
|
// console.error('Transaction failed:', error);
|
|
159
161
|
this.logger.error('Transaction failed:', error);
|
|
160
162
|
throw error;
|
|
@@ -189,7 +191,7 @@ export class ModelMetadataService {
|
|
|
189
191
|
|
|
190
192
|
// return model
|
|
191
193
|
});
|
|
192
|
-
} catch (error) {
|
|
194
|
+
} catch (error: any) {
|
|
193
195
|
// console.error('Transaction failed:', error);
|
|
194
196
|
this.logger.error('Transaction failed:', error);
|
|
195
197
|
throw error;
|
|
@@ -309,7 +311,7 @@ export class ModelMetadataService {
|
|
|
309
311
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
310
312
|
await fs.writeFile(filePath, updatedContent);
|
|
311
313
|
|
|
312
|
-
} catch (error) {
|
|
314
|
+
} catch (error: any) {
|
|
313
315
|
// console.error('File creation failed:', error);
|
|
314
316
|
this.logger.error('File creation failed:', error);
|
|
315
317
|
throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
|
|
@@ -490,7 +492,7 @@ export class ModelMetadataService {
|
|
|
490
492
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
491
493
|
await fs.writeFile(filePath, updatedContent);
|
|
492
494
|
|
|
493
|
-
} catch (error) {
|
|
495
|
+
} catch (error: any) {
|
|
494
496
|
// console.error('File creation failed:', error);
|
|
495
497
|
this.logger.error('File creation failed:', error);
|
|
496
498
|
throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
|
|
@@ -524,7 +526,7 @@ export class ModelMetadataService {
|
|
|
524
526
|
await this.cleanupOnDelete(entity.id);
|
|
525
527
|
const r = await this.modelMetadataRepo.remove(entity);
|
|
526
528
|
return r;
|
|
527
|
-
} catch (error) {
|
|
529
|
+
} catch (error: any) {
|
|
528
530
|
}
|
|
529
531
|
}
|
|
530
532
|
|
|
@@ -621,7 +623,7 @@ export class ModelMetadataService {
|
|
|
621
623
|
try {
|
|
622
624
|
await fs.unlink(fileToDelete);
|
|
623
625
|
this.logger.log(`Deleted file: ${fileToDelete}`);
|
|
624
|
-
} catch (error) {
|
|
626
|
+
} catch (error: any) {
|
|
625
627
|
this.logger.error(`Error deleting file: ${fileToDelete}`, error);
|
|
626
628
|
}
|
|
627
629
|
}
|
|
@@ -725,7 +727,7 @@ export class ModelMetadataService {
|
|
|
725
727
|
);
|
|
726
728
|
this.solidTsMorphService.removeModuleMembers(moduleFilePath, removedIdentifiers);
|
|
727
729
|
await this.solidTsMorphService.commit();
|
|
728
|
-
} catch (error) {
|
|
730
|
+
} catch (error: any) {
|
|
729
731
|
this.solidTsMorphService.rollback();
|
|
730
732
|
this.logger.error(`Failed to clean up module file for model '${modelEntity.singularName}':`, error);
|
|
731
733
|
}
|
|
@@ -735,6 +737,15 @@ export class ModelMetadataService {
|
|
|
735
737
|
|
|
736
738
|
}
|
|
737
739
|
|
|
740
|
+
@DisallowInProduction()
|
|
741
|
+
async generateCodeViaCtl(modelId: number): Promise<string> {
|
|
742
|
+
return this.commandService.executeCommandWithArgs({
|
|
743
|
+
command: 'npx',
|
|
744
|
+
args: ['@solixai/solidctl@latest', 'generate', 'model', `--id=${modelId}`],
|
|
745
|
+
cwd: path.join(process.cwd(), '..'),
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
|
|
738
749
|
@DisallowInProduction()
|
|
739
750
|
async handleGenerateCode(options: CodeGenerationOptions): Promise<any> {
|
|
740
751
|
const affectedModelIds = [], refreshModelCodeOutputLines = [], removeFieldCodeOutputLines = [];
|
|
@@ -789,7 +800,7 @@ export class ModelMetadataService {
|
|
|
789
800
|
await this.populateVAMConfigInDb(model);
|
|
790
801
|
await this.populateVAMConfigInFile(model);
|
|
791
802
|
});
|
|
792
|
-
} catch (error) {
|
|
803
|
+
} catch (error: any) {
|
|
793
804
|
this.logger.error('generateVAMConfig Transaction failed:', error);
|
|
794
805
|
throw error;
|
|
795
806
|
}
|
|
@@ -816,7 +827,7 @@ export class ModelMetadataService {
|
|
|
816
827
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
817
828
|
await fs.writeFile(filePath, updatedContent);
|
|
818
829
|
|
|
819
|
-
} catch (error) {
|
|
830
|
+
} catch (error: any) {
|
|
820
831
|
// console.error('File creation failed:', error);
|
|
821
832
|
this.logger.error('File updation failed for View, action, menus config:', error);
|
|
822
833
|
throw new Error('File updation failed for View, action, menus config'); // Trigger rollback
|
|
@@ -826,15 +837,15 @@ export class ModelMetadataService {
|
|
|
826
837
|
// Populate the View, Actions and Menus in the config file
|
|
827
838
|
private populateVAMConfigInFileInternal(formViewLayoutFields: any[], model: ModelMetadata, listViewLayoutFields: { type: string; attrs: { name: string; }; }[], treeViewLayoutFields: { type: string; attrs: { name: string; }; }[], metaData: any) {
|
|
828
839
|
const column1Fields = [];
|
|
829
|
-
const column2Fields = [];
|
|
840
|
+
// const column2Fields = [];
|
|
830
841
|
|
|
831
842
|
// Distribute fields between two columns
|
|
832
843
|
for (let i = 0; i < formViewLayoutFields.length; i++) {
|
|
833
|
-
if (i % 2 === 0) {
|
|
834
|
-
|
|
835
|
-
} else {
|
|
836
|
-
|
|
837
|
-
}
|
|
844
|
+
// if (i % 2 === 0) {
|
|
845
|
+
column1Fields.push(formViewLayoutFields[i]);
|
|
846
|
+
// } else {
|
|
847
|
+
// column2Fields.push(formViewLayoutFields[i]);
|
|
848
|
+
// }
|
|
838
849
|
}
|
|
839
850
|
const actionName = `${model.singularName}-list-action`;
|
|
840
851
|
const treeViewActionName = `${model.singularName}-tree-action`;
|
|
@@ -842,6 +853,7 @@ export class ModelMetadataService {
|
|
|
842
853
|
const treeViewName = `${model.singularName}-tree-view`;
|
|
843
854
|
const formViewName = `${model.singularName}-form-view`;
|
|
844
855
|
const menuName = `${model.singularName}-menu-item`;
|
|
856
|
+
const nextMenuSequenceNumber = (metaData.menus?.length ?? 0) + 1;
|
|
845
857
|
|
|
846
858
|
const action = {
|
|
847
859
|
displayName: `${model.displayName} List Action`,
|
|
@@ -874,7 +886,7 @@ export class ModelMetadataService {
|
|
|
874
886
|
const menu = {
|
|
875
887
|
displayName: `${model.displayName}`,
|
|
876
888
|
name: menuName,
|
|
877
|
-
sequenceNumber:
|
|
889
|
+
sequenceNumber: nextMenuSequenceNumber,
|
|
878
890
|
actionUserKey: actionName,
|
|
879
891
|
moduleUserKey: `${model.module.name}`,
|
|
880
892
|
parentMenuItemUserKey: "",
|
|
@@ -955,11 +967,11 @@ export class ModelMetadataService {
|
|
|
955
967
|
attrs: { name: "group-1", label: "", className: "col-12 sm:col-12 md:col-6 lg:col-6" },
|
|
956
968
|
children: column1Fields
|
|
957
969
|
},
|
|
958
|
-
{
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
}
|
|
970
|
+
// {
|
|
971
|
+
// type: "column",
|
|
972
|
+
// attrs: { name: "group-2", label: "", className: "col-12 sm:col-12 md:col-6 lg:col-6" },
|
|
973
|
+
// children: column2Fields
|
|
974
|
+
// }
|
|
963
975
|
]
|
|
964
976
|
},
|
|
965
977
|
]
|
|
@@ -1274,24 +1286,13 @@ export class ModelMetadataService {
|
|
|
1274
1286
|
};
|
|
1275
1287
|
const model = options.modelId ? await this.findOne(options.modelId, query) : await this.findOneByUserKey(options.modelUserKey, query.populate);
|
|
1276
1288
|
|
|
1277
|
-
let fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1278
|
-
|
|
1279
|
-
// If a list of field ids or field names is passed for refresh, use these fields only
|
|
1280
|
-
if (options.fieldIdsForRefresh && options.fieldIdsForRefresh.length > 0) {
|
|
1281
|
-
fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldIdsForRefresh.includes(+field.id));
|
|
1282
|
-
} else if (options.fieldNamesForRefresh && options.fieldNamesForRefresh.length > 0) {
|
|
1283
|
-
fieldsForRefresh = fieldsForRefresh.filter((field) => options.fieldNamesForRefresh.includes(field.name));
|
|
1284
|
-
}
|
|
1285
|
-
// const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1286
|
-
|
|
1287
1289
|
//Execute the schematic command to refresh the model
|
|
1288
|
-
const refreshOuput = await this.executeRefreshModelCommand(model,
|
|
1290
|
+
const refreshOuput = await this.executeRefreshModelCommand(model, options.dryRun);
|
|
1289
1291
|
|
|
1290
1292
|
return `${refreshOuput}`;
|
|
1291
1293
|
}
|
|
1292
1294
|
|
|
1293
|
-
private async executeRefreshModelCommand(model: ModelMetadata,
|
|
1294
|
-
// const fieldsForRefresh = model.fields.filter((field) => !field.isMarkedForRemoval);
|
|
1295
|
+
private async executeRefreshModelCommand(model: ModelMetadata, dryRun: boolean = false): Promise<string> {
|
|
1295
1296
|
const output = await this.schematicService.executeSchematicCommand(
|
|
1296
1297
|
REFRESH_MODEL_COMMAND,
|
|
1297
1298
|
{
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
ADD_MODULE_COMMAND,
|
|
23
23
|
SchematicService,
|
|
24
24
|
} from '../helpers/schematic.service';
|
|
25
|
+
import { CommandService } from '../helpers/command.service';
|
|
25
26
|
import { SolidRegistry } from '../helpers/solid-registry';
|
|
26
27
|
import { CodeGenerationOptions, ModuleMetadataConfiguration } from '../interfaces';
|
|
27
28
|
import { CrudHelperService } from './crud-helper.service';
|
|
@@ -40,6 +41,7 @@ export class ModuleMetadataService {
|
|
|
40
41
|
private readonly moduleMetadataRepo: ModuleMetadataRepository,
|
|
41
42
|
private readonly crudHelperService: CrudHelperService,
|
|
42
43
|
private readonly schematicService: SchematicService,
|
|
44
|
+
private readonly commandService: CommandService,
|
|
43
45
|
private readonly fileService: DiskFileService,
|
|
44
46
|
private readonly settingService: SettingService,
|
|
45
47
|
|
|
@@ -123,7 +125,7 @@ export class ModuleMetadataService {
|
|
|
123
125
|
await this.createInFile(module);
|
|
124
126
|
return module
|
|
125
127
|
});
|
|
126
|
-
} catch (error) {
|
|
128
|
+
} catch (error: any) {
|
|
127
129
|
// console.error('Transaction failed:', error);
|
|
128
130
|
this.logger.error('Transaction failed:', error);
|
|
129
131
|
throw error;
|
|
@@ -181,7 +183,7 @@ export class ModuleMetadataService {
|
|
|
181
183
|
actionUserKey: `${module?.name}-home-action`,
|
|
182
184
|
moduleUserKey: module?.name,
|
|
183
185
|
parentMenuItemUserKey: "",
|
|
184
|
-
iconName
|
|
186
|
+
iconName: "home"
|
|
185
187
|
}
|
|
186
188
|
],
|
|
187
189
|
views: [],
|
|
@@ -204,7 +206,7 @@ export class ModuleMetadataService {
|
|
|
204
206
|
// Write the JSON to the file
|
|
205
207
|
await fs.writeFile(filePath, metadataJson);
|
|
206
208
|
|
|
207
|
-
} catch (error) {
|
|
209
|
+
} catch (error: any) {
|
|
208
210
|
// console.error('File creation failed:', error);
|
|
209
211
|
this.logger.error('File creation failed:', error);
|
|
210
212
|
throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
|
|
@@ -219,7 +221,7 @@ export class ModuleMetadataService {
|
|
|
219
221
|
await this.updateInFile(module);
|
|
220
222
|
return module
|
|
221
223
|
});
|
|
222
|
-
} catch (error) {
|
|
224
|
+
} catch (error: any) {
|
|
223
225
|
// console.error('Transaction failed:', error);
|
|
224
226
|
this.logger.error('Transaction failed:', error);
|
|
225
227
|
throw error;
|
|
@@ -255,7 +257,7 @@ export class ModuleMetadataService {
|
|
|
255
257
|
try {
|
|
256
258
|
metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
257
259
|
|
|
258
|
-
} catch (error) {
|
|
260
|
+
} catch (error: any) {
|
|
259
261
|
metaData = {
|
|
260
262
|
moduleMetadata: {
|
|
261
263
|
name: null,
|
|
@@ -290,7 +292,7 @@ export class ModuleMetadataService {
|
|
|
290
292
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
291
293
|
await fs.writeFile(filePath, updatedContent);
|
|
292
294
|
|
|
293
|
-
} catch (error) {
|
|
295
|
+
} catch (error: any) {
|
|
294
296
|
// console.error('File creation failed:', error);
|
|
295
297
|
this.logger.error('File creation failed:', error);
|
|
296
298
|
throw new Error(ERROR_MESSAGES.FILE_WRITE_FAILED); // Trigger rollback
|
|
@@ -365,7 +367,7 @@ export class ModuleMetadataService {
|
|
|
365
367
|
await fs.rm(modulePath, { recursive: true, force: true });
|
|
366
368
|
await fs.rm(moduleMetadataPAth, { recursive: true, force: true });
|
|
367
369
|
this.logger.log(`Deleted file: ${moduleMetadataPAth}`);
|
|
368
|
-
} catch (error) {
|
|
370
|
+
} catch (error: any) {
|
|
369
371
|
this.logger.error(`Error deleting file: ${moduleMetadataPAth}`, error);
|
|
370
372
|
throw new Error(ERROR_MESSAGES.FILE_DELETE_FAILED); // Trigger rollback
|
|
371
373
|
}
|
|
@@ -403,6 +405,15 @@ export class ModuleMetadataService {
|
|
|
403
405
|
return true
|
|
404
406
|
}
|
|
405
407
|
|
|
408
|
+
@DisallowInProduction()
|
|
409
|
+
async generateCodeViaCtl(moduleId: number): Promise<string> {
|
|
410
|
+
return this.commandService.executeCommandWithArgs({
|
|
411
|
+
command: 'npx',
|
|
412
|
+
args: ['@solixai/solidctl@latest', 'generate', 'module', `--id=${moduleId}`],
|
|
413
|
+
cwd: path.join(process.cwd(), '..'),
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
|
|
406
417
|
@DisallowInProduction()
|
|
407
418
|
async generateCode(options: CodeGenerationOptions): Promise<string> {
|
|
408
419
|
if (!options.moduleId && !options.moduleUserKey) {
|
|
@@ -15,9 +15,9 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
|
|
|
15
15
|
protected readonly mqMessageService: MqMessageService,
|
|
16
16
|
protected readonly mqMessageQueueService: MqMessageQueueService,
|
|
17
17
|
) {
|
|
18
|
-
this.serviceRole = process.env.QUEUES_SERVICE_ROLE;
|
|
19
|
-
if (!
|
|
20
|
-
this.logger.debug('
|
|
18
|
+
this.serviceRole = process.env.QUEUES_SERVICE_ROLE || 'both';
|
|
19
|
+
if (!process.env.QUEUES_SERVICE_ROLE) {
|
|
20
|
+
this.logger.debug('QUEUES_SERVICE_ROLE is not defined. Defaulting DatabasePublisher service role to "both".');
|
|
21
21
|
}
|
|
22
22
|
// this.logger.debug(`DatabasePublisher instance created with options: ${JSON.stringify(this.options())}`);
|
|
23
23
|
}
|
|
@@ -74,7 +74,7 @@ export abstract class DatabasePublisher<T> implements QueuePublisher<T> {
|
|
|
74
74
|
mqMessageQueueId: mqMessageQueue.id,
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
|
-
catch (error) {
|
|
77
|
+
catch (error: any) {
|
|
78
78
|
this.logger.error(error.message, error.stack);
|
|
79
79
|
}
|
|
80
80
|
|