@solidxai/core 0.1.10 → 0.1.11-beta.0
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/controllers/datasource-introspection.controller.d.ts +234 -0
- package/dist/controllers/datasource-introspection.controller.d.ts.map +1 -0
- package/dist/controllers/datasource-introspection.controller.js +98 -0
- package/dist/controllers/datasource-introspection.controller.js.map +1 -0
- package/dist/controllers/datasource-management.controller.d.ts +18 -0
- package/dist/controllers/datasource-management.controller.d.ts.map +1 -0
- package/dist/controllers/datasource-management.controller.js +55 -0
- package/dist/controllers/datasource-management.controller.js.map +1 -0
- package/dist/dtos/create-datasource-management.dto.d.ts +25 -0
- package/dist/dtos/create-datasource-management.dto.d.ts.map +1 -0
- package/dist/dtos/create-datasource-management.dto.js +169 -0
- package/dist/dtos/create-datasource-management.dto.js.map +1 -0
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts +45 -0
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts.map +1 -0
- package/dist/dtos/datasource-introspection-mapping.dto.js +233 -0
- package/dist/dtos/datasource-introspection-mapping.dto.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts +26 -0
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts.map +1 -0
- package/dist/interfaces/datasource-introspection-provider.interface.js +3 -0
- package/dist/interfaces/datasource-introspection-provider.interface.js.map +1 -0
- package/dist/seeders/seed-data/solid-core-metadata.json +21 -0
- package/dist/services/authentication.service.js +1 -1
- package/dist/services/authentication.service.js.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.d.ts.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js +2 -2
- package/dist/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.js.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.d.ts.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js +2 -2
- package/dist/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.js.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts +3 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.d.ts.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js +71 -0
- package/dist/services/dashboard-providers/mq-dashboard-provider-utils.js.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.d.ts.map +1 -1
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js +3 -3
- package/dist/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts +11 -0
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts.map +1 -0
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js +181 -0
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js.map +1 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts +11 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts.map +1 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js +90 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js.map +1 -0
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts +11 -0
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts.map +1 -0
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js +156 -0
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js.map +1 -0
- package/dist/services/datasource-introspection.service.d.ts +288 -0
- package/dist/services/datasource-introspection.service.d.ts.map +1 -0
- package/dist/services/datasource-introspection.service.js +1278 -0
- package/dist/services/datasource-introspection.service.js.map +1 -0
- package/dist/services/datasource-management.service.d.ts +60 -0
- package/dist/services/datasource-management.service.d.ts.map +1 -0
- package/dist/services/datasource-management.service.js +461 -0
- package/dist/services/datasource-management.service.js.map +1 -0
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +19 -0
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +1 -3
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +47 -15
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/role-metadata.service.d.ts +1 -0
- package/dist/services/role-metadata.service.d.ts.map +1 -1
- package/dist/services/role-metadata.service.js +13 -0
- package/dist/services/role-metadata.service.js.map +1 -1
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js +2 -3
- package/dist/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.js.map +1 -1
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.d.ts.map +1 -1
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js +2 -3
- package/dist/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.js.map +1 -1
- package/dist/services/setting.service.d.ts +1 -0
- package/dist/services/setting.service.d.ts.map +1 -1
- package/dist/services/setting.service.js +32 -8
- package/dist/services/setting.service.js.map +1 -1
- package/dist/services/solid-ts-morph.service.d.ts +1 -1
- package/dist/services/solid-ts-morph.service.d.ts.map +1 -1
- 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/package.json +1 -1
- package/src/controllers/datasource-introspection.controller.ts +58 -0
- package/src/controllers/datasource-management.controller.ts +24 -0
- package/src/dtos/create-datasource-management.dto.ts +139 -0
- package/src/dtos/datasource-introspection-mapping.dto.ts +182 -0
- package/src/index.ts +5 -0
- package/src/interfaces/datasource-introspection-provider.interface.ts +28 -0
- package/src/seeders/seed-data/solid-core-metadata.json +22 -1
- package/src/services/authentication.service.ts +1 -1
- package/src/services/dashboard-providers/mq-dashboard-latency-trend-provider.service.ts +9 -4
- package/src/services/dashboard-providers/mq-dashboard-messages-over-time-provider.service.ts +9 -4
- package/src/services/dashboard-providers/mq-dashboard-provider-utils.ts +82 -0
- package/src/services/dashboard-providers/mq-dashboard-queue-sla-heatmap-provider.service.ts +10 -4
- package/src/services/datasource-introspection/mssql-datasource-introspection-provider.service.ts +185 -0
- package/src/services/datasource-introspection/mysql-datasource-introspection-provider.service.ts +95 -0
- package/src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts +160 -0
- package/src/services/datasource-introspection.service.ts +1536 -0
- package/src/services/datasource-management.service.ts +566 -0
- package/src/services/field-metadata.service.ts +21 -1
- package/src/services/model-metadata.service.ts +50 -13
- package/src/services/role-metadata.service.ts +14 -0
- package/src/services/selection-providers/mq-dashboard-message-broker-variable-options-provider.service.ts +2 -4
- package/src/services/selection-providers/mq-dashboard-queue-name-variable-options-provider.service.ts +2 -4
- package/src/services/setting.service.ts +43 -12
- package/src/services/solid-ts-morph.service.ts +2 -2
- package/src/solid-core.module.ts +16 -0
|
@@ -24,6 +24,7 @@ import { ImportTransaction } from '../entities/import-transaction.entity';
|
|
|
24
24
|
import { MenuItemMetadata } from '../entities/menu-item-metadata.entity';
|
|
25
25
|
import { UserViewMetadata } from '../entities/user-view-metadata.entity';
|
|
26
26
|
import { PermissionMetadata } from '../entities/permission-metadata.entity';
|
|
27
|
+
import { RoleMetadata } from '../entities/role-metadata.entity';
|
|
27
28
|
import { ViewMetadata } from '../entities/view-metadata.entity';
|
|
28
29
|
import { CommandService } from '../helpers/command.service';
|
|
29
30
|
import {
|
|
@@ -37,7 +38,6 @@ import { CrudHelperService, FilterCombinator } from './crud-helper.service';
|
|
|
37
38
|
import { CRUDService } from './crud.service';
|
|
38
39
|
import { FieldMetadataService } from './field-metadata.service';
|
|
39
40
|
import { MediaStorageProviderMetadataService } from './media-storage-provider-metadata.service';
|
|
40
|
-
import { RoleMetadataService } from './role-metadata.service';
|
|
41
41
|
import { SolidIntrospectService } from './solid-introspect.service';
|
|
42
42
|
import { SolidTsMorphService } from './solid-ts-morph.service';
|
|
43
43
|
|
|
@@ -59,7 +59,6 @@ export class ModelMetadataService {
|
|
|
59
59
|
private readonly crudHelperService: CrudHelperService,
|
|
60
60
|
private readonly mediaStorageProviderMetadataService: MediaStorageProviderMetadataService,
|
|
61
61
|
private readonly fieldMetadataService: FieldMetadataService,
|
|
62
|
-
private readonly roleService: RoleMetadataService,
|
|
63
62
|
private readonly moduleMetadataHelperService: ModuleMetadataHelperService,
|
|
64
63
|
readonly introspectService: SolidIntrospectService,
|
|
65
64
|
private readonly solidTsMorphService: SolidTsMorphService,
|
|
@@ -501,6 +500,27 @@ export class ModelMetadataService {
|
|
|
501
500
|
|
|
502
501
|
// if found
|
|
503
502
|
if (existingModelMetadata) {
|
|
503
|
+
const hasChanges = Object.entries(updateDto).some(([key, value]) => {
|
|
504
|
+
if (key === 'module' || key === 'parentModel' || key === 'userKeyField') {
|
|
505
|
+
return existingModelMetadata[key]?.id !== value?.id;
|
|
506
|
+
}
|
|
507
|
+
if (key === 'fields') {
|
|
508
|
+
return JSON.stringify(existingModelMetadata.fields ?? null) !== JSON.stringify(value ?? null);
|
|
509
|
+
}
|
|
510
|
+
const currentValue = existingModelMetadata[key];
|
|
511
|
+
if (Array.isArray(currentValue) || Array.isArray(value)) {
|
|
512
|
+
return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);
|
|
513
|
+
}
|
|
514
|
+
if (value && typeof value === 'object') {
|
|
515
|
+
return JSON.stringify(currentValue ?? null) !== JSON.stringify(value ?? null);
|
|
516
|
+
}
|
|
517
|
+
return currentValue !== value;
|
|
518
|
+
});
|
|
519
|
+
|
|
520
|
+
if (!hasChanges) {
|
|
521
|
+
return existingModelMetadata;
|
|
522
|
+
}
|
|
523
|
+
|
|
504
524
|
const updatedModelMetadata = { ...existingModelMetadata, ...updateDto };
|
|
505
525
|
const updatedModel = await this.modelMetadataRepo.save(updatedModelMetadata);
|
|
506
526
|
return updatedModel
|
|
@@ -635,22 +655,27 @@ export class ModelMetadataService {
|
|
|
635
655
|
const metaData = await this.moduleMetadataHelperService.getModuleMetadataConfiguration(filePath);
|
|
636
656
|
if (metaData) {
|
|
637
657
|
const moduleMetadata = metaData?.moduleMetadata ?? metaData;
|
|
658
|
+
const vamMetadata =
|
|
659
|
+
Array.isArray(metaData?.views) || Array.isArray(metaData?.actions) || Array.isArray(metaData?.menus)
|
|
660
|
+
? metaData
|
|
661
|
+
: moduleMetadata;
|
|
638
662
|
const removedActionNameSet = new Set(removedActionNames);
|
|
639
663
|
const removedMenuNameSet = new Set(removedMenuNames);
|
|
640
664
|
const removedViewNameSet = new Set(removedViewNames);
|
|
641
665
|
|
|
642
|
-
const
|
|
666
|
+
const existingModels = Array.isArray(moduleMetadata?.models) ? moduleMetadata.models : [];
|
|
667
|
+
const existingModelIndex = existingModels.findIndex(
|
|
643
668
|
(existingModel: any) => existingModel.singularName === modelEntity.singularName
|
|
644
669
|
);
|
|
645
670
|
|
|
646
671
|
// Remove the model to be deleted from the metadata
|
|
647
672
|
if (existingModelIndex !== -1) {
|
|
648
|
-
|
|
673
|
+
existingModels.splice(existingModelIndex, 1);
|
|
649
674
|
}
|
|
650
675
|
|
|
651
676
|
// Remove references to this model in the menu, action & view sections.
|
|
652
|
-
const existingViews = Array.isArray(
|
|
653
|
-
|
|
677
|
+
const existingViews = Array.isArray(vamMetadata?.views) ? vamMetadata.views : [];
|
|
678
|
+
vamMetadata.views = existingViews.filter((view: any) => {
|
|
654
679
|
const shouldRemove = view?.modelUserKey === modelEntity.singularName || removedViewNameSet.has(view?.name);
|
|
655
680
|
if (shouldRemove && view?.name) {
|
|
656
681
|
removedViewNameSet.add(view.name);
|
|
@@ -658,8 +683,8 @@ export class ModelMetadataService {
|
|
|
658
683
|
return !shouldRemove;
|
|
659
684
|
});
|
|
660
685
|
|
|
661
|
-
const existingActions = Array.isArray(
|
|
662
|
-
|
|
686
|
+
const existingActions = Array.isArray(vamMetadata?.actions) ? vamMetadata.actions : [];
|
|
687
|
+
vamMetadata.actions = existingActions.filter((action: any) => {
|
|
663
688
|
const shouldRemove =
|
|
664
689
|
action?.modelUserKey === modelEntity.singularName ||
|
|
665
690
|
removedActionNameSet.has(action?.name) ||
|
|
@@ -671,7 +696,7 @@ export class ModelMetadataService {
|
|
|
671
696
|
return !shouldRemove;
|
|
672
697
|
});
|
|
673
698
|
|
|
674
|
-
let pendingMenus = Array.isArray(
|
|
699
|
+
let pendingMenus = Array.isArray(vamMetadata?.menus) ? [...vamMetadata.menus] : [];
|
|
675
700
|
let menuRemovedOnPass = true;
|
|
676
701
|
while (menuRemovedOnPass) {
|
|
677
702
|
menuRemovedOnPass = false;
|
|
@@ -693,7 +718,7 @@ export class ModelMetadataService {
|
|
|
693
718
|
return true;
|
|
694
719
|
});
|
|
695
720
|
}
|
|
696
|
-
|
|
721
|
+
vamMetadata.menus = pendingMenus;
|
|
697
722
|
|
|
698
723
|
const updatedContent = JSON.stringify(metaData, null, 2);
|
|
699
724
|
await fs.writeFile(filePath, updatedContent);
|
|
@@ -1386,7 +1411,15 @@ export class ModelMetadataService {
|
|
|
1386
1411
|
existingTreeViewAction = await actionRepo.save(createdTreeViewAction);
|
|
1387
1412
|
}
|
|
1388
1413
|
|
|
1389
|
-
const
|
|
1414
|
+
const roleRepo = this.dataSource.getRepository(RoleMetadata);
|
|
1415
|
+
const adminRole = await roleRepo.findOne({
|
|
1416
|
+
where: { name: 'Admin' },
|
|
1417
|
+
select: { id: true, name: true }
|
|
1418
|
+
});
|
|
1419
|
+
|
|
1420
|
+
if (!adminRole) {
|
|
1421
|
+
throw new NotFoundException(`Entity #Admin not found`);
|
|
1422
|
+
}
|
|
1390
1423
|
|
|
1391
1424
|
const menuData = {
|
|
1392
1425
|
displayName: `${model.displayName}`,
|
|
@@ -1394,7 +1427,6 @@ export class ModelMetadataService {
|
|
|
1394
1427
|
sequenceNumber: 1,
|
|
1395
1428
|
action: existingAction,
|
|
1396
1429
|
module: resolvedModule,
|
|
1397
|
-
roles: [adminRole],
|
|
1398
1430
|
parentMenuItemUserKey: ""
|
|
1399
1431
|
};
|
|
1400
1432
|
|
|
@@ -1402,7 +1434,12 @@ export class ModelMetadataService {
|
|
|
1402
1434
|
|
|
1403
1435
|
if (!existingMenu) {
|
|
1404
1436
|
const createdMenu = menuRepo.create(menuData);
|
|
1405
|
-
await menuRepo.save(createdMenu);
|
|
1437
|
+
existingMenu = await menuRepo.save(createdMenu);
|
|
1438
|
+
await menuRepo
|
|
1439
|
+
.createQueryBuilder()
|
|
1440
|
+
.relation(MenuItemMetadata, 'roles')
|
|
1441
|
+
.of(existingMenu.id)
|
|
1442
|
+
.add(adminRole.id);
|
|
1406
1443
|
}
|
|
1407
1444
|
}
|
|
1408
1445
|
|
|
@@ -45,6 +45,20 @@ export class RoleMetadataService extends CRUDService<RoleMetadata> {
|
|
|
45
45
|
return entity;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
async assertRoleExistsByName(roleName: string): Promise<void> {
|
|
49
|
+
const entity = await this.repo.findOne({
|
|
50
|
+
where: {
|
|
51
|
+
name: roleName
|
|
52
|
+
},
|
|
53
|
+
select: {
|
|
54
|
+
id: true
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
if (!entity) {
|
|
58
|
+
throw new NotFoundException(`Entity #${roleName} not found`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
48
62
|
// OK
|
|
49
63
|
async createRolesIfNotExists(roles: CreateRoleMetadataDto[]) {
|
|
50
64
|
for (let id = 0; id < roles.length; id++) {
|
|
@@ -2,6 +2,7 @@ import { Injectable } from "@nestjs/common";
|
|
|
2
2
|
import { SelectionProvider } from "src/decorators/selection-provider.decorator";
|
|
3
3
|
import { MqMessageRepository } from "src/repository/mq-message.repository";
|
|
4
4
|
import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "src/interfaces";
|
|
5
|
+
import { applyCaseInsensitiveContainsFilter } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
|
|
5
6
|
|
|
6
7
|
@SelectionProvider()
|
|
7
8
|
@Injectable()
|
|
@@ -31,9 +32,7 @@ export class MqDashboardMessageBrokerVariableOptionsProvider implements ISelecti
|
|
|
31
32
|
qb.select("DISTINCT mqMessage.messageBroker", "value")
|
|
32
33
|
.where("mqMessage.messageBroker IS NOT NULL");
|
|
33
34
|
|
|
34
|
-
|
|
35
|
-
qb.andWhere("mqMessage.messageBroker ILIKE :query", { query: `%${query}%` });
|
|
36
|
-
}
|
|
35
|
+
applyCaseInsensitiveContainsFilter(qb, "mqMessage.messageBroker", query, "query");
|
|
37
36
|
|
|
38
37
|
const rows = await qb
|
|
39
38
|
.orderBy("value", "ASC")
|
|
@@ -49,4 +48,3 @@ export class MqDashboardMessageBrokerVariableOptionsProvider implements ISelecti
|
|
|
49
48
|
}));
|
|
50
49
|
}
|
|
51
50
|
}
|
|
52
|
-
|
|
@@ -2,6 +2,7 @@ import { Injectable } from "@nestjs/common";
|
|
|
2
2
|
import { SelectionProvider } from "src/decorators/selection-provider.decorator";
|
|
3
3
|
import { MqMessageQueueRepository } from "src/repository/mq-message-queue.repository";
|
|
4
4
|
import { ISelectionProvider, ISelectionProviderContext, ISelectionProviderValues } from "src/interfaces";
|
|
5
|
+
import { applyCaseInsensitiveContainsFilter } from "src/services/dashboard-providers/mq-dashboard-provider-utils";
|
|
5
6
|
|
|
6
7
|
@SelectionProvider()
|
|
7
8
|
@Injectable()
|
|
@@ -32,9 +33,7 @@ export class MqDashboardQueueNameVariableOptionsProvider implements ISelectionPr
|
|
|
32
33
|
const limit = Math.min(Math.max(ctxt?.limit ?? 25, 1), 200);
|
|
33
34
|
const offset = Math.max(ctxt?.offset ?? 0, 0);
|
|
34
35
|
|
|
35
|
-
|
|
36
|
-
qb.andWhere("mqMessageQueue.name ILIKE :query", { query: `%${query}%` });
|
|
37
|
-
}
|
|
36
|
+
applyCaseInsensitiveContainsFilter(qb, "mqMessageQueue.name", query, "query");
|
|
38
37
|
|
|
39
38
|
const records = await qb
|
|
40
39
|
.select(["mqMessageQueue.name"])
|
|
@@ -48,4 +47,3 @@ export class MqDashboardQueueNameVariableOptionsProvider implements ISelectionPr
|
|
|
48
47
|
.map((r) => ({ label: r.name, value: r.name }));
|
|
49
48
|
}
|
|
50
49
|
}
|
|
51
|
-
|
|
@@ -51,6 +51,10 @@ export class SettingService {
|
|
|
51
51
|
return settings;
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
private async getSettingsFromDbForSeeding(): Promise<Setting[]> {
|
|
55
|
+
return this.repo.find({ relations: ['moduleMetadata'] });
|
|
56
|
+
}
|
|
57
|
+
|
|
54
58
|
private parseSettingValue(value: string, key: string): any {
|
|
55
59
|
try {
|
|
56
60
|
return JSON.parse(value);
|
|
@@ -194,15 +198,30 @@ export class SettingService {
|
|
|
194
198
|
const saEditableAndAbove = this.getAllSettingsFromProviders().filter(i => [SettingLevel.SystemAdminEditable, SettingLevel.InternalUser].includes(i.level));
|
|
195
199
|
|
|
196
200
|
// Get hold of the current values from the database.
|
|
197
|
-
const existingSettingsFromDb: Setting[] = await this.
|
|
201
|
+
const existingSettingsFromDb: Setting[] = await this.getSettingsFromDbForSeeding();
|
|
198
202
|
|
|
199
203
|
// const existingKeysFromDb = new Set(existingSettingsFromDb.map(s => s.key));
|
|
200
204
|
const existingSettingsFromDbByKey = new Map(existingSettingsFromDb.map(setting => [setting.key, setting]));
|
|
201
|
-
const
|
|
202
|
-
|
|
205
|
+
const settingsToCreate: Setting[] = [];
|
|
206
|
+
const settingsToUpdate: Setting[] = [];
|
|
207
|
+
const moduleNames = Array.from(
|
|
208
|
+
new Set(
|
|
209
|
+
saEditableAndAbove
|
|
210
|
+
.map(setting => setting.moduleName)
|
|
211
|
+
.filter((moduleName): moduleName is string => !!moduleName)
|
|
212
|
+
)
|
|
213
|
+
);
|
|
214
|
+
const moduleMetadataByName = new Map<string, Awaited<ReturnType<ModuleMetadataRepository['findOneBy']>>>();
|
|
215
|
+
|
|
216
|
+
await Promise.all(
|
|
217
|
+
moduleNames.map(async (moduleName) => {
|
|
218
|
+
const moduleMetadata = await this.moduleMetadataRepo.findOneBy({ name: moduleName });
|
|
219
|
+
moduleMetadataByName.set(moduleName, moduleMetadata);
|
|
220
|
+
})
|
|
221
|
+
);
|
|
203
222
|
|
|
204
223
|
for (const { key, value, level, moduleName, encrypted } of saEditableAndAbove) {
|
|
205
|
-
const moduleMetadata =
|
|
224
|
+
const moduleMetadata = moduleName ? moduleMetadataByName.get(moduleName) : null;
|
|
206
225
|
if (!existingSettingsFromDbByKey.has(key)) {
|
|
207
226
|
const setting = new Setting();
|
|
208
227
|
setting.key = key;
|
|
@@ -227,24 +246,36 @@ export class SettingService {
|
|
|
227
246
|
}
|
|
228
247
|
setting.value = rawValue;
|
|
229
248
|
|
|
230
|
-
|
|
249
|
+
settingsToCreate.push(setting);
|
|
231
250
|
}
|
|
232
251
|
else {
|
|
233
252
|
const setting = existingSettingsFromDbByKey.get(key);
|
|
253
|
+
const existingModuleMetadataId = setting.moduleMetadata?.id ?? null;
|
|
254
|
+
const nextModuleMetadataId = moduleMetadata?.id ?? null;
|
|
255
|
+
const levelChanged = setting.level !== level;
|
|
256
|
+
const encryptedChanged = setting.encrypted !== !!encrypted;
|
|
257
|
+
const moduleChanged = !!moduleMetadata && existingModuleMetadataId !== nextModuleMetadataId;
|
|
258
|
+
|
|
259
|
+
if (!levelChanged && !encryptedChanged && !moduleChanged) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
|
|
234
263
|
setting.level = level;
|
|
235
264
|
setting.encrypted = !!encrypted;
|
|
236
|
-
if (moduleMetadata)
|
|
265
|
+
if (moduleMetadata) {
|
|
237
266
|
setting.moduleMetadata = moduleMetadata;
|
|
238
|
-
|
|
267
|
+
}
|
|
268
|
+
settingsToUpdate.push(setting);
|
|
239
269
|
}
|
|
240
270
|
}
|
|
241
271
|
|
|
242
|
-
if (
|
|
243
|
-
await this.repo.save(
|
|
272
|
+
if (settingsToCreate.length > 0) {
|
|
273
|
+
await this.repo.save(settingsToCreate);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (settingsToUpdate.length > 0) {
|
|
277
|
+
await this.repo.save(settingsToUpdate);
|
|
244
278
|
}
|
|
245
|
-
// if (settingsToUpdate.length > 0) {
|
|
246
|
-
// await this.repo.save(settingsToUpdate);
|
|
247
|
-
// }
|
|
248
279
|
}
|
|
249
280
|
|
|
250
281
|
/**
|
|
@@ -5,7 +5,7 @@ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
5
5
|
import { Project, Node, ObjectLiteralExpression, ArrayLiteralExpression, QuoteKind, IndentationText } from "ts-morph";
|
|
6
6
|
import { MethodDeclarationStructure, StructureKind } from "ts-morph";
|
|
7
7
|
|
|
8
|
-
type Bucket = "providers" | "exports";
|
|
8
|
+
type Bucket = "imports" | "providers" | "exports";
|
|
9
9
|
|
|
10
10
|
// interface SolidTsMorphOptions {
|
|
11
11
|
// /** Absolute path to monorepo root. Defaults to auto-detect or ENV. */
|
|
@@ -470,4 +470,4 @@ export class SolidTsMorphService {
|
|
|
470
470
|
|
|
471
471
|
|
|
472
472
|
|
|
473
|
-
}
|
|
473
|
+
}
|
package/src/solid-core.module.ts
CHANGED
|
@@ -20,6 +20,8 @@ import { ModelMetadataController } from "./controllers/model-metadata.controller
|
|
|
20
20
|
import { ModuleMetadataExplorerController } from "./controllers/module-metadata-explorer.controller";
|
|
21
21
|
import { ModuleMetadataController } from "./controllers/module-metadata.controller";
|
|
22
22
|
import { ModulePackageController } from "./controllers/module-package.controller";
|
|
23
|
+
import { DatasourceManagementController } from "./controllers/datasource-management.controller";
|
|
24
|
+
import { DatasourceIntrospectionController } from "./controllers/datasource-introspection.controller";
|
|
23
25
|
import { TestController } from "./controllers/test.controller";
|
|
24
26
|
import { FieldMetadata } from "./entities/field-metadata.entity";
|
|
25
27
|
import { ListOfValues } from "./entities/list-of-values.entity";
|
|
@@ -36,6 +38,8 @@ import { PseudoForeignKeySelectionProvider } from "./services/selection-provider
|
|
|
36
38
|
import { ModuleMetadataSeederService } from "./seeders/module-metadata-seeder.service";
|
|
37
39
|
import { ModuleTestDataService } from "./seeders/module-test-data.service";
|
|
38
40
|
import { CrudHelperService } from "./services/crud-helper.service";
|
|
41
|
+
import { DatasourceManagementService } from "./services/datasource-management.service";
|
|
42
|
+
import { DatasourceIntrospectionService } from "./services/datasource-introspection.service";
|
|
39
43
|
import { FieldMetadataService } from "./services/field-metadata.service";
|
|
40
44
|
import { DashboardRuntimeService } from "./services/dashboard-runtime.service";
|
|
41
45
|
import { ListOfValuesService } from "./services/list-of-values.service";
|
|
@@ -379,6 +383,9 @@ import { DashboardUserLayout } from './entities/dashboard-user-layout.entity';
|
|
|
379
383
|
import { DashboardUserLayoutService } from './services/dashboard-user-layout.service';
|
|
380
384
|
import { DashboardUserLayoutController } from './controllers/dashboard-user-layout.controller';
|
|
381
385
|
import { DashboardUserLayoutRepository } from './repositories/dashboard-user-layout.repository';
|
|
386
|
+
import { MssqlDatasourceIntrospectionProviderService } from "./services/datasource-introspection/mssql-datasource-introspection-provider.service";
|
|
387
|
+
import { MysqlDatasourceIntrospectionProviderService } from "./services/datasource-introspection/mysql-datasource-introspection-provider.service";
|
|
388
|
+
import { PostgresDatasourceIntrospectionProviderService } from "./services/datasource-introspection/postgres-datasource-introspection-provider.service";
|
|
382
389
|
|
|
383
390
|
@Global()
|
|
384
391
|
@Module({
|
|
@@ -463,6 +470,8 @@ import { DashboardUserLayoutRepository } from './repositories/dashboard-user-lay
|
|
|
463
470
|
ExportTransactionController,
|
|
464
471
|
FieldMetadataController,
|
|
465
472
|
DashboardController,
|
|
473
|
+
DatasourceManagementController,
|
|
474
|
+
DatasourceIntrospectionController,
|
|
466
475
|
GoogleAuthenticationController,
|
|
467
476
|
FacebookAuthenticationController,
|
|
468
477
|
MicrosoftAuthenticationController,
|
|
@@ -526,6 +535,8 @@ import { DashboardUserLayoutRepository } from './repositories/dashboard-user-lay
|
|
|
526
535
|
useClass: HttpExceptionFilter,
|
|
527
536
|
},
|
|
528
537
|
ModuleMetadataService,
|
|
538
|
+
DatasourceManagementService,
|
|
539
|
+
DatasourceIntrospectionService,
|
|
529
540
|
ModuleMetadataExplorerService,
|
|
530
541
|
ModuleMetadataHelperService,
|
|
531
542
|
ModulePackageService,
|
|
@@ -723,7 +734,11 @@ import { DashboardUserLayoutRepository } from './repositories/dashboard-user-lay
|
|
|
723
734
|
ExportTransactionService,
|
|
724
735
|
ExcelService,
|
|
725
736
|
CsvService,
|
|
737
|
+
DatasourceManagementService,
|
|
726
738
|
DashboardRuntimeService,
|
|
739
|
+
MssqlDatasourceIntrospectionProviderService,
|
|
740
|
+
MysqlDatasourceIntrospectionProviderService,
|
|
741
|
+
PostgresDatasourceIntrospectionProviderService,
|
|
727
742
|
ImportTransactionService,
|
|
728
743
|
ImportTransactionErrorLogService,
|
|
729
744
|
CreatedByUpdatedBySubscriber,
|
|
@@ -823,6 +838,7 @@ import { DashboardUserLayoutRepository } from './repositories/dashboard-user-lay
|
|
|
823
838
|
ModelMetadataHelperService,
|
|
824
839
|
ModelMetadataService,
|
|
825
840
|
ModuleMetadataService,
|
|
841
|
+
DatasourceIntrospectionService,
|
|
826
842
|
ModuleMetadataExplorerService,
|
|
827
843
|
ModulePackageService,
|
|
828
844
|
MqMessageQueueService,
|