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.
Files changed (138) hide show
  1. package/.cabloy-version +1 -1
  2. package/CHANGELOG.md +47 -0
  3. package/CLAUDE.local.md +4 -0
  4. package/cabloy-docs/.vitepress/config.mjs +3 -0
  5. package/cabloy-docs/backend/file-guide.md +148 -0
  6. package/cabloy-docs/backend/image-guide.md +40 -40
  7. package/cabloy-docs/backend/jwt-guide.md +21 -0
  8. package/cabloy-docs/frontend/a-model-under-the-hood.md +26 -4
  9. package/cabloy-docs/frontend/file-guide.md +147 -0
  10. package/cabloy-docs/frontend/image-guide.md +18 -9
  11. package/cabloy-docs/frontend/model-architecture.md +1 -1
  12. package/cabloy-docs/frontend/model-state-guide.md +132 -16
  13. package/cabloy-docs/frontend/ssr-init-data.md +12 -1
  14. package/cabloy-docs/frontend/use-state-data-best-practices.md +54 -0
  15. package/cabloy-docs/fullstack/file-workflow.md +135 -0
  16. package/cabloy-docs/fullstack/image-workflow.md +12 -3
  17. package/package.json +1 -1
  18. package/vona/packages-vona/vona/package.json +1 -1
  19. package/vona/pnpm-lock.yaml +23 -23
  20. package/vona/src/suite/a-home/modules/home-user/src/controller/passport.ts +7 -7
  21. package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +30 -4
  22. package/vona/src/suite/a-training/modules/training-record/src/bean/fileScene.dossierFile.ts +1 -1
  23. package/vona/src/suite/a-training/modules/training-record/src/bean/imageScene.sceneImage.ts +1 -0
  24. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +8 -6
  25. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +8 -6
  26. package/vona/src/suite/a-training/modules/training-record/src/index.ts +0 -1
  27. package/vona/src/suite/a-training/modules/training-record/src/lib/index.ts +0 -1
  28. package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +10 -12
  29. package/vona/src/suite/a-training/modules/training-student/src/bean/imageScene.studentImage.ts +1 -0
  30. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +9 -10
  31. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +2 -2
  32. package/vona/src/suite-vendor/a-file/modules/a-file/package.json +3 -2
  33. package/vona/src/suite-vendor/a-file/modules/a-file/src/.metadata/index.ts +155 -35
  34. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.file.ts +283 -54
  35. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/bean.fileUploadPolicy.ts +46 -63
  36. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.index.ts +12 -0
  37. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.redlock.ts +1 -1
  38. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/meta.version.ts +3 -0
  39. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/schedule.fileDraftPrune.ts +29 -0
  40. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/serializerTransform.resolveView.ts +45 -0
  41. package/vona/src/suite-vendor/a-file/modules/a-file/src/bean/serializerTransform.resolveViews.ts +45 -0
  42. package/vona/src/suite-vendor/a-file/modules/a-file/src/config/config.ts +6 -0
  43. package/vona/src/suite-vendor/a-file/modules/a-file/src/controller/file.ts +64 -56
  44. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadFinalizeRequest.ts +13 -0
  45. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadFinalizeResponse.ts +10 -0
  46. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadRequest.ts +0 -3
  47. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDirectUploadResponse.ts +2 -14
  48. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileDownloadRequest.ts +3 -0
  49. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadPolicyResponse.ts +3 -0
  50. package/vona/src/suite-vendor/a-file/modules/a-file/src/dto/fileUploadResponse.ts +0 -25
  51. 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
  52. package/vona/src/suite-vendor/a-file/modules/a-file/src/entity/file.ts +10 -0
  53. package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/fileUploadUrl.ts +329 -0
  54. package/vona/src/suite-vendor/a-file/modules/a-file/src/lib/index.ts +1 -0
  55. package/vona/src/suite-vendor/a-file/modules/a-file/src/types/file.ts +51 -10
  56. package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileProvider.ts +8 -3
  57. package/vona/src/suite-vendor/a-file/modules/a-file/src/types/fileScene.ts +1 -1
  58. package/vona/src/suite-vendor/a-file/modules/file-cloudflare/package.json +1 -1
  59. package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/bean/fileProvider.cloudflare.ts +12 -4
  60. package/vona/src/suite-vendor/a-file/modules/file-cloudflare/src/service/fileCloudflare.ts +52 -18
  61. package/vona/src/suite-vendor/a-file/modules/file-native/package.json +1 -1
  62. package/vona/src/suite-vendor/a-file/modules/file-native/src/bean/fileProvider.native.ts +5 -5
  63. package/vona/src/suite-vendor/a-file/modules/file-native/src/service/fileNative.ts +7 -8
  64. package/vona/src/suite-vendor/a-file/package.json +4 -4
  65. package/vona/src/suite-vendor/a-image/modules/a-image/package.json +1 -1
  66. package/vona/src/suite-vendor/a-image/modules/a-image/src/.metadata/index.ts +16 -19
  67. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.image.ts +99 -74
  68. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/bean.imageUploadPolicy.ts +28 -68
  69. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/meta.version.ts +1 -1
  70. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveView.ts +3 -0
  71. package/vona/src/suite-vendor/a-image/modules/a-image/src/bean/serializerTransform.resolveViews.ts +3 -0
  72. package/vona/src/suite-vendor/a-image/modules/a-image/src/config/config.ts +4 -0
  73. package/vona/src/suite-vendor/a-image/modules/a-image/src/controller/image.ts +78 -34
  74. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDeliveryRequest.ts +3 -0
  75. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadRequest.ts +0 -3
  76. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageDirectUploadResponse.ts +1 -27
  77. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadPolicyResponse.ts +6 -0
  78. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadResponse.ts +2 -36
  79. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadUrlRequest.ts +0 -3
  80. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageView.ts +4 -27
  81. package/vona/src/suite-vendor/a-image/modules/a-image/src/entity/image.ts +1 -1
  82. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/image.ts +36 -29
  83. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageProvider.ts +4 -4
  84. package/vona/src/suite-vendor/a-image/modules/a-image/src/types/imageScene.ts +1 -0
  85. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/package.json +1 -1
  86. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/bean/imageProvider.cloudflare.ts +8 -11
  87. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/lib/cloudflareImageUrl.ts +4 -16
  88. package/vona/src/suite-vendor/a-image/modules/image-cloudflare/src/service/imageCloudflare.ts +17 -16
  89. package/vona/src/suite-vendor/a-image/modules/image-native/package.json +2 -6
  90. package/vona/src/suite-vendor/a-image/modules/image-native/src/.metadata/index.ts +0 -37
  91. package/vona/src/suite-vendor/a-image/modules/image-native/src/bean/imageProvider.native.ts +13 -36
  92. package/vona/src/suite-vendor/a-image/modules/image-native/src/service/imageNative.ts +100 -113
  93. package/vona/src/suite-vendor/a-image/package.json +1 -1
  94. package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +1 -1
  95. package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/config/config.ts +3 -1
  96. package/vona/src/suite-vendor/a-vona/modules/a-jwt/src/service/jwtClient.ts +9 -4
  97. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +1 -1
  98. package/vona/src/suite-vendor/a-vona/modules/a-upload/src/bean/interceptor.upload.ts +113 -64
  99. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  100. package/zova/packages-zova/zova/package.json +2 -2
  101. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/schemas.ts +50 -12
  102. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/types.ts +610 -114
  103. package/zova/src/suite/a-home/modules/home-passport/src/model/passport.ts +51 -2
  104. package/zova/src/suite/a-home/modules/home-passport/src/monkey.ts +17 -3
  105. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +50 -12
  106. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +610 -114
  107. package/zova/src/suite/cabloy-basic/modules/basic-file/src/.metadata/index.ts +16 -12
  108. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/file.ts +25 -25
  109. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/schemas.ts +18 -24
  110. package/zova/src/suite/cabloy-basic/modules/basic-file/src/api/openapi/types.ts +228 -291
  111. package/zova/src/suite/cabloy-basic/modules/basic-file/src/apiSchema/file.ts +5 -5
  112. package/zova/src/suite/cabloy-basic/modules/basic-file/src/bean/tableCell.file.tsx +23 -5
  113. package/zova/src/suite/cabloy-basic/modules/basic-file/src/component/formFieldFile/controller.tsx +72 -43
  114. package/zova/src/suite/cabloy-basic/modules/basic-file/src/lib/file.ts +22 -4
  115. package/zova/src/suite/cabloy-basic/modules/basic-image/src/.metadata/index.ts +16 -42
  116. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/image.ts +5 -25
  117. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/schemas.ts +10 -24
  118. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/openapi/types.ts +216 -333
  119. package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/image.ts +0 -5
  120. package/zova/src/suite/cabloy-basic/modules/basic-image/src/bean/tableCell.image.tsx +38 -12
  121. package/zova/src/suite/cabloy-basic/modules/basic-image/src/component/formFieldImage/controller.tsx +79 -32
  122. package/zova/src/suite/cabloy-basic/modules/basic-image/src/lib/preview.ts +22 -4
  123. package/zova/src/suite/cabloy-basic/modules/basic-image/src/types/image.ts +3 -4
  124. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +1 -1
  125. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useState.ts +6 -6
  126. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useStateGeneral.ts +5 -5
  127. package/zova/src/suite-vendor/a-zova/modules/a-model/src/lib/utils.ts +29 -1
  128. package/zova/src/suite-vendor/a-zova/modules/a-model/src/monkey.ts +11 -2
  129. package/zova/src/suite-vendor/a-zova/modules/a-model/src/types/query.ts +3 -3
  130. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +1 -1
  131. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/src/model/tabs.ts +4 -4
  132. package/zova/src/suite-vendor/a-zova/package.json +3 -3
  133. package/vona/src/suite/a-training/modules/training-record/src/lib/resolveDossierFiles.ts +0 -34
  134. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenRequest.ts +0 -24
  135. package/vona/src/suite-vendor/a-image/modules/a-image/src/dto/imageUploadTokenResponse.ts +0 -16
  136. package/vona/src/suite-vendor/a-image/modules/image-native/src/controller/image.ts +0 -57
  137. package/zova/src/suite/cabloy-basic/modules/basic-image/src/api/imageNativeImage.ts +0 -31
  138. package/zova/src/suite/cabloy-basic/modules/basic-image/src/apiSchema/imageNativeImage.ts +0 -13
