cabloy 5.1.102 → 5.1.104
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/.cabloy-version +1 -1
- package/CHANGELOG.md +47 -0
- package/CLAUDE.local.md +4 -0
- package/cabloy-docs/.vitepress/config.mjs +3 -0
- package/cabloy-docs/backend/file-guide.md +148 -0
- package/cabloy-docs/backend/image-guide.md +40 -40
- package/cabloy-docs/backend/jwt-guide.md +21 -0
- package/cabloy-docs/frontend/a-model-under-the-hood.md +26 -4
- package/cabloy-docs/frontend/file-guide.md +147 -0
- package/cabloy-docs/frontend/image-guide.md +18 -9
- package/cabloy-docs/frontend/model-architecture.md +1 -1
- package/cabloy-docs/frontend/model-state-guide.md +132 -16
- package/cabloy-docs/frontend/ssr-init-data.md +12 -1
- package/cabloy-docs/frontend/use-state-data-best-practices.md +54 -0
- package/cabloy-docs/fullstack/file-workflow.md +135 -0
- package/cabloy-docs/fullstack/image-workflow.md +12 -3
- package/package.json +1 -1
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/pnpm-lock.yaml +23 -23
- package/vona/src/suite/a-home/modules/home-user/src/controller/passport.ts +7 -7
- package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +30 -4
- package/vona/src/suite/a-training/modules/training-record/src/bean/fileScene.dossierFile.ts +1 -1
- package/vona/src/suite/a-training/modules/training-record/src/bean/imageScene.sceneImage.ts +1 -0
- package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +8 -6
- package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +8 -6
- package/vona/src/suite/a-training/modules/training-record/src/index.ts +0 -1
- package/vona/src/suite/a-training/modules/training-record/src/lib/index.ts +0 -1
- package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +10 -12
- package/vona/src/suite/a-training/modules/training-student/src/bean/imageScene.studentImage.ts +1 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +9 -10
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +2 -2
- package/vona/src/suite-vendor/a-file/modules/a-file/package.json +3 -2
- package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/index.ts +155 -35
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.file.ts +283 -54
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileUploadPolicy.ts +46 -63
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.index.ts +12 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.redlock.ts +1 -1
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.version.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/schedule.fileDraftPrune.ts +29 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/serializerTransform.resolveView.ts +45 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/serializerTransform.resolveViews.ts +45 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/config/config.ts +6 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/controller/file.ts +64 -56
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadFinalizeRequest.ts +13 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadFinalizeResponse.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadRequest.ts +0 -3
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadResponse.ts +2 -14
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDownloadRequest.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyResponse.ts +3 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadResponse.ts +0 -25
- package/vona/src/{suite/a-training/modules/training-record/src/dto/recordDossierFileView.ts → suite-vendor/a-file/modules/a-file/src/dto/fileView.ts} +3 -15
- package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/file.ts +10 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileUploadUrl.ts +329 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/file.ts +51 -10
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileProvider.ts +8 -3
- package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileScene.ts +1 -1
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/bean/fileProvider.cloudflare.ts +12 -4
- package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/service/fileCloudflare.ts +52 -18
- package/vona/src/suite-vendor/a-file/modules/file-native/package.json +1 -1
- package/vona/src/suite-vendor/a-file/modules/file-native/src/bean/fileProvider.native.ts +5 -5
- package/vona/src/suite-vendor/a-file/modules/file-native/src/service/fileNative.ts +7 -8
- package/vona/src/suite-vendor/a-file/package.json +4 -4
- package/vona/src/suite-vendor/a-image/modules/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +16 -19
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.image.ts +99 -74
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +28 -68
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.version.ts +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveView.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveViews.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/config/config.ts +4 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +78 -34
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDeliveryRequest.ts +3 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadRequest.ts +0 -3
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadResponse.ts +1 -27
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyResponse.ts +6 -0
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadResponse.ts +2 -36
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadUrlRequest.ts +0 -3
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageView.ts +4 -27
- package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/image.ts +1 -1
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/image.ts +36 -29
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageProvider.ts +4 -4
- package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageScene.ts +1 -0
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/bean/imageProvider.cloudflare.ts +8 -11
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/lib/cloudflareImageUrl.ts +4 -16
- package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +17 -16
- package/vona/src/suite-vendor/a-image/modules/image-native/package.json +2 -6
- package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/index.ts +0 -37
- package/vona/src/suite-vendor/a-image/modules/image-native/src/bean/imageProvider.native.ts +13 -36
- package/vona/src/suite-vendor/a-image/modules/image-native/src/service/imageNative.ts +100 -113
- package/vona/src/suite-vendor/a-image/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/config/config.ts +3 -1
- package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/service/jwtClient.ts +9 -4
- package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-upload/src/bean/interceptor.upload.ts +113 -64
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/src/suite/a-home/modules/home-api/src/api/openapi/schemas.ts +50 -12
- package/zova/src/suite/a-home/modules/home-api/src/api/openapi/types.ts +610 -114
- package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +51 -2
- package/zova/src/suite/a-home/modules/home-passport/src/monkey.ts +17 -3
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +50 -12
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +610 -114
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/index.ts +16 -12
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/file.ts +25 -25
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/schemas.ts +18 -24
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/types.ts +228 -291
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/apiSchema/file.ts +5 -5
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/bean/tableCell.file.tsx +23 -5
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/component/formFieldFile/controller.tsx +72 -43
- package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/file.ts +22 -4
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/index.ts +16 -42
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/image.ts +5 -25
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/schemas.ts +10 -24
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/types.ts +216 -333
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/image.ts +0 -5
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/bean/tableCell.image.tsx +38 -12
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +79 -32
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/lib/preview.ts +22 -4
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/types/image.ts +3 -4
- package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useState.ts +6 -6
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useStateGeneral.ts +5 -5
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/utils.ts +29 -1
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/monkey.ts +11 -2
- package/zova/src/suite-vendor/a-zova/modules/a-model/src/types/query.ts +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +4 -4
- package/zova/src/suite-vendor/a-zova/package.json +3 -3
- package/vona/src/suite/a-training/modules/training-record/src/lib/resolveDossierFiles.ts +0 -34
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenRequest.ts +0 -24
- package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenResponse.ts +0 -16
- package/vona/src/suite-vendor/a-image/modules/image-native/src/controller/image.ts +0 -57
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/imageNativeImage.ts +0 -31
- package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/imageNativeImage.ts +0 -13
package/vona/pnpm-lock.yaml
CHANGED
|
@@ -501,8 +501,8 @@ importers:
|
|
|
501
501
|
specifier: npm:@cabloy/zod@4.3.8
|
|
502
502
|
version: '@cabloy/zod@4.3.8'
|
|
503
503
|
zova:
|
|
504
|
-
specifier: ^5.1.
|
|
505
|
-
version: 5.1.
|
|
504
|
+
specifier: ^5.1.133
|
|
505
|
+
version: 5.1.133(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
|
|
506
506
|
zova-jsx:
|
|
507
507
|
specifier: ^1.1.77
|
|
508
508
|
version: 1.1.77(typescript@5.9.3)
|
|
@@ -528,8 +528,8 @@ importers:
|
|
|
528
528
|
specifier: ^5.1.29
|
|
529
529
|
version: 5.1.29
|
|
530
530
|
zova-module-a-model:
|
|
531
|
-
specifier: ^5.1.
|
|
532
|
-
version: 5.1.
|
|
531
|
+
specifier: ^5.1.32
|
|
532
|
+
version: 5.1.32(vue@3.5.39(typescript@5.9.3))
|
|
533
533
|
zova-module-a-openapi:
|
|
534
534
|
specifier: ^5.1.43
|
|
535
535
|
version: 5.1.43
|
|
@@ -573,8 +573,8 @@ importers:
|
|
|
573
573
|
specifier: npm:@cabloy/zod@4.3.8
|
|
574
574
|
version: '@cabloy/zod@4.3.8'
|
|
575
575
|
zova:
|
|
576
|
-
specifier: ^5.1.
|
|
577
|
-
version: 5.1.
|
|
576
|
+
specifier: ^5.1.133
|
|
577
|
+
version: 5.1.133(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
|
|
578
578
|
zova-jsx:
|
|
579
579
|
specifier: ^1.1.77
|
|
580
580
|
version: 1.1.77(typescript@5.9.3)
|
|
@@ -600,8 +600,8 @@ importers:
|
|
|
600
600
|
specifier: ^5.1.29
|
|
601
601
|
version: 5.1.29
|
|
602
602
|
zova-module-a-model:
|
|
603
|
-
specifier: ^5.1.
|
|
604
|
-
version: 5.1.
|
|
603
|
+
specifier: ^5.1.32
|
|
604
|
+
version: 5.1.32(vue@3.5.39(typescript@5.9.3))
|
|
605
605
|
zova-module-a-openapi:
|
|
606
606
|
specifier: ^5.1.43
|
|
607
607
|
version: 5.1.43
|
|
@@ -1517,13 +1517,13 @@ importers:
|
|
|
1517
1517
|
src/suite-vendor/a-file:
|
|
1518
1518
|
dependencies:
|
|
1519
1519
|
vona-module-a-file:
|
|
1520
|
-
specifier: ^5.0.
|
|
1520
|
+
specifier: ^5.0.5
|
|
1521
1521
|
version: link:modules/a-file
|
|
1522
1522
|
vona-module-file-cloudflare:
|
|
1523
|
-
specifier: ^5.0.
|
|
1523
|
+
specifier: ^5.0.4
|
|
1524
1524
|
version: link:modules/file-cloudflare
|
|
1525
1525
|
vona-module-file-native:
|
|
1526
|
-
specifier: ^5.0.
|
|
1526
|
+
specifier: ^5.0.4
|
|
1527
1527
|
version: link:modules/file-native
|
|
1528
1528
|
|
|
1529
1529
|
src/suite-vendor/a-file/modules/a-file:
|
|
@@ -1625,7 +1625,7 @@ importers:
|
|
|
1625
1625
|
src/suite-vendor/a-test:
|
|
1626
1626
|
dependencies:
|
|
1627
1627
|
vona-module-test-file:
|
|
1628
|
-
specifier: ^5.0.
|
|
1628
|
+
specifier: ^5.0.5
|
|
1629
1629
|
version: link:modules/test-file
|
|
1630
1630
|
|
|
1631
1631
|
src/suite-vendor/a-test/modules/test-auth:
|
|
@@ -7993,8 +7993,8 @@ packages:
|
|
|
7993
7993
|
zova-module-a-meta@5.1.21:
|
|
7994
7994
|
resolution: {integrity: sha512-7vsLOMw1UQEZ+8qbBaiz9t4n3N7AU1jxpaiSIIky7hBvKO9nuHq+e7FONpj9poa8WeHkYoflBg/8imKBy/IlNw==}
|
|
7995
7995
|
|
|
7996
|
-
zova-module-a-model@5.1.
|
|
7997
|
-
resolution: {integrity: sha512
|
|
7996
|
+
zova-module-a-model@5.1.32:
|
|
7997
|
+
resolution: {integrity: sha512-uzOXp2JlIOaBFy4pe5HyM846A2IK3zA2J8y8Je0i4EvioM36eiBhE61F8q0K59ojh3QZuinrxH6m9DIVL2EvVw==}
|
|
7998
7998
|
|
|
7999
7999
|
zova-module-a-openapi@5.1.43:
|
|
8000
8000
|
resolution: {integrity: sha512-xJKvSPl1AZnH7EpgEd9a3u3IEpJfnou19DKre/7TL1KdiTdfNThLrmmkdP1UNYlUHUgCczcGUwZDdMiE9gdxwA==}
|
|
@@ -8032,11 +8032,11 @@ packages:
|
|
|
8032
8032
|
zova-module-rest-resource@5.1.41:
|
|
8033
8033
|
resolution: {integrity: sha512-7Y8rLmHdw0pynlWqsyHPWuCWFLwr/0HsNvfef64cPw91LRujf/7OlulVWqH8ZoFNioZZUpfumB+t/+mICoYfFg==}
|
|
8034
8034
|
|
|
8035
|
-
zova-suite-a-zova@5.1.
|
|
8036
|
-
resolution: {integrity: sha512-
|
|
8035
|
+
zova-suite-a-zova@5.1.132:
|
|
8036
|
+
resolution: {integrity: sha512-bHyim0stshLyjEvehW8cUL0Bf/pR/sU43Dpada2g2ieGH1p34EzyLeaWimhId++sO9H3xErVX6aQXe0Xf6pELA==}
|
|
8037
8037
|
|
|
8038
|
-
zova@5.1.
|
|
8039
|
-
resolution: {integrity: sha512-
|
|
8038
|
+
zova@5.1.133:
|
|
8039
|
+
resolution: {integrity: sha512-1tM0u0EU69/RvXmlxhVIrEY4ADVhQsEIr8UAcQ1U+Mjm3QwLJ7y7fDAQWsW7ChjEXHGrCU62fdc0tPvJ5CGntg==}
|
|
8040
8040
|
|
|
8041
8041
|
zwitch@1.0.5:
|
|
8042
8042
|
resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
|
|
@@ -13935,7 +13935,7 @@ snapshots:
|
|
|
13935
13935
|
|
|
13936
13936
|
zova-module-a-meta@5.1.21: {}
|
|
13937
13937
|
|
|
13938
|
-
zova-module-a-model@5.1.
|
|
13938
|
+
zova-module-a-model@5.1.32(vue@3.5.39(typescript@5.9.3)):
|
|
13939
13939
|
dependencies:
|
|
13940
13940
|
'@tanstack/query-core': 5.101.2
|
|
13941
13941
|
'@tanstack/query-persist-client-core': 5.101.2
|
|
@@ -14010,7 +14010,7 @@ snapshots:
|
|
|
14010
14010
|
|
|
14011
14011
|
zova-module-rest-resource@5.1.41: {}
|
|
14012
14012
|
|
|
14013
|
-
zova-suite-a-zova@5.1.
|
|
14013
|
+
zova-suite-a-zova@5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
|
|
14014
14014
|
dependencies:
|
|
14015
14015
|
zova-module-a-api: 5.1.21
|
|
14016
14016
|
zova-module-a-app: 5.1.24
|
|
@@ -14025,7 +14025,7 @@ snapshots:
|
|
|
14025
14025
|
zova-module-a-interceptor: 5.1.29
|
|
14026
14026
|
zova-module-a-logger: 5.1.26
|
|
14027
14027
|
zova-module-a-meta: 5.1.21
|
|
14028
|
-
zova-module-a-model: 5.1.
|
|
14028
|
+
zova-module-a-model: 5.1.32(vue@3.5.39(typescript@5.9.3))
|
|
14029
14029
|
zova-module-a-openapi: 5.1.43
|
|
14030
14030
|
zova-module-a-router: 5.1.29
|
|
14031
14031
|
zova-module-a-routerstack: 5.1.26
|
|
@@ -14044,10 +14044,10 @@ snapshots:
|
|
|
14044
14044
|
- typescript
|
|
14045
14045
|
- vue
|
|
14046
14046
|
|
|
14047
|
-
zova@5.1.
|
|
14047
|
+
zova@5.1.133(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
|
|
14048
14048
|
dependencies:
|
|
14049
14049
|
zova-core: 5.1.77(patch_hash=0f4164c4d2bbb16d671beb5c26759dff37769be0709df941bc7b90b94261ac54)(typescript@5.9.3)
|
|
14050
|
-
zova-suite-a-zova: 5.1.
|
|
14050
|
+
zova-suite-a-zova: 5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
|
|
14051
14051
|
transitivePeerDependencies:
|
|
14052
14052
|
- '@vue/composition-api'
|
|
14053
14053
|
- debug
|
|
@@ -111,6 +111,13 @@ export class ControllerPassport extends BeanBase {
|
|
|
111
111
|
return this._combineDtoPassportJwt(jwt);
|
|
112
112
|
}
|
|
113
113
|
|
|
114
|
+
@Web.post('refreshAuthToken')
|
|
115
|
+
@Passport.public()
|
|
116
|
+
@Api.body(v.object(DtoJwtToken))
|
|
117
|
+
async refreshAuthToken(@Arg.body('refreshToken') refreshToken: string): Promise<DtoJwtToken> {
|
|
118
|
+
return await this.bean.passport.refreshAuthToken(refreshToken);
|
|
119
|
+
}
|
|
120
|
+
|
|
114
121
|
@Web.post('createPassportJwtFromOauthCode')
|
|
115
122
|
@Passport.public()
|
|
116
123
|
@Api.body(v.object(DtoPassportJwt))
|
|
@@ -119,13 +126,6 @@ export class ControllerPassport extends BeanBase {
|
|
|
119
126
|
return this._combineDtoPassportJwt(jwt);
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
@Web.post('refreshAuthToken')
|
|
123
|
-
@Passport.public()
|
|
124
|
-
@Api.body(v.object(DtoJwtToken))
|
|
125
|
-
async refreshAuthToken(@Arg.body('refreshToken') refreshToken: string): Promise<DtoJwtToken> {
|
|
126
|
-
return await this.bean.passport.refreshAuthToken(refreshToken);
|
|
127
|
-
}
|
|
128
|
-
|
|
129
129
|
@Web.post('createTempAuthToken')
|
|
130
130
|
@Api.body(z.string())
|
|
131
131
|
async createTempAuthToken(@Arg.query('path', v.optional()) path?: string): Promise<string> {
|
|
@@ -388,20 +388,46 @@ declare module 'vona-module-training-record' {
|
|
|
388
388
|
}
|
|
389
389
|
}
|
|
390
390
|
/** ssrMenu: end */
|
|
391
|
+
/** fileScene: begin */
|
|
392
|
+
export * from '../bean/fileScene.dossierFile.ts';
|
|
393
|
+
|
|
394
|
+
import { type IDecoratorFileSceneOptions } from 'vona-module-a-file';
|
|
395
|
+
declare module 'vona-module-a-file' {
|
|
396
|
+
|
|
397
|
+
export interface IFileSceneRecord {
|
|
398
|
+
'training-record:dossierFile': IDecoratorFileSceneOptions;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
|
|
402
|
+
}
|
|
403
|
+
declare module 'vona-module-training-record' {
|
|
404
|
+
|
|
405
|
+
export interface FileSceneDossierFile {
|
|
406
|
+
/** @internal */
|
|
407
|
+
get scope(): ScopeModuleTrainingRecord;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export interface FileSceneDossierFile {
|
|
411
|
+
get $beanFullName(): 'training-record.fileScene.dossierFile';
|
|
412
|
+
get $onionName(): 'training-record:dossierFile';
|
|
413
|
+
get $onionOptions(): IDecoratorFileSceneOptions;
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
/** fileScene: end */
|
|
391
417
|
/** imageScene: begin */
|
|
392
418
|
export * from '../bean/imageScene.sceneImage.ts';
|
|
393
419
|
|
|
394
420
|
import { type IDecoratorImageSceneOptions } from 'vona-module-a-image';
|
|
395
421
|
declare module 'vona-module-a-image' {
|
|
396
|
-
|
|
422
|
+
|
|
397
423
|
export interface IImageSceneRecord {
|
|
398
424
|
'training-record:sceneImage': IDecoratorImageSceneOptions;
|
|
399
425
|
}
|
|
400
426
|
|
|
401
|
-
|
|
427
|
+
|
|
402
428
|
}
|
|
403
429
|
declare module 'vona-module-training-record' {
|
|
404
|
-
|
|
430
|
+
|
|
405
431
|
export interface ImageSceneSceneImage {
|
|
406
432
|
/** @internal */
|
|
407
433
|
get scope(): ScopeModuleTrainingRecord;
|
|
@@ -411,7 +437,7 @@ declare module 'vona-module-training-record' {
|
|
|
411
437
|
get $beanFullName(): 'training-record.imageScene.sceneImage';
|
|
412
438
|
get $onionName(): 'training-record:sceneImage';
|
|
413
439
|
get $onionOptions(): IDecoratorImageSceneOptions;
|
|
414
|
-
}
|
|
440
|
+
}
|
|
415
441
|
}
|
|
416
442
|
/** imageScene: end */
|
|
417
443
|
/** locale: begin */
|
|
@@ -2,6 +2,7 @@ import { BeanBase } from 'vona';
|
|
|
2
2
|
import { FileScene } from 'vona-module-a-file';
|
|
3
3
|
|
|
4
4
|
@FileScene({
|
|
5
|
+
public: false,
|
|
5
6
|
upload: {
|
|
6
7
|
maxSize: 20 * 1024 * 1024,
|
|
7
8
|
mimeTypes: [
|
|
@@ -16,7 +17,6 @@ import { FileScene } from 'vona-module-a-file';
|
|
|
16
17
|
],
|
|
17
18
|
extensions: ['.pdf', '.doc', '.docx', '.xls', '.xlsx', '.zip', '.txt'],
|
|
18
19
|
multiple: true,
|
|
19
|
-
public: false,
|
|
20
20
|
},
|
|
21
21
|
})
|
|
22
22
|
export class FileSceneDossierFile extends BeanBase {}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IDecoratorDtoOptions } from 'vona-module-a-web';
|
|
2
2
|
|
|
3
|
+
import { DtoFileView } from 'vona-module-a-file';
|
|
3
4
|
import { DtoImageView } from 'vona-module-a-image';
|
|
4
5
|
import { Api, v } from 'vona-module-a-openapiutils';
|
|
5
6
|
import { $Dto } from 'vona-module-a-orm';
|
|
@@ -7,9 +8,7 @@ import { Dto } from 'vona-module-a-web';
|
|
|
7
8
|
import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
|
|
8
9
|
|
|
9
10
|
import { $locale } from '../.metadata/locales.ts';
|
|
10
|
-
import { resolveDossierFiles } from '../lib/resolveDossierFiles.ts';
|
|
11
11
|
import { ModelRecord } from '../model/record.ts';
|
|
12
|
-
import { DtoRecordDossierFileView } from './recordDossierFileView.ts';
|
|
13
12
|
|
|
14
13
|
export interface IDtoOptionsRecordSelectResItem extends IDecoratorDtoOptions {}
|
|
15
14
|
|
|
@@ -34,6 +33,7 @@ export class DtoRecordSelectResItem extends $Dto.get(() => ModelRecord) {
|
|
|
34
33
|
v.serializerTransform('a-image:resolveViews', {
|
|
35
34
|
fieldName: 'sceneImageIds',
|
|
36
35
|
imageScene: 'training-record:sceneImage',
|
|
36
|
+
deliveryOptions: { audience: true },
|
|
37
37
|
}),
|
|
38
38
|
v.array(DtoImageView),
|
|
39
39
|
)
|
|
@@ -43,12 +43,14 @@ export class DtoRecordSelectResItem extends $Dto.get(() => ModelRecord) {
|
|
|
43
43
|
v.title($locale('DossierFiles')),
|
|
44
44
|
ZovaRender.visible(false),
|
|
45
45
|
v.optional(),
|
|
46
|
-
v.serializerTransform('a-
|
|
47
|
-
|
|
46
|
+
v.serializerTransform('a-file:resolveViews', {
|
|
47
|
+
fieldName: 'dossierFileIds',
|
|
48
|
+
fileScene: 'training-record:dossierFile',
|
|
49
|
+
deliveryOptions: { audience: true },
|
|
48
50
|
}),
|
|
49
|
-
v.array(
|
|
51
|
+
v.array(DtoFileView),
|
|
50
52
|
)
|
|
51
|
-
dossierFiles?:
|
|
53
|
+
dossierFiles?: DtoFileView[];
|
|
52
54
|
|
|
53
55
|
@Api.field(
|
|
54
56
|
v.title($locale('Operations')),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { IDecoratorDtoOptions } from 'vona-module-a-web';
|
|
2
2
|
|
|
3
|
+
import { DtoFileView } from 'vona-module-a-file';
|
|
3
4
|
import { DtoImageView } from 'vona-module-a-image';
|
|
4
5
|
import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
|
|
5
6
|
import { $Dto } from 'vona-module-a-orm';
|
|
@@ -7,11 +8,9 @@ import { Dto } from 'vona-module-a-web';
|
|
|
7
8
|
import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
|
|
8
9
|
|
|
9
10
|
import { $locale } from '../.metadata/locales.ts';
|
|
10
|
-
import { resolveDossierFiles } from '../lib/resolveDossierFiles.ts';
|
|
11
11
|
import { ModelRecord } from '../model/record.ts';
|
|
12
12
|
import { DtoDetailRecordSubjectResItem } from './detailRecordSubjectResItem.tsx';
|
|
13
13
|
import { DtoDetailRecordSubjectView } from './detailRecordSubjectView.tsx';
|
|
14
|
-
import { DtoRecordDossierFileView } from './recordDossierFileView.ts';
|
|
15
14
|
|
|
16
15
|
export interface IDtoOptionsRecordView extends IDecoratorDtoOptions {}
|
|
17
16
|
|
|
@@ -46,6 +45,7 @@ export class DtoRecordView extends $Dto.get(() => ModelRecord, {
|
|
|
46
45
|
v.serializerTransform('a-image:resolveViews', {
|
|
47
46
|
fieldName: 'sceneImageIds',
|
|
48
47
|
imageScene: 'training-record:sceneImage',
|
|
48
|
+
deliveryOptions: { audience: true },
|
|
49
49
|
}),
|
|
50
50
|
v.array(DtoImageView),
|
|
51
51
|
)
|
|
@@ -55,12 +55,14 @@ export class DtoRecordView extends $Dto.get(() => ModelRecord, {
|
|
|
55
55
|
v.title($locale('DossierFiles')),
|
|
56
56
|
ZovaRender.visible(false),
|
|
57
57
|
v.optional(),
|
|
58
|
-
v.serializerTransform('a-
|
|
59
|
-
|
|
58
|
+
v.serializerTransform('a-file:resolveViews', {
|
|
59
|
+
fieldName: 'dossierFileIds',
|
|
60
|
+
fileScene: 'training-record:dossierFile',
|
|
61
|
+
deliveryOptions: { audience: true },
|
|
60
62
|
}),
|
|
61
|
-
v.array(
|
|
63
|
+
v.array(DtoFileView),
|
|
62
64
|
)
|
|
63
|
-
dossierFiles?:
|
|
65
|
+
dossierFiles?: DtoFileView[];
|
|
64
66
|
|
|
65
67
|
@Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordSubjectResItem))
|
|
66
68
|
_trainingRecordSubjects?: DtoDetailRecordSubjectResItem[];
|
|
@@ -43,10 +43,6 @@ describe('record.test.ts', () => {
|
|
|
43
43
|
filename: 'attendance.txt',
|
|
44
44
|
contentType: 'text/plain',
|
|
45
45
|
public: false,
|
|
46
|
-
meta: {
|
|
47
|
-
category: 'attendanceSheet',
|
|
48
|
-
source: 'upload',
|
|
49
|
-
},
|
|
50
46
|
},
|
|
51
47
|
{
|
|
52
48
|
clientName: 'default',
|
|
@@ -96,18 +92,24 @@ describe('record.test.ts', () => {
|
|
|
96
92
|
assert.equal(String(record.studentId), String(studentId));
|
|
97
93
|
assert.equal(record.subjectCount, recordData.subjectCount);
|
|
98
94
|
assert.equal(record.totalScore, recordData.totalScore);
|
|
99
|
-
assert.equal(record.averageScore, recordData.averageScore);
|
|
95
|
+
assert.equal(Number(record.averageScore), recordData.averageScore);
|
|
100
96
|
assert.equal(new Date(record.trainingTime).toISOString(), trainingTime.toISOString());
|
|
101
97
|
assert.equal(record.dossierFileIds?.length, 1);
|
|
102
98
|
assert.equal(record.dossierFiles?.length, 1);
|
|
103
99
|
assert.equal(String(recordDossierFile?.id), String(dossierFileAttendance.id));
|
|
104
100
|
assert.equal(recordDossierFile?.filename, 'attendance.txt');
|
|
105
101
|
assert.equal(recordDossierFile?.signed, true);
|
|
106
|
-
assert.equal(recordDossierFile
|
|
102
|
+
assert.equal('meta' in (recordDossierFile ?? {}), false);
|
|
103
|
+
assert.equal('fileScene' in (recordDossierFile ?? {}), false);
|
|
107
104
|
assert.equal(record.trainingRecordSubjects?.length, 1);
|
|
108
105
|
assert.equal(recordSubject?.name, '__Math__');
|
|
109
106
|
assert.equal(recordSubject?.score, 95);
|
|
110
|
-
const
|
|
107
|
+
const passportCode = await app.bean.passport.createTempAuthToken({
|
|
108
|
+
path: '/api/file/download',
|
|
109
|
+
});
|
|
110
|
+
const downloadUrl = new URL(recordDossierFile.downloadUrl);
|
|
111
|
+
downloadUrl.searchParams.set('x-vona-passport-code', passportCode);
|
|
112
|
+
const downloadResponse = await fetch(downloadUrl);
|
|
111
113
|
assert.equal(downloadResponse.ok, true);
|
|
112
114
|
assert.equal(await downloadResponse.text(), dossierTextAttendance.toString());
|
|
113
115
|
|
|
@@ -129,10 +131,6 @@ describe('record.test.ts', () => {
|
|
|
129
131
|
filename: 'assessment.txt',
|
|
130
132
|
contentType: 'text/plain',
|
|
131
133
|
public: false,
|
|
132
|
-
meta: {
|
|
133
|
-
category: 'assessmentReport',
|
|
134
|
-
source: 'upload',
|
|
135
|
-
},
|
|
136
134
|
},
|
|
137
135
|
{
|
|
138
136
|
clientName: 'default',
|
|
@@ -174,7 +172,7 @@ describe('record.test.ts', () => {
|
|
|
174
172
|
assert.equal(record.name, dataUpdate.name);
|
|
175
173
|
assert.equal(record.subjectCount, dataUpdate.subjectCount);
|
|
176
174
|
assert.equal(record.totalScore, dataUpdate.totalScore);
|
|
177
|
-
assert.equal(record.averageScore, dataUpdate.averageScore);
|
|
175
|
+
assert.equal(Number(record.averageScore), dataUpdate.averageScore);
|
|
178
176
|
assert.equal(new Date(record.trainingTime).toISOString(), trainingTimeUpdate.toISOString());
|
|
179
177
|
assert.equal(record.dossierFileIds?.length, 2);
|
|
180
178
|
assert.equal(record.dossierFiles?.length, 2);
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
import type { IDecoratorDtoOptions } from 'vona-module-a-web';
|
|
2
2
|
|
|
3
3
|
import { $Class } from 'vona';
|
|
4
|
+
import { DtoFileView } from 'vona-module-a-file';
|
|
4
5
|
import { DtoImageView } from 'vona-module-a-image';
|
|
5
6
|
import { $makeMetadata, Api, v } from 'vona-module-a-openapiutils';
|
|
6
7
|
import { $Dto } from 'vona-module-a-orm';
|
|
7
8
|
import { Dto } from 'vona-module-a-web';
|
|
8
|
-
import {
|
|
9
|
-
DtoRecordDossierFileView,
|
|
10
|
-
ModelRecord,
|
|
11
|
-
onEffectForTrainingRecordSubjects,
|
|
12
|
-
resolveDossierFiles,
|
|
13
|
-
} from 'vona-module-training-record';
|
|
9
|
+
import { ModelRecord, onEffectForTrainingRecordSubjects } from 'vona-module-training-record';
|
|
14
10
|
import { ZovaRender } from 'zova-rest-cabloy-basic-admin';
|
|
15
11
|
|
|
16
12
|
import { $locale } from '../.metadata/locales.ts';
|
|
@@ -50,6 +46,7 @@ export class DtoDetailRecordBase extends $Dto.get(() => ModelRecord, {
|
|
|
50
46
|
v.serializerTransform('a-image:resolveViews', {
|
|
51
47
|
fieldName: 'sceneImageIds',
|
|
52
48
|
imageScene: 'training-record:sceneImage',
|
|
49
|
+
deliveryOptions: { audience: true },
|
|
53
50
|
}),
|
|
54
51
|
v.array($Class.partial(DtoImageView)),
|
|
55
52
|
)
|
|
@@ -59,10 +56,12 @@ export class DtoDetailRecordBase extends $Dto.get(() => ModelRecord, {
|
|
|
59
56
|
v.title($locale('DossierFiles')),
|
|
60
57
|
ZovaRender.visible(false),
|
|
61
58
|
v.optional(),
|
|
62
|
-
v.serializerTransform('a-
|
|
63
|
-
|
|
59
|
+
v.serializerTransform('a-file:resolveViews', {
|
|
60
|
+
fieldName: 'dossierFileIds',
|
|
61
|
+
fileScene: 'training-record:dossierFile',
|
|
62
|
+
deliveryOptions: { audience: true },
|
|
64
63
|
}),
|
|
65
|
-
v.array($Class.partial(
|
|
64
|
+
v.array($Class.partial(DtoFileView)),
|
|
66
65
|
)
|
|
67
|
-
dossierFiles?: Partial<
|
|
66
|
+
dossierFiles?: Partial<DtoFileView>[];
|
|
68
67
|
}
|
|
@@ -87,7 +87,7 @@ describe('student.test.ts', () => {
|
|
|
87
87
|
assert.equal(record?.name, '__Record__');
|
|
88
88
|
assert.equal(record?.subjectCount, 1);
|
|
89
89
|
assert.equal(record?.totalScore, 88);
|
|
90
|
-
assert.equal(record?.averageScore, 88);
|
|
90
|
+
assert.equal(Number(record?.averageScore), 88);
|
|
91
91
|
assert.equal(new Date(record?.trainingTime).toISOString(), trainingTime.toISOString());
|
|
92
92
|
assert.equal(record?.trainingRecordSubjects?.length, 1);
|
|
93
93
|
assert.equal(recordSubject?.name, '__Math__');
|
|
@@ -141,7 +141,7 @@ describe('student.test.ts', () => {
|
|
|
141
141
|
assert.equal(updatedRecord?.name, '__RecordNew__');
|
|
142
142
|
assert.equal(updatedRecord?.subjectCount, 2);
|
|
143
143
|
assert.equal(updatedRecord?.totalScore, 183);
|
|
144
|
-
assert.equal(updatedRecord?.averageScore, 91.5);
|
|
144
|
+
assert.equal(Number(updatedRecord?.averageScore), 91.5);
|
|
145
145
|
assert.equal(
|
|
146
146
|
new Date(updatedRecord?.trainingTime).toISOString(),
|
|
147
147
|
trainingTimeUpdate.toISOString(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vona-module-a-file",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.5",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"Vona Module"
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
"files": [
|
|
10
10
|
"assets",
|
|
11
11
|
"dist",
|
|
12
|
-
"src"
|
|
12
|
+
"src",
|
|
13
|
+
"cli"
|
|
13
14
|
],
|
|
14
15
|
"type": "module",
|
|
15
16
|
"exports": {
|