@solidxai/core 0.1.11-beta.2 → 0.1.11-beta.5
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/commands/migrate-removed-fields.command.d.ts +19 -0
- package/dist/commands/migrate-removed-fields.command.d.ts.map +1 -0
- package/dist/commands/migrate-removed-fields.command.js +77 -0
- package/dist/commands/migrate-removed-fields.command.js.map +1 -0
- package/dist/controllers/datasource-introspection.controller.d.ts +38 -1
- package/dist/controllers/datasource-introspection.controller.d.ts.map +1 -1
- package/dist/controllers/datasource-introspection.controller.js +38 -0
- package/dist/controllers/datasource-introspection.controller.js.map +1 -1
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts +5 -0
- package/dist/dtos/datasource-introspection-mapping.dto.d.ts.map +1 -1
- package/dist/dtos/datasource-introspection-mapping.dto.js +24 -2
- package/dist/dtos/datasource-introspection-mapping.dto.js.map +1 -1
- package/dist/entities/{legacy-common-with-id.entity.d.ts → legacy-common-with-generated-id.entity.d.ts} +2 -2
- package/dist/entities/legacy-common-with-generated-id.entity.d.ts.map +1 -0
- package/dist/entities/{legacy-common-with-id.entity.js → legacy-common-with-generated-id.entity.js} +4 -4
- package/dist/entities/legacy-common-with-generated-id.entity.js.map +1 -0
- package/dist/entities/{legacy-common.entity.d.ts → legacy-common.entity-with-existing-id.entity.d.ts} +1 -1
- package/dist/entities/legacy-common.entity-with-existing-id.entity.d.ts.map +1 -0
- package/dist/entities/{legacy-common.entity.js → legacy-common.entity-with-existing-id.entity.js} +1 -1
- package/dist/entities/legacy-common.entity-with-existing-id.entity.js.map +1 -0
- package/dist/helpers/command.service.d.ts +2 -0
- package/dist/helpers/command.service.d.ts.map +1 -1
- package/dist/helpers/command.service.js +6 -2
- package/dist/helpers/command.service.js.map +1 -1
- package/dist/helpers/model-metadata-helper.service.js +3 -3
- package/dist/helpers/model-metadata-helper.service.js.map +1 -1
- package/dist/helpers/nodemon-heartbeat.d.ts +5 -0
- package/dist/helpers/nodemon-heartbeat.d.ts.map +1 -0
- package/dist/helpers/nodemon-heartbeat.js +67 -0
- package/dist/helpers/nodemon-heartbeat.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts +1 -0
- package/dist/interfaces/datasource-introspection-provider.interface.d.ts.map +1 -1
- package/dist/interfaces/datasource-introspection-provider.interface.js.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts +7 -1
- package/dist/seeders/module-metadata-seeder.service.d.ts.map +1 -1
- package/dist/seeders/module-metadata-seeder.service.js +101 -1
- package/dist/seeders/module-metadata-seeder.service.js.map +1 -1
- package/dist/seeders/seed-data/solid-core-metadata.json +121 -34
- package/dist/services/api-key.service.d.ts.map +1 -1
- package/dist/services/api-key.service.js.map +1 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts +4 -0
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts.map +1 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js +18 -1
- package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js.map +1 -1
- package/dist/services/crud.service.d.ts +1 -0
- package/dist/services/crud.service.d.ts.map +1 -1
- package/dist/services/crud.service.js +27 -0
- package/dist/services/crud.service.js.map +1 -1
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js +12 -0
- package/dist/services/datasource-introspection/mssql-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js +2 -0
- package/dist/services/datasource-introspection/mysql-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js +28 -15
- package/dist/services/datasource-introspection/postgres-datasource-introspection-provider.service.js.map +1 -1
- package/dist/services/datasource-introspection.service.d.ts +53 -2
- package/dist/services/datasource-introspection.service.d.ts.map +1 -1
- package/dist/services/datasource-introspection.service.js +559 -174
- package/dist/services/datasource-introspection.service.js.map +1 -1
- package/dist/services/import-transaction.service.d.ts.map +1 -1
- package/dist/services/import-transaction.service.js +3 -0
- package/dist/services/import-transaction.service.js.map +1 -1
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js +10 -10
- package/dist/services/mediaStorageProviders/file-s3-storage-provider.js.map +1 -1
- package/dist/services/model-metadata.service.d.ts +1 -0
- package/dist/services/model-metadata.service.d.ts.map +1 -1
- package/dist/services/model-metadata.service.js +28 -0
- 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 +27 -0
- package/dist/services/module-metadata.service.js.map +1 -1
- package/dist/services/removed-field-migration.service.d.ts +30 -0
- package/dist/services/removed-field-migration.service.d.ts.map +1 -0
- package/dist/services/removed-field-migration.service.js +319 -0
- package/dist/services/removed-field-migration.service.js.map +1 -0
- package/dist/solid-core.module.d.ts.map +1 -1
- package/dist/solid-core.module.js +4 -0
- package/dist/solid-core.module.js.map +1 -1
- package/dist/subscribers/audit.subscriber.d.ts +4 -1
- package/dist/subscribers/audit.subscriber.d.ts.map +1 -1
- package/dist/subscribers/audit.subscriber.js +54 -6
- package/dist/subscribers/audit.subscriber.js.map +1 -1
- package/dist-tests/api/authenticate.spec.js +119 -0
- package/dist-tests/api/authenticate.spec.js.map +1 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js +97 -0
- package/dist-tests/api/crud-service.findOne.cityMaster.spec.js.map +1 -0
- package/dist-tests/api/ping.spec.js +21 -0
- package/dist-tests/api/ping.spec.js.map +1 -0
- package/dist-tests/helpers/auth.js +41 -0
- package/dist-tests/helpers/auth.js.map +1 -0
- package/dist-tests/helpers/env.js +11 -0
- package/dist-tests/helpers/env.js.map +1 -0
- package/docs/agent-hub-grooming.md +301 -0
- package/docs/dashboards/AGENTIC_DASHBOARD_IMPLEMENTATION_PLAN.md +438 -0
- package/docs/dashboards/dashboard-curl-smoke-tests.txt +146 -0
- package/docs/dashboards/delete-legacy-dashboard-metadata.sql +172 -0
- package/docs/datasource-introspection-ddl-analysis.md +326 -0
- package/docs/datasource-introspection-implementation-plan.md +306 -0
- package/docs/grouping-enhancements.md +89 -0
- package/docs/java-spring/README.md +3 -0
- package/docs/java-spring/solid-core-module-deep-dive-report.md +1317 -0
- package/docs/module-package-import-handoff.md +691 -0
- package/docs/seed-changes.md +65 -0
- package/docs/test-data-workflow.md +200 -0
- package/docs/type-declaration-import-issue.md +24 -0
- package/package.json +1 -1
- package/src/commands/migrate-removed-fields.command.ts +81 -0
- package/src/controllers/datasource-introspection.controller.ts +27 -1
- package/src/dtos/datasource-introspection-mapping.dto.ts +15 -0
- package/src/entities/{legacy-common-with-id.entity.ts → legacy-common-with-generated-id.entity.ts} +1 -1
- package/src/helpers/command.service.ts +10 -2
- package/src/helpers/model-metadata-helper.service.ts +1 -1
- package/src/helpers/nodemon-heartbeat.ts +59 -0
- package/src/index.ts +3 -2
- package/src/interfaces/datasource-introspection-provider.interface.ts +1 -0
- package/src/seeders/module-metadata-seeder.service.ts +118 -0
- package/src/seeders/seed-data/solid-core-metadata.json +121 -34
- package/src/services/api-key.service.ts +36 -36
- package/src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts +15 -1
- package/src/services/crud.service.ts +36 -11
- package/src/services/datasource-introspection/mssql-datasource-introspection-provider.service.ts +12 -0
- package/src/services/datasource-introspection/mysql-datasource-introspection-provider.service.ts +2 -0
- package/src/services/datasource-introspection/postgres-datasource-introspection-provider.service.ts +28 -15
- package/src/services/datasource-introspection.service.ts +653 -150
- package/src/services/import-transaction.service.ts +5 -0
- package/src/services/mediaStorageProviders/file-s3-storage-provider.ts +2 -2
- package/src/services/model-metadata.service.ts +45 -1
- package/src/services/module-metadata.service.ts +35 -0
- package/src/services/removed-field-migration.service.ts +334 -0
- package/src/solid-core.module.ts +4 -0
- package/src/subscribers/audit.subscriber.ts +70 -5
- package/.claude/settings.local.json +0 -15
- package/CLAUDE.md +0 -26
- package/dist/entities/legacy-common-with-id.entity.d.ts.map +0 -1
- package/dist/entities/legacy-common-with-id.entity.js.map +0 -1
- package/dist/entities/legacy-common.entity.d.ts.map +0 -1
- package/dist/entities/legacy-common.entity.js.map +0 -1
- package/src/services/1.js +0 -6
- /package/src/entities/{legacy-common.entity.ts → legacy-common.entity-with-existing-id.entity.ts} +0 -0
|
@@ -1077,15 +1077,24 @@
|
|
|
1077
1077
|
{
|
|
1078
1078
|
"name": "type",
|
|
1079
1079
|
"displayName": "Type",
|
|
1080
|
-
"type": "
|
|
1080
|
+
"type": "selectionStatic",
|
|
1081
1081
|
"ormType": "varchar",
|
|
1082
|
+
"length": 256,
|
|
1082
1083
|
"required": true,
|
|
1083
1084
|
"unique": false,
|
|
1084
1085
|
"index": true,
|
|
1085
1086
|
"private": false,
|
|
1086
1087
|
"encrypt": false,
|
|
1087
1088
|
"columnName": "type",
|
|
1088
|
-
"isSystem": true
|
|
1089
|
+
"isSystem": true,
|
|
1090
|
+
"selectionValueType": "string",
|
|
1091
|
+
"selectionStaticValues": [
|
|
1092
|
+
"list:List",
|
|
1093
|
+
"form:Form",
|
|
1094
|
+
"tree:Tree",
|
|
1095
|
+
"kanban:Kanban",
|
|
1096
|
+
"card:Card"
|
|
1097
|
+
]
|
|
1089
1098
|
},
|
|
1090
1099
|
{
|
|
1091
1100
|
"name": "context",
|
|
@@ -1584,7 +1593,7 @@
|
|
|
1584
1593
|
"name": "roles",
|
|
1585
1594
|
"displayName": "Roles",
|
|
1586
1595
|
"type": "relation",
|
|
1587
|
-
"required":
|
|
1596
|
+
"required": false,
|
|
1588
1597
|
"unique": false,
|
|
1589
1598
|
"index": true,
|
|
1590
1599
|
"private": false,
|
|
@@ -8737,12 +8746,15 @@
|
|
|
8737
8746
|
48
|
|
8738
8747
|
],
|
|
8739
8748
|
"enableGlobalSearch": true,
|
|
8740
|
-
"create":
|
|
8741
|
-
"edit":
|
|
8749
|
+
"create": false,
|
|
8750
|
+
"edit": false,
|
|
8742
8751
|
"delete": true,
|
|
8752
|
+
"import": false,
|
|
8753
|
+
"export": false,
|
|
8743
8754
|
"allowedViews": [
|
|
8744
8755
|
"list",
|
|
8745
|
-
"card"
|
|
8756
|
+
"card",
|
|
8757
|
+
"tree"
|
|
8746
8758
|
]
|
|
8747
8759
|
},
|
|
8748
8760
|
"children": [
|
|
@@ -9003,7 +9015,13 @@
|
|
|
9003
9015
|
"enableGlobalSearch": true,
|
|
9004
9016
|
"create": false,
|
|
9005
9017
|
"edit": false,
|
|
9006
|
-
"delete": false
|
|
9018
|
+
"delete": false,
|
|
9019
|
+
"import": false,
|
|
9020
|
+
"export": false,
|
|
9021
|
+
"allowedViews": [
|
|
9022
|
+
"list",
|
|
9023
|
+
"tree"
|
|
9024
|
+
]
|
|
9007
9025
|
},
|
|
9008
9026
|
"children": [
|
|
9009
9027
|
{
|
|
@@ -10095,15 +10113,11 @@
|
|
|
10095
10113
|
"swimlanesCount": 5,
|
|
10096
10114
|
"recordsInSwimlane": 10,
|
|
10097
10115
|
"enableGlobalSearch": true,
|
|
10098
|
-
"create":
|
|
10099
|
-
"edit":
|
|
10100
|
-
"delete":
|
|
10116
|
+
"create": false,
|
|
10117
|
+
"edit": false,
|
|
10118
|
+
"delete": false,
|
|
10101
10119
|
"groupBy": "stage",
|
|
10102
|
-
"draggable": false
|
|
10103
|
-
"allowedViews": [
|
|
10104
|
-
"list",
|
|
10105
|
-
"kanban"
|
|
10106
|
-
]
|
|
10120
|
+
"draggable": false
|
|
10107
10121
|
},
|
|
10108
10122
|
"children": [
|
|
10109
10123
|
{
|
|
@@ -11929,7 +11943,11 @@
|
|
|
11929
11943
|
"edit": false,
|
|
11930
11944
|
"delete": false,
|
|
11931
11945
|
"import": false,
|
|
11932
|
-
"export": false
|
|
11946
|
+
"export": false,
|
|
11947
|
+
"allowedViews": [
|
|
11948
|
+
"list",
|
|
11949
|
+
"tree"
|
|
11950
|
+
]
|
|
11933
11951
|
},
|
|
11934
11952
|
"children": [
|
|
11935
11953
|
{
|
|
@@ -13424,7 +13442,13 @@
|
|
|
13424
13442
|
"enableGlobalSearch": true,
|
|
13425
13443
|
"create": false,
|
|
13426
13444
|
"edit": true,
|
|
13427
|
-
"delete": false
|
|
13445
|
+
"delete": false,
|
|
13446
|
+
"import": false,
|
|
13447
|
+
"export": false,
|
|
13448
|
+
"allowedViews": [
|
|
13449
|
+
"list",
|
|
13450
|
+
"tree"
|
|
13451
|
+
]
|
|
13428
13452
|
},
|
|
13429
13453
|
"children": [
|
|
13430
13454
|
{
|
|
@@ -13499,7 +13523,13 @@
|
|
|
13499
13523
|
"enableGlobalSearch": true,
|
|
13500
13524
|
"create": false,
|
|
13501
13525
|
"edit": false,
|
|
13502
|
-
"delete": false
|
|
13526
|
+
"delete": false,
|
|
13527
|
+
"import": false,
|
|
13528
|
+
"export": false,
|
|
13529
|
+
"allowedViews": [
|
|
13530
|
+
"list",
|
|
13531
|
+
"tree"
|
|
13532
|
+
]
|
|
13503
13533
|
},
|
|
13504
13534
|
"children": [
|
|
13505
13535
|
{
|
|
@@ -13583,7 +13613,13 @@
|
|
|
13583
13613
|
"enableGlobalSearch": true,
|
|
13584
13614
|
"create": false,
|
|
13585
13615
|
"edit": false,
|
|
13586
|
-
"delete": false
|
|
13616
|
+
"delete": false,
|
|
13617
|
+
"import": false,
|
|
13618
|
+
"export": false,
|
|
13619
|
+
"allowedViews": [
|
|
13620
|
+
"list",
|
|
13621
|
+
"tree"
|
|
13622
|
+
]
|
|
13587
13623
|
},
|
|
13588
13624
|
"children": [
|
|
13589
13625
|
{
|
|
@@ -13645,7 +13681,13 @@
|
|
|
13645
13681
|
"enableGlobalSearch": true,
|
|
13646
13682
|
"create": false,
|
|
13647
13683
|
"edit": false,
|
|
13648
|
-
"delete": false
|
|
13684
|
+
"delete": false,
|
|
13685
|
+
"import": false,
|
|
13686
|
+
"export": false,
|
|
13687
|
+
"allowedViews": [
|
|
13688
|
+
"list",
|
|
13689
|
+
"tree"
|
|
13690
|
+
]
|
|
13649
13691
|
},
|
|
13650
13692
|
"children": [
|
|
13651
13693
|
{
|
|
@@ -13714,7 +13756,13 @@
|
|
|
13714
13756
|
"enableGlobalSearch": true,
|
|
13715
13757
|
"create": false,
|
|
13716
13758
|
"edit": false,
|
|
13717
|
-
"delete":
|
|
13759
|
+
"delete": true,
|
|
13760
|
+
"import": false,
|
|
13761
|
+
"export": false,
|
|
13762
|
+
"allowedViews": [
|
|
13763
|
+
"list",
|
|
13764
|
+
"tree"
|
|
13765
|
+
]
|
|
13718
13766
|
},
|
|
13719
13767
|
"children": [
|
|
13720
13768
|
{
|
|
@@ -13784,7 +13832,14 @@
|
|
|
13784
13832
|
"enableGlobalSearch": true,
|
|
13785
13833
|
"create": false,
|
|
13786
13834
|
"edit": false,
|
|
13787
|
-
"delete":
|
|
13835
|
+
"delete": true,
|
|
13836
|
+
"import": false,
|
|
13837
|
+
"export": false,
|
|
13838
|
+
"allowedViews": [
|
|
13839
|
+
"list",
|
|
13840
|
+
"card",
|
|
13841
|
+
"tree"
|
|
13842
|
+
]
|
|
13788
13843
|
},
|
|
13789
13844
|
"children": [
|
|
13790
13845
|
{
|
|
@@ -13850,11 +13905,14 @@
|
|
|
13850
13905
|
50
|
|
13851
13906
|
],
|
|
13852
13907
|
"enableGlobalSearch": true,
|
|
13853
|
-
"create":
|
|
13854
|
-
"edit":
|
|
13855
|
-
"delete":
|
|
13856
|
-
"import":
|
|
13857
|
-
"export":
|
|
13908
|
+
"create": true,
|
|
13909
|
+
"edit": true,
|
|
13910
|
+
"delete": true,
|
|
13911
|
+
"import": true,
|
|
13912
|
+
"export": true,
|
|
13913
|
+
"allowedViews": [
|
|
13914
|
+
"list"
|
|
13915
|
+
]
|
|
13858
13916
|
},
|
|
13859
13917
|
"children": [
|
|
13860
13918
|
{
|
|
@@ -13889,7 +13947,11 @@
|
|
|
13889
13947
|
"edit": false,
|
|
13890
13948
|
"delete": false,
|
|
13891
13949
|
"import": false,
|
|
13892
|
-
"export": false
|
|
13950
|
+
"export": false,
|
|
13951
|
+
"allowedViews": [
|
|
13952
|
+
"list",
|
|
13953
|
+
"tree"
|
|
13954
|
+
]
|
|
13893
13955
|
},
|
|
13894
13956
|
"children": [
|
|
13895
13957
|
{
|
|
@@ -13951,7 +14013,11 @@
|
|
|
13951
14013
|
"edit": false,
|
|
13952
14014
|
"delete": false,
|
|
13953
14015
|
"import": false,
|
|
13954
|
-
"export": false
|
|
14016
|
+
"export": false,
|
|
14017
|
+
"allowedViews": [
|
|
14018
|
+
"list",
|
|
14019
|
+
"tree"
|
|
14020
|
+
]
|
|
13955
14021
|
},
|
|
13956
14022
|
"children": [
|
|
13957
14023
|
{
|
|
@@ -14020,7 +14086,11 @@
|
|
|
14020
14086
|
"edit": true,
|
|
14021
14087
|
"delete": true,
|
|
14022
14088
|
"import": true,
|
|
14023
|
-
"export": true
|
|
14089
|
+
"export": true,
|
|
14090
|
+
"allowedViews": [
|
|
14091
|
+
"list",
|
|
14092
|
+
"tree"
|
|
14093
|
+
]
|
|
14024
14094
|
},
|
|
14025
14095
|
"children": [
|
|
14026
14096
|
{
|
|
@@ -14080,7 +14150,11 @@
|
|
|
14080
14150
|
"edit": false,
|
|
14081
14151
|
"delete": false,
|
|
14082
14152
|
"import": false,
|
|
14083
|
-
"export": false
|
|
14153
|
+
"export": false,
|
|
14154
|
+
"allowedViews": [
|
|
14155
|
+
"list",
|
|
14156
|
+
"tree"
|
|
14157
|
+
]
|
|
14084
14158
|
},
|
|
14085
14159
|
"children": [
|
|
14086
14160
|
{
|
|
@@ -14140,7 +14214,11 @@
|
|
|
14140
14214
|
"edit": false,
|
|
14141
14215
|
"delete": false,
|
|
14142
14216
|
"import": false,
|
|
14143
|
-
"export": false
|
|
14217
|
+
"export": false,
|
|
14218
|
+
"allowedViews": [
|
|
14219
|
+
"list",
|
|
14220
|
+
"tree"
|
|
14221
|
+
]
|
|
14144
14222
|
},
|
|
14145
14223
|
"children": [
|
|
14146
14224
|
{
|
|
@@ -14210,7 +14288,11 @@
|
|
|
14210
14288
|
"edit": false,
|
|
14211
14289
|
"delete": false,
|
|
14212
14290
|
"import": false,
|
|
14213
|
-
"export": false
|
|
14291
|
+
"export": false,
|
|
14292
|
+
"allowedViews": [
|
|
14293
|
+
"list",
|
|
14294
|
+
"tree"
|
|
14295
|
+
]
|
|
14214
14296
|
},
|
|
14215
14297
|
"children": [
|
|
14216
14298
|
{
|
|
@@ -14279,7 +14361,12 @@
|
|
|
14279
14361
|
"enableGlobalSearch": true,
|
|
14280
14362
|
"create": true,
|
|
14281
14363
|
"edit": true,
|
|
14282
|
-
"delete": true
|
|
14364
|
+
"delete": true,
|
|
14365
|
+
"import": true,
|
|
14366
|
+
"export": true,
|
|
14367
|
+
"allowedViews": [
|
|
14368
|
+
"list"
|
|
14369
|
+
]
|
|
14283
14370
|
},
|
|
14284
14371
|
"children": [
|
|
14285
14372
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key.service.d.ts","sourceRoot":"","sources":["../../src/services/api-key.service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,qBACa,aAAa;IAIlB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;gBAGpC,gBAAgB,EAAE,oBAAoB,EACtC,yBAAyB,EAAE,yBAAyB,EACpD,qBAAqB,EAAE,qBAAqB,EAC5C,cAAc,EAAE,cAAc;IAG7C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"api-key.service.d.ts","sourceRoot":"","sources":["../../src/services/api-key.service.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,2CAA2C,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAEhE,qBACa,aAAa;IAIlB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,yBAAyB;IAC1C,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc;IANnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;gBAGpC,gBAAgB,EAAE,oBAAoB,EACtC,yBAAyB,EAAE,yBAAyB,EACpD,qBAAqB,EAAE,qBAAqB,EAC5C,cAAc,EAAE,cAAc;IAG7C,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IA+B/F,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkCjD,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB1E,QAAQ,CAAC,MAAM,EAAE,MAAM;;;;;;;;;;;;IAoC7B,OAAO,CAAC,IAAI;CAGf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-key.service.js","sourceRoot":"","sources":["../../src/services/api-key.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,2CAMwB;AACxB,mCAAiD;AACjD,gEAA8D;AAG9D,yEAA8D;AAC9D,yDAAgD;AAEhD,mFAA8E;AAC9E,+EAAqF;AACrF,qEAAiE;AACjE,mEAAgE;AAGzD,IAAM,aAAa,qBAAnB,MAAM,aAAa;IAGtB,YACqB,gBAAsC,EACtC,yBAAoD,EACpD,qBAA4C,EAC5C,cAA8B;QAH9B,qBAAgB,GAAhB,gBAAgB,CAAsB;QACtC,8BAAyB,GAAzB,yBAAyB,CAA2B;QACpD,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,mBAAc,GAAd,cAAc,CAAgB;QANlC,WAAM,GAAG,IAAI,eAAM,CAAC,eAAa,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"api-key.service.js","sourceRoot":"","sources":["../../src/services/api-key.service.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n ForbiddenException,\n Injectable,\n Logger,\n NotFoundException,\n UnauthorizedException,\n} from '@nestjs/common';\nimport { createHash, randomBytes } from 'crypto';\nimport { ERROR_MESSAGES } from 'src/constants/error-messages';\nimport { CreateApiKeyDto } from 'src/dtos/create-api-key.dto';\nimport { UpdateApiKeyDto } from 'src/dtos/update-api-key.dto';\nimport { UserApiKey } from 'src/entities/user-api-key.entity';\nimport { User } from 'src/entities/user.entity';\nimport { ActiveUserData } from 'src/interfaces/active-user-data.interface';\nimport { UserApiKeyRepository } from 'src/repository/user-api-key.repository';\nimport { PermissionMetadataService } from 'src/services/permission-metadata.service';\nimport { AuthenticationService } from './authentication.service';\nimport { UserRepository } from 'src/repository/user.repository';\n\n@Injectable()\nexport class ApiKeyService {\n private readonly logger = new Logger(ApiKeyService.name);\n\n constructor(\n private readonly apiKeyRepository: UserApiKeyRepository,\n private readonly permissionMetadataService: PermissionMetadataService,\n private readonly authenticationService: AuthenticationService,\n private readonly userRepository: UserRepository,\n ) { }\n\n async generate(userId: number, dto: CreateApiKeyDto): Promise<{ apiKey: string; record: UserApiKey }> {\n const user = await this.apiKeyRepository.manager.findOne(User, {\n where: { id: userId },\n select: ['id', 'isAllowedToGenerateApiKeys'],\n });\n\n if (!user?.isAllowedToGenerateApiKeys) {\n throw new ForbiddenException('You are not allowed to generate API keys');\n }\n\n const rawKey = 'sldx_' + randomBytes(32).toString('hex');\n const hashedKey = this.hash(rawKey);\n const maskedKey = 'sldx_****' + rawKey.slice(-4);\n\n const record = this.apiKeyRepository.create({\n name: dto.name,\n hashedKey,\n maskedKey,\n isActive: true,\n expiresAt: dto.expiresAt ? new Date(dto.expiresAt) : null,\n user,\n });\n\n await this.apiKeyRepository.save(record);\n\n // Strip hashedKey from the returned record — maskedKey is all the UI needs\n delete (record as any).hashedKey;\n\n return { apiKey: rawKey, record };\n }\n\n async validate(rawKey: string): Promise<ActiveUserData> {\n const hashedKey = this.hash(rawKey);\n\n // Bypass security rules for auth validation — must find the key regardless of caller context\n const keyRecord = await this.apiKeyRepository.findOne({\n where: { hashedKey, isActive: true },\n relations: ['user', 'user.roles'],\n });\n\n if (!keyRecord) {\n throw new UnauthorizedException();\n }\n\n if (keyRecord.expiresAt && keyRecord.expiresAt < new Date()) {\n throw new UnauthorizedException('API key expired');\n }\n\n // Fire-and-forget — does not need security rule context\n this.apiKeyRepository.update(keyRecord.id, { lastUsedAt: new Date() }).catch((err) => {\n this.logger.warn(`Failed to update lastUsedAt for key ${keyRecord.id}: ${err.message}`);\n });\n\n const roles = (keyRecord.user.roles ?? []).map((r) => r.name);\n const permissions = await this.permissionMetadataService.findAllUsingRoles(roles);\n\n return {\n sub: keyRecord.user.id,\n username: keyRecord.user.username,\n email: keyRecord.user.email,\n roles,\n permissions: permissions.map((p) => p.name),\n };\n }\n\n async updateKey(id: number, userId: number, dto: UpdateApiKeyDto): Promise<void> {\n const keyRecord = await this.apiKeyRepository.findOne({\n where: { id, user: { id: userId } },\n });\n\n if (!keyRecord) {\n throw new NotFoundException('API key not found');\n }\n\n await this.apiKeyRepository.manager\n .createQueryBuilder()\n .update(UserApiKey)\n .set({ isActive: dto.isActive })\n .where('id = :id', { id })\n .execute();\n }\n\n\n async apiKeyMe(apiKey: string) {\n\n const hasedKey = this.hash(apiKey);\n const apiKeyRecord = await this.apiKeyRepository.findOne({\n where: {\n hashedKey: hasedKey,\n },\n relations: {\n user: {\n roles: true\n }\n }\n });\n\n if (!apiKeyRecord) {\n throw new UnauthorizedException(ERROR_MESSAGES.INVALID_CREDENTIALS);\n }\n\n const user = apiKeyRecord.user;\n\n const tokens = await this.authenticationService.generateTokens(user);\n\n\n return {\n user: {\n email: user.email,\n mobile: user.mobile,\n username: user.username,\n forcePasswordChange: user.forcePasswordChange,\n id: user.id,\n roles: user.roles.map((role) => role.name)\n },\n ...tokens\n }\n }\n\n private hash(rawKey: string): string {\n return createHash('sha256').update(rawKey).digest('hex');\n }\n}\n"]}
|
package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
import { CommonEntity } from "../../../entities/common.entity";
|
|
2
2
|
import { ComputedFieldMetadata } from "../../../helpers/solid-registry";
|
|
3
3
|
import { IEntityPreComputeFieldProvider } from "../../../interfaces";
|
|
4
|
+
import { SettingService } from "../../../services/setting.service";
|
|
4
5
|
export interface ConcatComputedFieldContext {
|
|
5
6
|
separator: string;
|
|
6
7
|
fields: string[];
|
|
7
8
|
slugify?: boolean;
|
|
9
|
+
dateFormat?: string;
|
|
8
10
|
}
|
|
9
11
|
export declare class ConcatEntityComputedFieldProvider<T extends CommonEntity> implements IEntityPreComputeFieldProvider<T, ConcatComputedFieldContext> {
|
|
12
|
+
private readonly settingService;
|
|
13
|
+
constructor(settingService: SettingService);
|
|
10
14
|
name(): string;
|
|
11
15
|
help(): string;
|
|
12
16
|
preComputeValue(triggerEntity: T, computedFieldMetadata: ComputedFieldMetadata<ConcatComputedFieldContext>): Promise<void>;
|
package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat-entity-computed-field-provider.service.d.ts","sourceRoot":"","sources":["../../../../src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"concat-entity-computed-field-provider.service.d.ts","sourceRoot":"","sources":["../../../../src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAI9D,MAAM,WAAW,0BAA0B;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAEa,iCAAiC,CAAC,CAAC,SAAS,YAAY,CAAE,YAAW,8BAA8B,CAAC,CAAC,EAAE,0BAA0B,CAAC;IAGvI,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,cAAc;IAGnD,IAAI,IAAI,MAAM;IAId,IAAI,IAAI,MAAM;IAIR,eAAe,CAAC,aAAa,EAAE,CAAC,EAAE,qBAAqB,EAAE,qBAAqB,CAAC,0BAA0B,CAAC;CAwCnH"}
|
package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js
CHANGED
|
@@ -5,12 +5,23 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
5
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
6
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
8
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
15
|
exports.ConcatEntityComputedFieldProvider = void 0;
|
|
16
|
+
const dayjs_1 = __importDefault(require("dayjs"));
|
|
10
17
|
const common_1 = require("@nestjs/common");
|
|
11
18
|
const lodash_1 = require("lodash");
|
|
12
19
|
const computed_field_provider_decorator_1 = require("../../../decorators/computed-field-provider.decorator");
|
|
20
|
+
const setting_service_1 = require("../../setting.service");
|
|
13
21
|
let ConcatEntityComputedFieldProvider = class ConcatEntityComputedFieldProvider {
|
|
22
|
+
constructor(settingService) {
|
|
23
|
+
this.settingService = settingService;
|
|
24
|
+
}
|
|
14
25
|
name() {
|
|
15
26
|
return "ConcatEntityComputedFieldProvider";
|
|
16
27
|
}
|
|
@@ -22,11 +33,16 @@ let ConcatEntityComputedFieldProvider = class ConcatEntityComputedFieldProvider
|
|
|
22
33
|
const separator = computedFieldValueProviderCtxt.separator ?? ' ';
|
|
23
34
|
const fields = computedFieldValueProviderCtxt.fields ?? [];
|
|
24
35
|
const slugify = computedFieldValueProviderCtxt.slugify ?? false;
|
|
36
|
+
const dateFormat = computedFieldValueProviderCtxt.dateFormat
|
|
37
|
+
?? this.settingService.getConfigValue("dateFormat");
|
|
25
38
|
const parts = [];
|
|
26
39
|
for (const fieldExpr of fields) {
|
|
27
40
|
let val = (0, lodash_1.get)(triggerEntity, fieldExpr);
|
|
28
41
|
if (val == null)
|
|
29
42
|
continue;
|
|
43
|
+
if (val instanceof Date) {
|
|
44
|
+
val = (0, dayjs_1.default)(val).format(dateFormat);
|
|
45
|
+
}
|
|
30
46
|
if (typeof val !== 'string') {
|
|
31
47
|
val = String(val);
|
|
32
48
|
}
|
|
@@ -44,6 +60,7 @@ let ConcatEntityComputedFieldProvider = class ConcatEntityComputedFieldProvider
|
|
|
44
60
|
exports.ConcatEntityComputedFieldProvider = ConcatEntityComputedFieldProvider;
|
|
45
61
|
exports.ConcatEntityComputedFieldProvider = ConcatEntityComputedFieldProvider = __decorate([
|
|
46
62
|
(0, computed_field_provider_decorator_1.ComputedFieldProvider)(),
|
|
47
|
-
(0, common_1.Injectable)()
|
|
63
|
+
(0, common_1.Injectable)(),
|
|
64
|
+
__metadata("design:paramtypes", [setting_service_1.SettingService])
|
|
48
65
|
], ConcatEntityComputedFieldProvider);
|
|
49
66
|
//# sourceMappingURL=concat-entity-computed-field-provider.service.js.map
|
package/dist/services/computed-fields/entity/concat-entity-computed-field-provider.service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"concat-entity-computed-field-provider.service.js","sourceRoot":"","sources":["../../../../src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"concat-entity-computed-field-provider.service.js","sourceRoot":"","sources":["../../../../src/services/computed-fields/entity/concat-entity-computed-field-provider.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,2CAA4C;AAC5C,mCAAwC;AACxC,6GAAyF;AAIzF,2DAA8D;AAavD,IAAM,iCAAiC,GAAvC,MAAM,iCAAiC;IAE1C,YACqB,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAC/C,CAAC;IAEL,IAAI;QACA,OAAO,mCAAmC,CAAC;IAC/C,CAAC;IAED,IAAI;QACA,OAAO,iHAAiH,CAAC;IAC7H,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,aAAgB,EAAE,qBAAwE;QAC5G,MAAM,EAAE,8BAA8B,EAAE,GAAG,qBAAqB,CAAC;QACjE,MAAM,SAAS,GAAG,8BAA8B,CAAC,SAAS,IAAI,GAAG,CAAC;QAClE,MAAM,MAAM,GAAa,8BAA8B,CAAC,MAAM,IAAI,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,8BAA8B,CAAC,OAAO,IAAI,KAAK,CAAC;QAChE,MAAM,UAAU,GAAG,8BAA8B,CAAC,UAAU;eACrD,IAAI,CAAC,cAAc,CAAC,cAAc,CAAmB,YAAY,CAAC,CAAC;QAE1E,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,MAAM,SAAS,IAAI,MAAM,EAAE,CAAC;YAC7B,IAAI,GAAG,GAAG,IAAA,YAAG,EAAC,aAAoB,EAAE,SAAS,CAAC,CAAC;YAG/C,IAAI,GAAG,IAAI,IAAI;gBAAE,SAAS;YAE1B,IAAI,GAAG,YAAY,IAAI,EAAE,CAAC;gBACtB,GAAG,GAAG,IAAA,eAAK,EAAC,GAAG,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;gBAC1B,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;YAED,IAAI,OAAO,EAAE,CAAC;gBACV,GAAG,GAAG,IAAA,kBAAS,EAAC,GAAG,CAAC,CAAC;YACzB,CAAC;YAGD,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACL,CAAC;QAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAGhD,aAAqB,CAAC,qBAAqB,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC;IACjF,CAAC;CAEJ,CAAA;AAtDY,8EAAiC;4CAAjC,iCAAiC;IAF7C,IAAA,yDAAqB,GAAE;IACvB,IAAA,mBAAU,GAAE;qCAI4B,gCAAc;GAH1C,iCAAiC,CAsD7C","sourcesContent":["import dayjs from \"dayjs\";\nimport { Injectable } from \"@nestjs/common\";\nimport { kebabCase, get } from \"lodash\";\nimport { ComputedFieldProvider } from \"src/decorators/computed-field-provider.decorator\";\nimport { CommonEntity } from \"src/entities/common.entity\";\nimport { ComputedFieldMetadata } from \"src/helpers/solid-registry\";\nimport { IEntityPreComputeFieldProvider } from \"src/interfaces\";\nimport { SettingService } from \"src/services/setting.service\";\nimport type { SolidCoreSetting } from \"src/services/settings/default-settings-provider.service\";\n\n\nexport interface ConcatComputedFieldContext {\n separator: string; // The separator to use between concatenated values\n fields: string[]; // The fields to concatenate\n slugify?: boolean; // Optional: if true, slugify each field value before concatenation\n dateFormat?: string; // Optional: format to use for Date values. Defaults to the configured dateFormat setting\n}\n\n@ComputedFieldProvider()\n@Injectable()\nexport class ConcatEntityComputedFieldProvider<T extends CommonEntity> implements IEntityPreComputeFieldProvider<T, ConcatComputedFieldContext> {\n\n constructor(\n private readonly settingService: SettingService,\n ) { }\n\n name(): string {\n return \"ConcatEntityComputedFieldProvider\";\n }\n\n help(): string {\n return \"Computed field provider used to create fields whose value is a concatenation of other fields in the same model.\";\n }\n\n async preComputeValue(triggerEntity: T, computedFieldMetadata: ComputedFieldMetadata<ConcatComputedFieldContext>) {\n const { computedFieldValueProviderCtxt } = computedFieldMetadata;\n const separator = computedFieldValueProviderCtxt.separator ?? ' ';\n const fields: string[] = computedFieldValueProviderCtxt.fields ?? [];\n const slugify = computedFieldValueProviderCtxt.slugify ?? false;\n const dateFormat = computedFieldValueProviderCtxt.dateFormat\n ?? this.settingService.getConfigValue<SolidCoreSetting>(\"dateFormat\");\n\n const parts: string[] = [];\n\n for (const fieldExpr of fields) {\n let val = get(triggerEntity as any, fieldExpr);\n\n // normalize to string (skip null/undefined)\n if (val == null) continue;\n\n if (val instanceof Date) {\n val = dayjs(val).format(dateFormat);\n }\n\n if (typeof val !== 'string') {\n val = String(val);\n }\n\n if (slugify) {\n val = kebabCase(val);\n }\n\n // ignore empty strings so you don't get stray separators\n if (val.length > 0) {\n parts.push(val);\n }\n }\n\n const concatenatedString = parts.join(separator);\n\n // set the computed field on the entity\n (triggerEntity as any)[computedFieldMetadata.fieldName] = concatenatedString;\n }\n\n}\n"]}
|
|
@@ -30,6 +30,7 @@ export declare class CRUDService<T extends CommonEntity> {
|
|
|
30
30
|
private validateAndTransformDto;
|
|
31
31
|
private saveMedia;
|
|
32
32
|
update(id: number, updateDto: any, files?: Express.Multer.File[], isPartialUpdate?: boolean, solidRequestContext?: any, isUpdate?: boolean): Promise<T>;
|
|
33
|
+
private prepareManyToManyAuditSnapshot;
|
|
33
34
|
delete(id: number, solidRequestContext?: any): Promise<T>;
|
|
34
35
|
private fieldCrudManager;
|
|
35
36
|
private isSkipComputation;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.service.d.ts","sourceRoot":"","sources":["../../src/services/crud.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,aAAa,EAA2E,MAAM,SAAS,CAAC;AAEjH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D,OAAO,EAAE,aAAa,EAAE,MAAM,mCAAmC,CAAC;
|
|
1
|
+
{"version":3,"file":"crud.service.d.ts","sourceRoot":"","sources":["../../src/services/crud.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -64,12 +64,14 @@ const SelectionDynamicFieldCrudManager_1 = require("../helpers/field-crud-manage
|
|
|
64
64
|
const SelectionStaticFieldCrudManager_1 = require("../helpers/field-crud-managers/SelectionStaticFieldCrudManager");
|
|
65
65
|
const ShortTextFieldCrudManager_1 = require("../helpers/field-crud-managers/ShortTextFieldCrudManager");
|
|
66
66
|
const UUIDFieldCrudManager_1 = require("../helpers/field-crud-managers/UUIDFieldCrudManager");
|
|
67
|
+
const model_metadata_helper_service_1 = require("../helpers/model-metadata-helper.service");
|
|
67
68
|
const crud_helper_service_1 = require("./crud-helper.service");
|
|
68
69
|
const hashing_service_1 = require("./hashing.service");
|
|
69
70
|
const solid_registry_1 = require("../helpers/solid-registry");
|
|
70
71
|
const mediaStorageProviders_1 = require("./mediaStorageProviders");
|
|
71
72
|
const model_metadata_service_1 = require("./model-metadata.service");
|
|
72
73
|
const request_context_service_1 = require("./request-context.service");
|
|
74
|
+
const AUDIT_BEFORE_SNAPSHOT = '__auditBeforeSnapshot';
|
|
73
75
|
class CRUDService {
|
|
74
76
|
constructor(entityManager, repo, modelName, moduleName, moduleRef, defaultDatasourceEntityManager) {
|
|
75
77
|
this.entityManager = entityManager;
|
|
@@ -194,6 +196,7 @@ class CRUDService {
|
|
|
194
196
|
if (model.draftPublishWorkflow === true && entity.publishedAt) {
|
|
195
197
|
throw new common_1.BadRequestException(`Cannot update a published record for model ${this.modelName}. Unpublish it first.`);
|
|
196
198
|
}
|
|
199
|
+
await this.prepareManyToManyAuditSnapshot(entity, id, model.singularName);
|
|
197
200
|
let hasMediaFields = false;
|
|
198
201
|
const fieldsToProcess = [...model.fields];
|
|
199
202
|
for (const field of fieldsToProcess) {
|
|
@@ -208,6 +211,30 @@ class CRUDService {
|
|
|
208
211
|
}
|
|
209
212
|
return savedEntity;
|
|
210
213
|
}
|
|
214
|
+
async prepareManyToManyAuditSnapshot(entity, id, modelSingularName) {
|
|
215
|
+
const modelMetadataHelperService = this.moduleRef.get(model_metadata_helper_service_1.ModelMetadataHelperService, { strict: false });
|
|
216
|
+
const auditRelationFields = (await modelMetadataHelperService.loadFieldHierarchy(modelSingularName)).filter(field => field.enableAuditTracking &&
|
|
217
|
+
field.type === 'relation' &&
|
|
218
|
+
field.relationType !== 'one-to-many');
|
|
219
|
+
if (auditRelationFields.length > 0) {
|
|
220
|
+
const relations = {};
|
|
221
|
+
auditRelationFields.forEach(field => relations[field.name] = true);
|
|
222
|
+
const auditBeforeEntity = await this.repo.findOne({
|
|
223
|
+
where: {
|
|
224
|
+
id: id,
|
|
225
|
+
},
|
|
226
|
+
relations: relations,
|
|
227
|
+
});
|
|
228
|
+
if (auditBeforeEntity) {
|
|
229
|
+
Object.defineProperty(entity, AUDIT_BEFORE_SNAPSHOT, {
|
|
230
|
+
configurable: true,
|
|
231
|
+
enumerable: false,
|
|
232
|
+
value: auditBeforeEntity,
|
|
233
|
+
writable: true,
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
211
238
|
async delete(id, solidRequestContext = {}) {
|
|
212
239
|
if (!id) {
|
|
213
240
|
throw new Error(error_messages_1.ERROR_MESSAGES.ID_REQUIRED_FOR_DELETE);
|