@@ -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.132
505
- version: 5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
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.31
532
- version: 5.1.31(vue@3.5.39(typescript@5.9.3))
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.132
577
- version: 5.1.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
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.31
604
- version: 5.1.31(vue@3.5.39(typescript@5.9.3))
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.4
1520
+ specifier: ^5.0.5
1521
1521
  version: link:modules/a-file
1522
1522
  vona-module-file-cloudflare:
1523
- specifier: ^5.0.3
1523
+ specifier: ^5.0.4
1524
1524
  version: link:modules/file-cloudflare
1525
1525
  vona-module-file-native:
1526
- specifier: ^5.0.3
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.4
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.31:
7997
- resolution: {integrity: sha512-/6MV5xSklEkain5t0vsZ37ImyIihutCu7ymytq5RFG0QbeKtbSAI/IB6TS2mfkjLkiy97SmDJbuiLGso7Cg/Gw==}
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.131:
8036
- resolution: {integrity: sha512-NRPt3ahLwHg+rLuA2VXRbEmrg/bTdgwdQmU9C8nj9R0+E1f0ehbbsUWJFQFN6hJNco5+rDDSDfBlvejf4z6L1w==}
8035
+ zova-suite-a-zova@5.1.132:
8036
+ resolution: {integrity: sha512-bHyim0stshLyjEvehW8cUL0Bf/pR/sU43Dpada2g2ieGH1p34EzyLeaWimhId++sO9H3xErVX6aQXe0Xf6pELA==}
8037
8037
 
