@solidstarters/solid-core 1.2.21 → 1.2.23
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/model-metadata.controller.d.ts +4 -0
- package/dist/controllers/model-metadata.controller.d.ts.map +1 -1
- package/dist/controllers/model-metadata.controller.js +12 -0
- package/dist/controllers/model-metadata.controller.js.map +1 -1
- package/dist/controllers/test.controller.d.ts.map +1 -1
- package/dist/controllers/test.controller.js +2 -2
- package/dist/controllers/test.controller.js.map +1 -1
- package/dist/dtos/basic-filters.dto.d.ts +5 -2
- package/dist/dtos/basic-filters.dto.d.ts.map +1 -1
- package/dist/dtos/basic-filters.dto.js +13 -9
- package/dist/dtos/basic-filters.dto.js.map +1 -1
- package/dist/dtos/create-user.dto.d.ts.map +1 -1
- package/dist/dtos/create-user.dto.js +2 -2
- package/dist/dtos/create-user.dto.js.map +1 -1
- package/dist/helpers/schematic.service.js +1 -1
- package/dist/helpers/schematic.service.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/jobs/queue-test-subscriber.service.d.ts +1 -0
- package/dist/jobs/queue-test-subscriber.service.d.ts.map +1 -1
- package/dist/jobs/queue-test-subscriber.service.js +5 -3
- package/dist/jobs/queue-test-subscriber.service.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +31 -24
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +6 -5
- package/dist/services/crud-helper.service.d.ts.map +1 -1
- package/dist/services/crud-helper.service.js +6 -4
- package/dist/services/crud-helper.service.js.map +1 -1
- package/dist/services/field-metadata.service.d.ts.map +1 -1
- package/dist/services/field-metadata.service.js +40 -7
- package/dist/services/field-metadata.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js +1 -1
- package/dist/services/mediaStorageProviders/file-storage-provider.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +4 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +48 -7
- package/dist/services/model-metadata.service.js.map +1 -1
- package/dist/services/module-metadata.service.d.ts.map +1 -1
- package/dist/services/module-metadata.service.js +4 -4
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/solid-introspect.service.d.ts.map +1 -1
- package/dist/services/solid-introspect.service.js +9 -1
- package/dist/services/solid-introspect.service.js.map +1 -1
- package/dist/services/view-metadata.service.d.ts +1 -0
- package/dist/services/view-metadata.service.d.ts.map +1 -1
- package/dist/services/view-metadata.service.js +9 -0
- package/dist/services/view-metadata.service.js.map +1 -1
- package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.d.ts.map +1 -1
- package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.js +1 -1
- package/dist/subscribers/softDeleteAwareEventSubscriber.subscriber.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/controllers/model-metadata.controller.ts +6 -0
- package/src/controllers/test.controller.ts +4 -2
- package/src/dtos/basic-filters.dto.ts +11 -7
- package/src/dtos/create-user.dto.ts +1 -1
- package/src/helpers/schematic.service.ts +1 -1
- package/src/index.ts +0 -1
- package/src/jobs/queue-test-subscriber.service.ts +4 -2
- package/src/seeders/module-metadata-seeder.service.ts +38 -31
- package/src/seeders/seed-data/solid-core-metadata.json +6 -5
- package/src/services/crud-helper.service.ts +8 -6
- package/src/services/field-metadata.service.ts +42 -13
- package/src/services/mediaStorageProviders/file-storage-provider.ts +1 -1
- package/src/services/model-metadata.service.ts +174 -120
- package/src/services/module-metadata.service.ts +8 -4
- package/src/services/solid-introspect.service.ts +17 -15
- package/src/services/view-metadata.service.ts +13 -0
- package/src/subscribers/softDeleteAwareEventSubscriber.subscriber.ts +2 -1
- package/dist/commands/basic.command.d.ts +0 -19
- package/dist/commands/basic.command.d.ts.map +0 -1
- package/dist/commands/basic.command.js +0 -79
- package/dist/commands/basic.command.js.map +0 -1
- package/src/commands/basic.command.ts +0 -60
|
@@ -131,7 +131,8 @@ export class ModelMetadataService {
|
|
|
131
131
|
return model
|
|
132
132
|
});
|
|
133
133
|
} catch (error) {
|
|
134
|
-
console.error('Transaction failed:', error);
|
|
134
|
+
// console.error('Transaction failed:', error);
|
|
135
|
+
this.logger.error('Transaction failed:', error);
|
|
135
136
|
throw error;
|
|
136
137
|
}
|
|
137
138
|
}
|
|
@@ -165,7 +166,8 @@ export class ModelMetadataService {
|
|
|
165
166
|
// return model
|
|
166
167
|
});
|
|
167
168
|
} catch (error) {
|
|
168
|
-
console.error('Transaction failed:', error);
|
|
169
|
+
// console.error('Transaction failed:', error);
|
|
170
|
+
this.logger.error('Transaction failed:', error);
|
|
169
171
|
throw error;
|
|
170
172
|
}
|
|
171
173
|
}
|
|
@@ -200,6 +202,7 @@ export class ModelMetadataService {
|
|
|
200
202
|
fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);
|
|
201
203
|
}
|
|
202
204
|
// console.log(fieldMetadata.displayName);
|
|
205
|
+
// this.logger.debug(fieldMetadata.displayName);
|
|
203
206
|
|
|
204
207
|
const fieldMetadataObject = this.fieldMetadataRepo.create(fieldMetadata);
|
|
205
208
|
const affectedField = await manager.save(fieldMetadataObject);
|
|
@@ -357,6 +360,17 @@ export class ModelMetadataService {
|
|
|
357
360
|
|
|
358
361
|
}
|
|
359
362
|
}
|
|
363
|
+
const column1Fields = [];
|
|
364
|
+
const column2Fields = [];
|
|
365
|
+
|
|
366
|
+
// Distribute fields between two columns
|
|
367
|
+
for (let i = 0; i < formViewLayoutFields.length; i++) {
|
|
368
|
+
if (i % 2 === 0) {
|
|
369
|
+
column1Fields.push(formViewLayoutFields[i]);
|
|
370
|
+
} else {
|
|
371
|
+
column2Fields.push(formViewLayoutFields[i]);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
360
374
|
const action = {
|
|
361
375
|
displayName: `${model.displayName} List View`,
|
|
362
376
|
name: `${model.singularName}-list-view`,
|
|
@@ -424,11 +438,17 @@ export class ModelMetadataService {
|
|
|
424
438
|
{
|
|
425
439
|
type: "row",
|
|
426
440
|
attrs: { name: "sheet-1" },
|
|
427
|
-
children: [
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
441
|
+
children: [
|
|
442
|
+
{
|
|
443
|
+
type: "column",
|
|
444
|
+
attrs: { name: "group-1", label: "", className: "col-6" },
|
|
445
|
+
children: column1Fields
|
|
446
|
+
},
|
|
447
|
+
{
|
|
448
|
+
type: "column",
|
|
449
|
+
attrs: { name: "group-1", label: "", className: "col-6" },
|
|
450
|
+
children: column2Fields
|
|
451
|
+
}]
|
|
432
452
|
},
|
|
433
453
|
]
|
|
434
454
|
}
|
|
@@ -448,7 +468,8 @@ export class ModelMetadataService {
|
|
|
448
468
|
await fs.writeFile(filePath, updatedContent);
|
|
449
469
|
|
|
450
470
|
} catch (error) {
|
|
451
|
-
console.error('File creation failed:', error);
|
|
471
|
+
// console.error('File creation failed:', error);
|
|
472
|
+
this.logger.error('File creation failed:', error);
|
|
452
473
|
throw new Error('File creation failed, rolling back transaction'); // Trigger rollback
|
|
453
474
|
}
|
|
454
475
|
}
|
|
@@ -489,7 +510,7 @@ export class ModelMetadataService {
|
|
|
489
510
|
// Existing field
|
|
490
511
|
const existingField = existingFields.find((field) => field.id === fieldMetadata.id);
|
|
491
512
|
if (existingField) {
|
|
492
|
-
if (fieldMetadata.mediaStorageProviderId) {
|
|
513
|
+
if (fieldMetadata.mediaStorageProviderId) {
|
|
493
514
|
fieldMetadata['mediaStorageProvider'] = await this.mediaStorageProviderMetadataService.findOne(fieldMetadata.mediaStorageProviderId);
|
|
494
515
|
}
|
|
495
516
|
Object.assign(existingField, fieldMetadata);
|
|
@@ -535,28 +556,28 @@ export class ModelMetadataService {
|
|
|
535
556
|
const userKeyFields = fieldsMetadata.filter(field => field.isUserKey);
|
|
536
557
|
|
|
537
558
|
if (userKeyFields.length > 0) {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
}
|
|
559
|
+
const newUserKeyField = userKeyFields[userKeyFields.length - 1];
|
|
560
|
+
const savedUserKeyField = await fieldRepo.findOne({ where: { id: newUserKeyField.id } });
|
|
561
|
+
|
|
562
|
+
if (savedUserKeyField) {
|
|
563
|
+
finalModel.userKeyField = savedUserKeyField;
|
|
564
|
+
await modelRepo.save(finalModel);
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
const otherUserKeyFields = userKeyFields.filter(field => field.id !== newUserKeyField.id);
|
|
568
|
+
|
|
569
|
+
for (const field of otherUserKeyFields) {
|
|
570
|
+
const existingField = await fieldRepo.findOne({ where: { id: field.id } });
|
|
571
|
+
if (existingField) {
|
|
572
|
+
existingField.isUserKey = false;
|
|
573
|
+
await fieldRepo.save(existingField);
|
|
554
574
|
}
|
|
575
|
+
}
|
|
555
576
|
} else {
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
577
|
+
if (finalModel.userKeyField) {
|
|
578
|
+
finalModel.userKeyField = null;
|
|
579
|
+
await modelRepo.save(finalModel);
|
|
580
|
+
}
|
|
560
581
|
}
|
|
561
582
|
|
|
562
583
|
return updatedModel;
|
|
@@ -615,7 +636,8 @@ export class ModelMetadataService {
|
|
|
615
636
|
await fs.writeFile(filePath, updatedContent);
|
|
616
637
|
|
|
617
638
|
} catch (error) {
|
|
618
|
-
console.error('File creation failed:', error);
|
|
639
|
+
// console.error('File creation failed:', error);
|
|
640
|
+
this.logger.error('File creation failed:', error);
|
|
619
641
|
throw new Error('File creation failed, rolling back transaction'); // Trigger rollback
|
|
620
642
|
}
|
|
621
643
|
}
|
|
@@ -679,38 +701,38 @@ export class ModelMetadataService {
|
|
|
679
701
|
|
|
680
702
|
async generateCode(options: CodeGenerationOptions): Promise<string> {
|
|
681
703
|
const query = {
|
|
682
|
-
|
|
704
|
+
populate: ["module", "fields"]
|
|
683
705
|
};
|
|
684
706
|
|
|
685
|
-
const model = options.modelId
|
|
686
|
-
|
|
687
|
-
|
|
707
|
+
const model = options.modelId
|
|
708
|
+
? await this.findOne(options.modelId, query)
|
|
709
|
+
: await this.findOneByUserKey(options.modelUserKey, query.populate);
|
|
688
710
|
|
|
689
711
|
options.fieldIdsForRemoval = model.fields
|
|
690
|
-
|
|
691
|
-
|
|
712
|
+
.filter(field => field.isMarkedForRemoval)
|
|
713
|
+
.map(field => field.id);
|
|
692
714
|
|
|
693
715
|
const refreshModelCodeOutput = await this.generateModelCode(options);
|
|
694
716
|
const removeFieldCodeOuput = await this.generateRemoveFieldsCode(options);
|
|
695
717
|
|
|
696
718
|
const listViewLayout = model.fields.map(field => ({
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
719
|
+
type: "field",
|
|
720
|
+
attrs: {
|
|
721
|
+
name: `${field.name}`,
|
|
722
|
+
sortable: true,
|
|
723
|
+
filterable: true
|
|
724
|
+
}
|
|
703
725
|
}));
|
|
704
726
|
|
|
705
727
|
const formViewLayout = model.fields.map(field => ({
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
728
|
+
type: "field",
|
|
729
|
+
attrs: {
|
|
730
|
+
name: `${field.name}`
|
|
731
|
+
}
|
|
710
732
|
}));
|
|
711
733
|
|
|
712
734
|
const resolvedModule = await this.dataSource.getRepository(ModuleMetadata).findOne({
|
|
713
|
-
|
|
735
|
+
where: { id: model.module.id }
|
|
714
736
|
});
|
|
715
737
|
|
|
716
738
|
const viewRepo = this.dataSource.getRepository(ViewMetadata);
|
|
@@ -718,82 +740,82 @@ export class ModelMetadataService {
|
|
|
718
740
|
const menuRepo = this.dataSource.getRepository(MenuItemMetadata);
|
|
719
741
|
|
|
720
742
|
const modelViews = [
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
743
|
+
{
|
|
744
|
+
name: `${model.singularName}-list-view`,
|
|
745
|
+
displayName: `${model.displayName}`,
|
|
746
|
+
type: 'list',
|
|
747
|
+
context: "{}",
|
|
748
|
+
module: resolvedModule,
|
|
749
|
+
model: model,
|
|
750
|
+
layout: JSON.stringify({
|
|
751
|
+
type: "list",
|
|
752
|
+
attrs: {
|
|
753
|
+
pagination: true,
|
|
754
|
+
pageSizeOptions: [10, 25, 50],
|
|
755
|
+
enableGlobalSearch: true,
|
|
756
|
+
create: true,
|
|
757
|
+
edit: true,
|
|
758
|
+
delete: true
|
|
759
|
+
},
|
|
760
|
+
children: listViewLayout
|
|
761
|
+
}, null, 3)
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
name: `${model.singularName}-form-view`,
|
|
765
|
+
displayName: `${model.displayName}`,
|
|
766
|
+
type: 'form',
|
|
767
|
+
context: "{}",
|
|
768
|
+
module: resolvedModule,
|
|
769
|
+
model: model,
|
|
770
|
+
layout: JSON.stringify({
|
|
771
|
+
type: "form",
|
|
772
|
+
attrs: { name: "form-1", label: `${model.displayName}`, className: "grid" },
|
|
773
|
+
children: [
|
|
774
|
+
{
|
|
775
|
+
type: "sheet",
|
|
776
|
+
attrs: { name: "sheet-1" },
|
|
777
|
+
children: [
|
|
778
|
+
{
|
|
779
|
+
type: "row",
|
|
780
|
+
attrs: { name: "group-1", label: "", className: "" },
|
|
781
|
+
children: [
|
|
752
782
|
{
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
{
|
|
757
|
-
type: "row",
|
|
758
|
-
attrs: { name: "group-1", label: "", className: "" },
|
|
759
|
-
children: [
|
|
760
|
-
{
|
|
761
|
-
type: "column",
|
|
762
|
-
attrs: { name: "group-1", label: "", className: "col-6" },
|
|
763
|
-
children: formViewLayout
|
|
764
|
-
}
|
|
765
|
-
]
|
|
766
|
-
}
|
|
767
|
-
]
|
|
783
|
+
type: "column",
|
|
784
|
+
attrs: { name: "group-1", label: "", className: "col-6" },
|
|
785
|
+
children: formViewLayout
|
|
768
786
|
}
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
787
|
+
]
|
|
788
|
+
}
|
|
789
|
+
]
|
|
790
|
+
}
|
|
791
|
+
]
|
|
792
|
+
}, null, 3)
|
|
793
|
+
}
|
|
772
794
|
];
|
|
773
795
|
|
|
774
796
|
for (const view of modelViews) {
|
|
775
|
-
|
|
797
|
+
const existingView = await viewRepo.findOne({ where: { name: view.name } });
|
|
776
798
|
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
799
|
+
if (!existingView) {
|
|
800
|
+
const createdView = viewRepo.create(view);
|
|
801
|
+
await viewRepo.save(createdView);
|
|
802
|
+
}
|
|
781
803
|
}
|
|
782
804
|
|
|
783
805
|
let view = await viewRepo.findOne({ where: { name: `${model.singularName}-list-view` } });
|
|
784
806
|
|
|
785
807
|
const actionData = {
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
808
|
+
displayName: `${model.displayName} List View`,
|
|
809
|
+
name: `${model.singularName}-list-view`,
|
|
810
|
+
type: "solid",
|
|
811
|
+
domain: "" as any,
|
|
812
|
+
context: "" as any,
|
|
813
|
+
customComponent: `/admin/address-master/${model.singularName}/all`,
|
|
814
|
+
customIsModal: true,
|
|
815
|
+
serverEndpoint: "",
|
|
816
|
+
view: view,
|
|
817
|
+
module: resolvedModule,
|
|
818
|
+
model: model
|
|
797
819
|
};
|
|
798
820
|
|
|
799
821
|
let existingAction = await actionRepo.findOne({ where: { name: actionData.name } });
|
|
@@ -806,13 +828,13 @@ export class ModelMetadataService {
|
|
|
806
828
|
const adminRole = await this.roleService.findRoleByName('Admin');
|
|
807
829
|
|
|
808
830
|
const menuData = {
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
831
|
+
displayName: `${model.displayName}`,
|
|
832
|
+
name: `${model.singularName}-menu-item`,
|
|
833
|
+
sequenceNumber: 1,
|
|
834
|
+
action: existingAction,
|
|
835
|
+
module: resolvedModule,
|
|
836
|
+
roles: [adminRole],
|
|
837
|
+
parentMenuItemUserKey: ""
|
|
816
838
|
};
|
|
817
839
|
|
|
818
840
|
let existingMenu = await menuRepo.findOne({ where: { name: menuData.name } });
|
|
@@ -905,11 +927,43 @@ export class ModelMetadataService {
|
|
|
905
927
|
return output;
|
|
906
928
|
}
|
|
907
929
|
|
|
930
|
+
async updateUserKey(data: any) {
|
|
931
|
+
const { modelName, fieldName } = data;
|
|
932
|
+
|
|
933
|
+
const model = await this.modelMetadataRepo.findOne({
|
|
934
|
+
where: { singularName: modelName },
|
|
935
|
+
relations: ['fields', 'userKeyField'],
|
|
936
|
+
});
|
|
937
|
+
|
|
938
|
+
if (!model) {
|
|
939
|
+
throw new Error(`Model with name ${modelName} not found`);
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
if (model.userKeyField) {
|
|
943
|
+
throw new Error(`User key is already set to ${model.userKeyField.name}. No changes were made.`);
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
const fieldToUpdate = model.fields.find(field => field.name === fieldName);
|
|
947
|
+
if (!fieldToUpdate) {
|
|
948
|
+
throw new Error(`Field with name ${fieldName} not found in model ${modelName}`);
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
fieldToUpdate.isUserKey = true;
|
|
952
|
+
|
|
953
|
+
model.userKeyField = fieldToUpdate;
|
|
954
|
+
|
|
955
|
+
await this.modelMetadataRepo.save(model);
|
|
956
|
+
|
|
957
|
+
return {
|
|
958
|
+
message: `User key has been successfully updated to ${fieldName}.`,
|
|
959
|
+
success: true
|
|
960
|
+
};
|
|
961
|
+
}
|
|
908
962
|
|
|
909
963
|
private async getRelationInverseFields(modelId: number, repo: Repository<FieldMetadata>): Promise<FieldMetadata[]> {
|
|
910
964
|
return await repo.find({
|
|
911
965
|
where: {
|
|
912
|
-
model
|
|
966
|
+
model: {
|
|
913
967
|
id: modelId
|
|
914
968
|
},
|
|
915
969
|
type: SolidFieldType.relation,
|
|
@@ -112,7 +112,8 @@ export class ModuleMetadataService {
|
|
|
112
112
|
return module
|
|
113
113
|
});
|
|
114
114
|
} catch (error) {
|
|
115
|
-
console.error('Transaction failed:', error);
|
|
115
|
+
// console.error('Transaction failed:', error);
|
|
116
|
+
this.logger.error('Transaction failed:', error);
|
|
116
117
|
throw error;
|
|
117
118
|
}
|
|
118
119
|
}
|
|
@@ -165,7 +166,8 @@ export class ModuleMetadataService {
|
|
|
165
166
|
await fs.writeFile(filePath, metadataJson);
|
|
166
167
|
|
|
167
168
|
} catch (error) {
|
|
168
|
-
console.error('File creation failed:', error);
|
|
169
|
+
// console.error('File creation failed:', error);
|
|
170
|
+
this.logger.error('File creation failed:', error);
|
|
169
171
|
throw new Error('File creation failed, rolling back transaction'); // Trigger rollback
|
|
170
172
|
}
|
|
171
173
|
}
|
|
@@ -179,7 +181,8 @@ export class ModuleMetadataService {
|
|
|
179
181
|
return module
|
|
180
182
|
});
|
|
181
183
|
} catch (error) {
|
|
182
|
-
console.error('Transaction failed:', error);
|
|
184
|
+
// console.error('Transaction failed:', error);
|
|
185
|
+
this.logger.error('Transaction failed:', error);
|
|
183
186
|
throw error;
|
|
184
187
|
}
|
|
185
188
|
}
|
|
@@ -251,7 +254,8 @@ export class ModuleMetadataService {
|
|
|
251
254
|
await fs.writeFile(filePath, updatedContent);
|
|
252
255
|
|
|
253
256
|
} catch (error) {
|
|
254
|
-
console.error('File creation failed:', error);
|
|
257
|
+
// console.error('File creation failed:', error);
|
|
258
|
+
this.logger.error('File creation failed:', error);
|
|
255
259
|
throw new Error('File creation failed, rolling back transaction'); // Trigger rollback
|
|
256
260
|
}
|
|
257
261
|
}
|
|
@@ -128,21 +128,23 @@ export class SolidIntrospectService implements OnApplicationBootstrap {
|
|
|
128
128
|
return !!isSolidDatabaseModule;
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
|
|
132
|
+
private isModule(provider: InstanceWrapper): boolean {
|
|
133
133
|
const metatype = provider.metatype;
|
|
134
|
-
|
|
134
|
+
// Check if it's a Static Module (Class-Based)
|
|
135
|
+
if (metatype && typeof metatype === 'function' && Reflect.getMetadata('imports', metatype)) {
|
|
136
|
+
return true;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// Ensure provider.instance is an object before checking for 'module'
|
|
140
|
+
if (provider.instance && typeof provider.instance === 'object') {
|
|
141
|
+
// Check if it's a Dynamic Module (Object-Based)
|
|
142
|
+
if ('module' in provider.instance && typeof provider.instance.module === 'function') {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
return false;
|
|
135
148
|
}
|
|
136
|
-
|
|
137
|
-
// private isSeeder(provider: InstanceWrapper) {
|
|
138
|
-
// const { instance } = provider;
|
|
139
|
-
// if (!instance) return false;
|
|
140
|
-
|
|
141
|
-
// const seederMetadata = this.reflector.get(
|
|
142
|
-
// 'SOLID_SERVICE',
|
|
143
|
-
// instance.constructor,
|
|
144
|
-
// );
|
|
145
|
-
// if (!seederMetadata || !seederMetadata.seeder) return false;
|
|
146
|
-
// return true;
|
|
147
|
-
// }
|
|
149
|
+
|
|
148
150
|
}
|
|
@@ -137,6 +137,19 @@ export class ViewMetadataService extends CRUDService<ViewMetadata> {
|
|
|
137
137
|
return this.repo.save(viewData);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
|
+
async createIfNotPresent(updateSolidViewDto: UpdateViewMetadataDto) {
|
|
141
|
+
// First check if module already exists using name
|
|
142
|
+
const existingSolidView = await this.findOneByUserKey(updateSolidViewDto.name);
|
|
143
|
+
|
|
144
|
+
// if found
|
|
145
|
+
if (existingSolidView) {
|
|
146
|
+
}
|
|
147
|
+
// if not found - create new
|
|
148
|
+
else {
|
|
149
|
+
const viewData = this.repo.create(updateSolidViewDto);
|
|
150
|
+
return this.repo.save(viewData);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
140
153
|
|
|
141
154
|
// END: Custom Service Methods
|
|
142
155
|
|
|
@@ -23,7 +23,8 @@ export class SoftDeleteAwareEventSubscriber implements EntitySubscriberInterface
|
|
|
23
23
|
} else {
|
|
24
24
|
entity.deletedTracker = `${entity.deletedAt}`; // Set trackerDate to the deleted Date
|
|
25
25
|
}
|
|
26
|
-
console.log('TrackerDate updated:', entity.trackerDate);
|
|
26
|
+
// console.log('TrackerDate updated:', entity.trackerDate);
|
|
27
|
+
this.logger.debug(`TrackerDate updated: ${entity.trackerDate}`);
|
|
27
28
|
|
|
28
29
|
}
|
|
29
30
|
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { CommandRunner } from 'nest-commander';
|
|
2
|
-
interface BasicCommandOptions {
|
|
3
|
-
string?: string;
|
|
4
|
-
boolean?: boolean;
|
|
5
|
-
number?: number;
|
|
6
|
-
}
|
|
7
|
-
export declare class BasicCommand extends CommandRunner {
|
|
8
|
-
constructor();
|
|
9
|
-
run(passedParam: string[], options?: BasicCommandOptions): Promise<void>;
|
|
10
|
-
parseNumber(val: string): number;
|
|
11
|
-
parseString(val: string): string;
|
|
12
|
-
parseBoolean(val: string): boolean;
|
|
13
|
-
runWithString(param: string[], option: string): void;
|
|
14
|
-
runWithNumber(param: string[], option: number): void;
|
|
15
|
-
runWithBoolean(param: string[], option: boolean): void;
|
|
16
|
-
runWithNone(param: string[]): void;
|
|
17
|
-
}
|
|
18
|
-
export {};
|
|
19
|
-
//# sourceMappingURL=basic.command.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"basic.command.d.ts","sourceRoot":"","sources":["../../src/commands/basic.command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAEhE,UAAU,mBAAmB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBACa,YAAa,SAAQ,aAAa;;IAKrC,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9E,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKhC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAKhC,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIlC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI;IAItD,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;CAGrC"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.BasicCommand = void 0;
|
|
13
|
-
const nest_commander_1 = require("nest-commander");
|
|
14
|
-
let BasicCommand = class BasicCommand extends nest_commander_1.CommandRunner {
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
}
|
|
18
|
-
async run(passedParam, options) {
|
|
19
|
-
console.log(`passed params are: `, passedParam);
|
|
20
|
-
console.log(`options are: `, options);
|
|
21
|
-
if (options?.boolean !== undefined && options?.boolean !== null) {
|
|
22
|
-
this.runWithBoolean(passedParam, options.boolean);
|
|
23
|
-
}
|
|
24
|
-
else if (options?.number) {
|
|
25
|
-
this.runWithNumber(passedParam, options.number);
|
|
26
|
-
}
|
|
27
|
-
else if (options?.string) {
|
|
28
|
-
this.runWithString(passedParam, options.string);
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.runWithNone(passedParam);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
parseNumber(val) {
|
|
35
|
-
return Number(val);
|
|
36
|
-
}
|
|
37
|
-
parseString(val) {
|
|
38
|
-
return val;
|
|
39
|
-
}
|
|
40
|
-
parseBoolean(val) {
|
|
41
|
-
return JSON.parse(val);
|
|
42
|
-
}
|
|
43
|
-
runWithString(param, option) {
|
|
44
|
-
console.log({ param, string: option });
|
|
45
|
-
}
|
|
46
|
-
runWithNumber(param, option) {
|
|
47
|
-
console.log({ param, number: option });
|
|
48
|
-
}
|
|
49
|
-
runWithBoolean(param, option) {
|
|
50
|
-
console.log({ param, boolean: option });
|
|
51
|
-
}
|
|
52
|
-
runWithNone(param) {
|
|
53
|
-
console.log({ param });
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
exports.BasicCommand = BasicCommand;
|
|
57
|
-
__decorate([
|
|
58
|
-
(0, nest_commander_1.Option)({ flags: '-n, --number [number]', description: 'A basic number parser' }),
|
|
59
|
-
__metadata("design:type", Function),
|
|
60
|
-
__metadata("design:paramtypes", [String]),
|
|
61
|
-
__metadata("design:returntype", Number)
|
|
62
|
-
], BasicCommand.prototype, "parseNumber", null);
|
|
63
|
-
__decorate([
|
|
64
|
-
(0, nest_commander_1.Option)({ flags: '-s, --string [string]', description: 'A string return' }),
|
|
65
|
-
__metadata("design:type", Function),
|
|
66
|
-
__metadata("design:paramtypes", [String]),
|
|
67
|
-
__metadata("design:returntype", String)
|
|
68
|
-
], BasicCommand.prototype, "parseString", null);
|
|
69
|
-
__decorate([
|
|
70
|
-
(0, nest_commander_1.Option)({ flags: '-b, --boolean [boolean]', description: 'A boolean parser' }),
|
|
71
|
-
__metadata("design:type", Function),
|
|
72
|
-
__metadata("design:paramtypes", [String]),
|
|
73
|
-
__metadata("design:returntype", Boolean)
|
|
74
|
-
], BasicCommand.prototype, "parseBoolean", null);
|
|
75
|
-
exports.BasicCommand = BasicCommand = __decorate([
|
|
76
|
-
(0, nest_commander_1.Command)({ name: 'basic', description: 'A parameter parse' }),
|
|
77
|
-
__metadata("design:paramtypes", [])
|
|
78
|
-
], BasicCommand);
|
|
79
|
-
//# sourceMappingURL=basic.command.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"basic.command.js","sourceRoot":"","sources":["../../src/commands/basic.command.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,mDAAgE;AASzD,IAAM,YAAY,GAAlB,MAAM,YAAa,SAAQ,8BAAa;IAC3C;QACI,KAAK,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,WAAqB,EAAE,OAA6B;QAC1D,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAEtC,IAAI,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,OAAO,EAAE,OAAO,KAAK,IAAI,EAAE,CAAC;YAC9D,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACtD,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClC,CAAC;IACL,CAAC;IAGD,WAAW,CAAC,GAAW;QACnB,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;IACvB,CAAC;IAGD,WAAW,CAAC,GAAW;QACnB,OAAO,GAAG,CAAC;IACf,CAAC;IAGD,YAAY,CAAC,GAAW;QACpB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,KAAe,EAAE,MAAc;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,aAAa,CAAC,KAAe,EAAE,MAAc;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,cAAc,CAAC,KAAe,EAAE,MAAe;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,WAAW,CAAC,KAAe;QACvB,OAAO,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3B,CAAC;CACJ,CAAA;AAlDY,oCAAY;AAqBrB;IADC,IAAA,uBAAM,EAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;;;;+CAGhF;AAGD;IADC,IAAA,uBAAM,EAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;;;;+CAG1E;AAGD;IADC,IAAA,uBAAM,EAAC,EAAE,KAAK,EAAE,yBAAyB,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;;;;gDAG7E;uBAjCQ,YAAY;IADxB,IAAA,wBAAO,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,CAAC;;GAChD,YAAY,CAkDxB"}
|