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
@@ -1,57 +0,0 @@
1
- import type { IUploadFile } from 'vona-module-a-upload';
2
- import type { IDecoratorControllerOptions } from 'vona-module-a-web';
3
-
4
- import fse from 'fs-extra';
5
- import { BeanBase } from 'vona';
6
- import { Core } from 'vona-module-a-core';
7
- import { Passport } from 'vona-module-a-user';
8
- import { Arg, Controller, Web } from 'vona-module-a-web';
9
-
10
- export interface IControllerOptionsImage extends IDecoratorControllerOptions {}
11
-
12
- @Controller<IControllerOptionsImage>({ path: 'image-native' })
13
- export class ControllerImage extends BeanBase {
14
- @Web.post('direct-upload/:resourceId')
15
- @Passport.public()
16
- @Core.fileUpload()
17
- async directUpload(
18
- @Arg.param('resourceId') resourceId: string,
19
- @Arg.query('token') token: string,
20
- @Arg.file('image') file: IUploadFile,
21
- ) {
22
- const payload = await this.bean.imageUploadPolicy.verifyDirectUploadToken(
23
- token,
24
- this.ctx.route.routePathRaw,
25
- );
26
- if (payload.resourceId !== resourceId) {
27
- return this.app.throw(401);
28
- }
29
- const modelImage = this.app.bean._getBean<any>('a-image.model.image' as never);
30
- const image = await modelImage.get({
31
- providerName: 'image-native:native',
32
- resourceId,
33
- });
34
- if (!image || image.status !== 'draft') {
35
- return this.app.throw(403, `image is not draft: ${resourceId}`);
36
- }
37
- if (!image.imageScene) {
38
- throw new Error(`image scene missing: ${resourceId}`);
39
- }
40
- const stat = await fse.stat(file.file);
41
- const policy = await this.bean.imageUploadPolicy.resolveUploadPolicy({
42
- imageScene: image.imageScene as never,
43
- size: Number(stat.size),
44
- mimeType: file.info.mimeType,
45
- });
46
- await this.bean.imageUploadPolicy.validateUploadFile(
47
- {
48
- file: file.file,
49
- filename: file.info.filename,
50
- mimeType: file.info.mimeType,
51
- },
52
- policy,
53
- );
54
- await this.scope.service.imageNative.uploadDirectFile(image, file);
55
- return { ok: true };
56
- }
57
- }
@@ -1,31 +0,0 @@
1
- import type { IApiActionOptions } from 'zova-module-a-api';
2
-
3
- import { Api, BeanApiBase } from 'zova-module-a-api';
4
-
5
- import type { paths } from './openapi/index.js';
6
-
7
- import { OpenApiBaseURL } from './openapi/index.js';
8
-
9
- /** ImageNativeImage_directUpload */
10
- export const ApiApiImageNativeImagedirectUploadPath =
11
- '/api/image/native/image-native/direct-upload/{resourceId}';
12
- export type ApiApiImageNativeImagedirectUploadPath =
13
- '/api/image/native/image-native/direct-upload/{resourceId}';
14
- export type ApiApiImageNativeImagedirectUploadMethod = 'post';
15
- export type ApiApiImageNativeImagedirectUploadRequestBody = {
16
- /** Format: binary */
17
- image: Blob;
18
- };
19
- export type ApiApiImageNativeImagedirectUploadResponseBody =
20
- paths[ApiApiImageNativeImagedirectUploadPath][ApiApiImageNativeImagedirectUploadMethod]['responses']['200']['content']['application/json']['data'];
21
-
22
- @Api()
23
- export class ApiImageNativeImage extends BeanApiBase {
24
- directUpload(body: ApiApiImageNativeImagedirectUploadRequestBody, options?: IApiActionOptions) {
25
- return this.$fetch.post<any, ApiApiImageNativeImagedirectUploadResponseBody>(
26
- ApiApiImageNativeImagedirectUploadPath,
27
- this.$formData(body),
28
- this.$configPrepare(OpenApiBaseURL(this.sys), options),
29
- );
30
- }
31
- }
@@ -1,13 +0,0 @@
1
- import type { IApiSchemaOptions } from 'zova-module-a-api';
2
-
3
- import { BeanBase } from 'zova';
4
- import { ApiSchema } from 'zova-module-a-api';
5
-
6
- import { ApiApiImageNativeImagedirectUploadPath } from '../api/imageNativeImage.js';
7
-
8
- @ApiSchema()
9
- export class ApiSchemaImageNativeImage extends BeanBase {
10
- directUpload(options?: IApiSchemaOptions) {
11
- return this.$sdk.createApiSchemas(ApiApiImageNativeImagedirectUploadPath, 'post', options);
12
- }
13
- }