8038
- zova@5.1.132:
8039
- resolution: {integrity: sha512-lQK1VRnwthDx0qayS7kdElyfAmvPEhlt6sk/2jK5mTbqojsjuDNkrEa9Ck2Q78fag800U6pDwV83o6CRbSUTeA==}
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.31(vue@3.5.39(typescript@5.9.3)):
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.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
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.31(vue@3.5.39(typescript@5.9.3))
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.132(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
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.131(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
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 {}
@@ -2,6 +2,7 @@ import { BeanBase } from 'vona';
2
2
  import { ImageScene } from 'vona-module-a-image';
3
3
 
4
4
  @ImageScene({
5
+ public: false,
5
6
  upload: {
6
7
  maxSize: 2 * 1024 * 1024,
7
8
  mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
@@ -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-serialization:custom', {
47
- custom: resolveDossierFiles,
46
+ v.serializerTransform('a-file:resolveViews', {
47
+ fieldName: 'dossierFileIds',
48
+ fileScene: 'training-record:dossierFile',
49
+ deliveryOptions: { audience: true },
48
50
  }),
49
- v.array(DtoRecordDossierFileView),
51
+ v.array(DtoFileView),
50
52
  )
51
- dossierFiles?: DtoRecordDossierFileView[];
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-serialization:custom', {
59
- custom: resolveDossierFiles,
58
+ v.serializerTransform('a-file:resolveViews', {
59
+ fieldName: 'dossierFileIds',
60
+ fileScene: 'training-record:dossierFile',
61
+ deliveryOptions: { audience: true },
60
62
  }),
61
- v.array(DtoRecordDossierFileView),
63
+ v.array(DtoFileView),
62
64
  )
63
- dossierFiles?: DtoRecordDossierFileView[];
65
+ dossierFiles?: DtoFileView[];
64
66
 
65
67
  @Api.field(ZovaRender.visible(false), v.optional(), v.array(DtoDetailRecordSubjectResItem))
66
68
  _trainingRecordSubjects?: DtoDetailRecordSubjectResItem[];
@@ -1,6 +1,5 @@
1
1
  export * from './bean/fileScene.dossierFile.ts';
2
2
  export * from './bean/imageScene.sceneImage.ts';
3
- export * from './dto/recordDossierFileView.ts';
4
3
  export * from './lib/index.ts';
5
4
  export * from './.metadata/locales.ts';
6
5
  export * from './.metadata/index.ts';
@@ -1,3 +1,2 @@
1
1
  export * from './onEffectForAverageScore.tsx';
2
2
  export * from './onEffectForTrainingRecordSubjects.tsx';
3
- export * from './resolveDossierFiles.ts';
@@ -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?.meta?.category, 'attendanceSheet');
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 downloadResponse = await fetch(recordDossierFile.downloadUrl);
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);
@@ -2,6 +2,7 @@ import { BeanBase } from 'vona';
2
2
  import { ImageScene } from 'vona-module-a-image';
3
3
 
4
4
  @ImageScene({
5
+ public: true,
5
6
  upload: {
6
7
  maxSize: 2 * 1024 * 1024,
7
8
  mimeTypes: ['image/png', 'image/jpeg', 'image/webp'],
@@ -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-serialization:custom', {
63
- custom: resolveDossierFiles,
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(DtoRecordDossierFileView)),
64
+ v.array($Class.partial(DtoFileView)),
66
65
  )
67
- dossierFiles?: Partial<DtoRecordDossierFileView>[];
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.4",
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": {