cabloy 5.1.125 → 5.1.126

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 (104) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +1 -1
  3. package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +6 -0
  4. package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +13 -4
  5. package/.claude/skills/cabloy-workflow/SKILL.md +4 -2
  6. package/.claude/skills/cabloy-workflow/evals/evals.json +14 -2
  7. package/.claude/skills/cabloy-worktree-environment/SKILL.md +206 -0
  8. package/.claude/skills/cabloy-worktree-environment/evals/evals.json +77 -0
  9. package/.github/workflows/vona-test-pg.yml +3 -0
  10. package/.github/workflows/vona-test-sqlite3.yml +3 -0
  11. package/CHANGELOG.md +15 -0
  12. package/CLAUDE.md +1 -1
  13. package/cabloy-docs/.vitepress/config.mjs +1 -0
  14. package/cabloy-docs/backend/backend-contract-emission-specimen.md +2 -2
  15. package/cabloy-docs/backend/dto-guide.md +10 -7
  16. package/cabloy-docs/backend/dto-infer-generation.md +127 -7
  17. package/cabloy-docs/backend/foundation.md +1 -1
  18. package/cabloy-docs/backend/introduction.md +1 -0
  19. package/cabloy-docs/backend/module-dependencies.md +104 -0
  20. package/cabloy-docs/backend/serialization-guide.md +6 -0
  21. package/cabloy-docs/fullstack/parallel-worktree-environment.md +72 -34
  22. package/cabloy-docs/fullstack/suites-and-modules.md +1 -0
  23. package/cabloy-docs/reference/package-map.md +1 -0
  24. package/e2e/specs/a-commerce/commerce.spec.ts +89 -0
  25. package/package.json +2 -1
  26. package/scripts/init.ts +7 -12
  27. package/scripts/initAppName.test.ts +72 -0
  28. package/scripts/initAppName.ts +50 -0
  29. package/vona/packages-vona/vona/package.json +1 -1
  30. package/vona/pnpm-lock.yaml +27 -147
  31. package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressMineCreate.tsx +6 -27
  32. package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressMineItem.tsx +6 -31
  33. package/vona/src/suite/a-commerce/modules/commerce-member/src/dto/addressMineUpdate.tsx +6 -2
  34. package/vona/src/suite/a-commerce/modules/commerce-member/src/lib/addressMine.ts +16 -0
  35. package/vona/src/suite/a-commerce/modules/commerce-member/src/service/address.ts +4 -17
  36. package/vona/src/suite/a-commerce/modules/commerce-member/test/addressOwnership.test.ts +63 -19
  37. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +2 -1
  38. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/payScene.commerceOrder.ts +11 -2
  39. package/vona/src/suite/a-commerce/modules/commerce-payment/src/service/commercePayScene.ts +26 -0
  40. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +19 -2
  41. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/en-us.ts +5 -2
  42. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/config/locale/zh-cn.ts +5 -2
  43. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateCreate.tsx +26 -35
  44. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/dto/couponTemplateUpdate.tsx +6 -1
  45. package/vona/src/suite/a-commerce/modules/commerce-promotion/src/entity/couponTemplate.tsx +40 -4
  46. package/vona/src/suite/a-commerce/modules/commerce-promotion/test/couponTemplateFormLayout.test.ts +85 -0
  47. package/vona/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +1 -1
  48. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/order.ts +3 -5
  49. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/orderSummary.tsx +7 -40
  50. package/vona/src/suite/a-commerce/modules/commerce-trade/src/dto/shipmentView.tsx +6 -15
  51. package/vona/src/suite/a-commerce/modules/commerce-trade/src/lib/order.ts +9 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +121 -11
  53. package/vona/src/suite/a-commerce/modules/commerce-trade/test/order.test.ts +25 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +19 -2
  55. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectResItem.tsx +6 -1
  56. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +3 -1
  57. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +4 -1
  58. package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +45 -0
  59. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordResItem.tsx +6 -1
  60. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +5 -23
  61. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +37 -5
  62. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  63. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/index.ts +29 -0
  64. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.index.ts +3 -0
  65. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.redlock.ts +3 -1
  66. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.version.ts +7 -0
  67. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/queue.outboxDispatch.ts +9 -4
  68. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/schedule.providerOperationDispatch.ts +11 -0
  69. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/outboxEvent.tsx +11 -4
  70. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperation.tsx +12 -0
  71. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/webhookInbox.tsx +6 -0
  72. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/outbox.ts +12 -5
  73. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentSession.ts +1 -37
  74. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +355 -1
  75. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/refundOperation.ts +226 -0
  76. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/webhook.ts +148 -50
  77. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payScene.ts +2 -1
  78. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  79. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/.metadata/index.ts +39 -22
  80. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/bean/payProvider.mock.ts +42 -13
  81. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/controller/mockPayment.ts +11 -0
  82. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/dto/mockRefundComplete.tsx +13 -0
  83. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/dto/mockRefundReceipt.tsx +16 -0
  84. package/vona/src/suite-vendor/a-pay/modules/pay-mock/src/service/payMock.ts +56 -0
  85. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +2 -1
  86. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/bean/payProvider.paypal.ts +117 -8
  87. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +1 -1
  88. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  89. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
  90. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +5 -5
  91. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  92. package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/schemas.ts +54 -12
  93. package/zova/src/suite/a-commerce/modules/commerce-member/src/api/openapi/types.ts +625 -64
  94. package/zova/src/suite/a-commerce/modules/commerce-promotion/src/api/openapi/types.ts +55 -15
  95. package/zova/src/suite/a-commerce/modules/commerce-trade/cli/openapi.config.ts +1 -1
  96. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/commerceTradeOrder.ts +15 -17
  97. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/schemas.ts +12 -8
  98. package/zova/src/suite/a-commerce/modules/commerce-trade/src/api/openapi/types.ts +111 -26
  99. package/zova/src/suite/a-commerce/modules/commerce-trade/src/apiSchema/commerceTradeOrder.ts +3 -3
  100. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +1 -8
  101. package/zova/src/suite/a-commerce/modules/commerce-trade/src/model/order.ts +5 -9
  102. package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +1 -1
  103. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +301 -17
  104. package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +5461 -1788
@@ -0,0 +1,72 @@
1
+ import assert from 'node:assert/strict';
2
+ import { execFileSync } from 'node:child_process';
3
+ import { mkdtempSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
4
+ import { tmpdir } from 'node:os';
5
+ import { basename, resolve } from 'node:path';
6
+ import test from 'node:test';
7
+
8
+ import { isLinkedGitWorktree, updateBaseAppName } from './initAppName.ts';
9
+
10
+ function git(cwd: string, args: string[]): void {
11
+ execFileSync('git', args, { cwd, stdio: 'ignore' });
12
+ }
13
+
14
+ function writeBaseEnvFiles(rootDir: string, appName: string): void {
15
+ for (const relativePath of ['vona/env/.env', 'zova/env/.env']) {
16
+ const filePath = resolve(rootDir, relativePath);
17
+ mkdirSync(resolve(filePath, '..'), { recursive: true });
18
+ writeFileSync(filePath, `APP_NAME = ${appName}\nOTHER_VALUE = preserved\n`);
19
+ }
20
+ }
21
+
22
+ function readBaseEnvFiles(rootDir: string): string[] {
23
+ return ['vona/env/.env', 'zova/env/.env'].map(relativePath =>
24
+ readFileSync(resolve(rootDir, relativePath), 'utf-8'),
25
+ );
26
+ }
27
+
28
+ test('classifies project roots before updating base APP_NAME files', { concurrency: false }, () => {
29
+ const tempDir = mkdtempSync(resolve(tmpdir(), 'cabloy-init-app-name-'));
30
+ const primaryDir = resolve(tempDir, 'primary');
31
+ const linkedDir = resolve(tempDir, 'linked');
32
+ try {
33
+ mkdirSync(primaryDir);
34
+ git(primaryDir, ['init']);
35
+ git(primaryDir, ['config', 'user.email', 'test@example.com']);
36
+ git(primaryDir, ['config', 'user.name', 'Cabloy Test']);
37
+ writeBaseEnvFiles(primaryDir, 'original');
38
+ git(primaryDir, ['add', '.']);
39
+ git(primaryDir, ['commit', '-m', 'initial fixture']);
40
+
41
+ assert.equal(isLinkedGitWorktree(primaryDir), false);
42
+ assert.equal(updateBaseAppName(primaryDir), true);
43
+ for (const content of readBaseEnvFiles(primaryDir)) {
44
+ assert.equal(content, `APP_NAME = ${basename(primaryDir)}\nOTHER_VALUE = preserved\n`);
45
+ }
46
+
47
+ git(primaryDir, ['checkout', '--', '.']);
48
+ git(primaryDir, ['worktree', 'add', '--detach', linkedDir, 'HEAD']);
49
+ const linkedBefore = readBaseEnvFiles(linkedDir);
50
+ assert.equal(isLinkedGitWorktree(linkedDir), true);
51
+ assert.equal(updateBaseAppName(linkedDir), false);
52
+ assert.deepEqual(readBaseEnvFiles(linkedDir), linkedBefore);
53
+
54
+ const nestedProjectDir = resolve(linkedDir, 'created-project');
55
+ writeBaseEnvFiles(nestedProjectDir, 'original');
56
+ assert.equal(isLinkedGitWorktree(nestedProjectDir), false);
57
+ assert.equal(updateBaseAppName(nestedProjectDir), true);
58
+ for (const content of readBaseEnvFiles(nestedProjectDir)) {
59
+ assert.equal(content, `APP_NAME = ${basename(nestedProjectDir)}\nOTHER_VALUE = preserved\n`);
60
+ }
61
+
62
+ const nonGitProjectDir = resolve(tempDir, 'non-git-project');
63
+ writeBaseEnvFiles(nonGitProjectDir, 'original');
64
+ assert.equal(isLinkedGitWorktree(nonGitProjectDir), false);
65
+ assert.equal(updateBaseAppName(nonGitProjectDir), true);
66
+ for (const content of readBaseEnvFiles(nonGitProjectDir)) {
67
+ assert.equal(content, `APP_NAME = ${basename(nonGitProjectDir)}\nOTHER_VALUE = preserved\n`);
68
+ }
69
+ } finally {
70
+ rmSync(tempDir, { recursive: true, force: true });
71
+ }
72
+ });
@@ -0,0 +1,50 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { existsSync, readFileSync, realpathSync, writeFileSync } from 'node:fs';
3
+ import { basename, resolve } from 'node:path';
4
+
5
+ function gitOutput(rootDir: string, args: string[]): string {
6
+ return execFileSync('git', args, {
7
+ cwd: rootDir,
8
+ encoding: 'utf-8',
9
+ stdio: ['ignore', 'pipe', 'ignore'],
10
+ }).trim();
11
+ }
12
+
13
+ export function isLinkedGitWorktree(rootDir: string): boolean {
14
+ const projectRoot = realpathSync(resolve(rootDir));
15
+ try {
16
+ const gitRoot = realpathSync(
17
+ resolve(gitOutput(projectRoot, ['rev-parse', '--path-format=absolute', '--show-toplevel'])),
18
+ );
19
+ if (gitRoot !== projectRoot) return false;
20
+
21
+ const gitDir = realpathSync(
22
+ resolve(gitOutput(projectRoot, ['rev-parse', '--path-format=absolute', '--git-dir'])),
23
+ );
24
+ const gitCommonDir = realpathSync(
25
+ resolve(gitOutput(projectRoot, ['rev-parse', '--path-format=absolute', '--git-common-dir'])),
26
+ );
27
+ return gitDir !== gitCommonDir;
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+
33
+ export function updateBaseAppName(rootDir: string): boolean {
34
+ if (isLinkedGitWorktree(rootDir)) return false;
35
+
36
+ const projectRoot = resolve(rootDir);
37
+ const projectName = basename(projectRoot);
38
+ const envFiles = [resolve(projectRoot, 'vona/env/.env'), resolve(projectRoot, 'zova/env/.env')];
39
+ for (const filePath of envFiles) {
40
+ if (!existsSync(filePath)) continue;
41
+ const content = readFileSync(filePath, 'utf-8').replace(
42
+ /^APP_NAME.*/m,
43
+ `APP_NAME = ${projectName}`,
44
+ );
45
+ writeFileSync(filePath, content);
46
+ // eslint-disable-next-line
47
+ console.log(`[init] Set APP_NAME = ${projectName} in ${filePath}`);
48
+ }
49
+ return true;
50
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona",
3
- "version": "5.1.82",
3
+ "version": "5.1.83",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "Vona is an intuitive, elegant and powerful Node.js framework for rapidly developing enterprise applications of any size",
6
6
  "keywords": [
@@ -717,11 +717,11 @@ importers:
717
717
  specifier: npm:@cabloy/zod@4.3.8
718
718
  version: '@cabloy/zod@4.3.8'
719
719
  zova:
720
- specifier: ^5.1.142
721
- version: 5.1.142(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
720
+ specifier: ^5.1.144
721
+ version: 5.1.144(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
722
722
  zova-jsx:
723
- specifier: ^1.1.79
724
- version: 1.1.79(typescript@5.9.3)
723
+ specifier: ^1.1.81
724
+ version: 1.1.81(typescript@5.9.3)
725
725
  zova-module-a-api:
726
726
  specifier: ^5.1.21
727
727
  version: 5.1.21
@@ -750,8 +750,8 @@ importers:
750
750
  specifier: ^5.1.47
751
751
  version: 5.1.47
752
752
  zova-module-a-pay:
753
- specifier: ^5.0.0
754
- version: 5.0.0
753
+ specifier: ^5.0.2
754
+ version: 5.0.2
755
755
  zova-module-a-router:
756
756
  specifier: ^5.1.31
757
757
  version: 5.1.31
@@ -768,8 +768,8 @@ importers:
768
768
  specifier: ^5.1.37
769
769
  version: 5.1.37(vue@3.5.39(typescript@5.9.3))
770
770
  zova-module-pay-mock:
771
- specifier: ^5.0.0
772
- version: 5.0.0
771
+ specifier: ^5.0.2
772
+ version: 5.0.2
773
773
  zova-module-rest-resource:
774
774
  specifier: ^5.1.42
775
775
  version: 5.1.42
@@ -795,11 +795,11 @@ importers:
795
795
  specifier: npm:@cabloy/zod@4.3.8
796
796
  version: '@cabloy/zod@4.3.8'
797
797
  zova:
798
- specifier: ^5.1.142
799
- version: 5.1.142(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
798
+ specifier: ^5.1.144
799
+ version: 5.1.144(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
800
800
  zova-jsx:
801
- specifier: ^1.1.79
802
- version: 1.1.79(typescript@5.9.3)
801
+ specifier: ^1.1.81
802
+ version: 1.1.81(typescript@5.9.3)
803
803
  zova-module-a-api:
804
804
  specifier: ^5.1.21
805
805
  version: 5.1.21
@@ -828,8 +828,8 @@ importers:
828
828
  specifier: ^5.1.47
829
829
  version: 5.1.47
830
830
  zova-module-a-pay:
831
- specifier: ^5.0.0
832
- version: 5.0.0
831
+ specifier: ^5.0.2
832
+ version: 5.0.2
833
833
  zova-module-a-router:
834
834
  specifier: ^5.1.31
835
835
  version: 5.1.31
@@ -846,8 +846,8 @@ importers:
846
846
  specifier: ^5.1.37
847
847
  version: 5.1.37(vue@3.5.39(typescript@5.9.3))
848
848
  zova-module-pay-mock:
849
- specifier: ^5.0.0
850
- version: 5.0.0
849
+ specifier: ^5.0.2
850
+ version: 5.0.2
851
851
  zova-module-rest-resource:
852
852
  specifier: ^5.1.42
853
853
  version: 5.1.42
@@ -1834,16 +1834,16 @@ importers:
1834
1834
  src/suite-vendor/a-pay:
1835
1835
  dependencies:
1836
1836
  vona-module-a-pay:
1837
- specifier: ^5.0.1
1837
+ specifier: ^5.0.2
1838
1838
  version: link:modules/a-pay
1839
1839
  vona-module-pay-mock:
1840
- specifier: ^5.0.1
1840
+ specifier: ^5.0.2
1841
1841
  version: link:modules/pay-mock
1842
1842
  vona-module-pay-paypal:
1843
- specifier: ^5.0.1
1843
+ specifier: ^5.0.2
1844
1844
  version: link:modules/pay-paypal
1845
1845
  vona-module-pay-stripe:
1846
- specifier: ^5.0.1
1846
+ specifier: ^5.0.2
1847
1847
  version: link:modules/pay-stripe
1848
1848
 
1849
1849
  src/suite-vendor/a-pay/modules/a-pay:
@@ -1870,6 +1870,9 @@ importers:
1870
1870
 
1871
1871
  src/suite-vendor/a-pay/modules/pay-paypal:
1872
1872
  dependencies:
1873
+ '@cabloy/paypal-server-sdk':
1874
+ specifier: 2.2.0
1875
+ version: 2.2.0(supports-color@5.5.0)
1873
1876
  vona-module-a-pay:
1874
1877
  specifier: workspace:*
1875
1878
  version: link:../a-pay
@@ -1919,7 +1922,7 @@ importers:
1919
1922
  specifier: ^5.0.8
1920
1923
  version: link:modules/test-file
1921
1924
  vona-module-test-pay:
1922
- specifier: ^5.0.0
1925
+ specifier: ^5.0.1
1923
1926
  version: link:modules/test-pay
1924
1927
 
1925
1928
  src/suite-vendor/a-test/modules/test-auth:
@@ -3077,6 +3080,9 @@ importers:
3077
3080
  vona-module-a-pay:
3078
3081
  specifier: workspace:*
3079
3082
  version: link:../../../../suite-vendor/a-pay/modules/a-pay
3083
+ vona-module-pay-paypal:
3084
+ specifier: workspace:*
3085
+ version: link:../../../../suite-vendor/a-pay/modules/pay-paypal
3080
3086
  devDependencies:
3081
3087
  clean-package:
3082
3088
  specifier: ^2.2.0
@@ -8556,15 +8562,9 @@ packages:
8556
8562
  peerDependencies:
8557
8563
  zod: ^3.25.28 || ^4
8558
8564
 
8559
- zova-core@5.1.79:
8560
- resolution: {integrity: sha512-q04JWAjwa5x0py9/FCFPX9I8cNA4zzZ/Z+8mm2mVsRBMqDFcafwVqNumOAkZ+DuA10b4YIoncyQKYz5PhhmBUw==}
8561
-
8562
8565
  zova-core@5.1.81:
8563
8566
  resolution: {integrity: sha512-gLmLWXpd9xNmc+fXx33QEgRZ2ZsNjRlVWDC1HEQLLnq3ZCakDf87qXhfdk+JH5csS2BjGAdckfmbiLqGL15o1Q==}
8564
8567
 
8565
- zova-jsx@1.1.79:
8566
- resolution: {integrity: sha512-iFp9UpW/3Cbaq0H25xyR04LYyaqB2wlAGOL1dEL7OyuIzHI0IHcBwfZRbRGy7ewgDVHit2ULG03kO1sSjjPuWQ==}
8567
-
8568
8568
  zova-jsx@1.1.81:
8569
8569
  resolution: {integrity: sha512-WVUc4DYsVcjPfcfWgFY2vQbiK8ARIwv2K6o6Auyqvts/vSfJ7BCzD4XqCVHANVY5yJ8povdJUzpiCIAhioWRkg==}
8570
8570
 
@@ -8613,9 +8613,6 @@ packages:
8613
8613
  zova-module-a-openapi@5.1.47:
8614
8614
  resolution: {integrity: sha512-iar4YR9GGdCQ9N60yt9yV+RkiM1seKlmbhoyZqLAZ7aR5tLnw2ZL7ElamHEGO5iBtFXRU8QH8RaU+8PnnyaLkg==}
8615
8615
 
8616
- zova-module-a-pay@5.0.0:
8617
- resolution: {integrity: sha512-jt9acZZPKnkJs8t4qOBOmqO7gyOGnByujCyNsuohAYLQSXkjdTKOJqXDe6dj0KcdayHry0ZvJiaErzQJsiNbWA==}
8618
-
8619
8616
  zova-module-a-pay@5.0.2:
8620
8617
  resolution: {integrity: sha512-BOKkM7R//Kju54PhZxnyJ0O8gHnyKrwxXpAAr85wJurHQAl3NIsdRwINj+i+hIe3Btc+UJmi/H1kpg0d3YuoZQ==}
8621
8618
 
@@ -8646,30 +8643,18 @@ packages:
8646
8643
  zova-module-a-zod@5.1.36:
8647
8644
  resolution: {integrity: sha512-4gEjxJBelVOA84aP2XWSNSmzQr+AYh14Ha5QCj9yZIpSnEajSgYLoyLw4dwiVcscuEw7xAAOOnWbZS9uXSpJzg==}
8648
8645
 
8649
- zova-module-a-zova@5.1.94:
8650
- resolution: {integrity: sha512-c2qbu3YiNYRSMpprPkBbZ9RaQ9KKF4Y/cEumDJaCpPoZEbJClI/WBZMrY/ZpG9Rsp/87DJ63Vkbu+iSTOh7csg==}
8651
-
8652
8646
  zova-module-a-zova@5.1.96:
8653
8647
  resolution: {integrity: sha512-lP6LgzbrSlHBqyA1QhMZ66B0DQBLcXcEcWBh3zESFnhFzbomlfABjG+cnju5ki771YhT2CuPeo3m9v01WYc3Bg==}
8654
8648
 
8655
- zova-module-pay-mock@5.0.0:
8656
- resolution: {integrity: sha512-WORyFqRNkrcGZCzLaesu4BDziQ2iOUIeRMVbwXx/Wzp2W0EpwMvqqAPqO8U3PKjvWtAw3YwTJFsXs1Qh66l4zQ==}
8657
-
8658
8649
  zova-module-pay-mock@5.0.2:
8659
8650
  resolution: {integrity: sha512-G6ld4ZZJ3crSUQ1fH+Tn2p9/05ngfJYtDtTtq7K1Xo9ei2fjbp13Jrbjh3cKR+dhWuK9Q1gwAs7xwhu7NIiTKA==}
8660
8651
 
8661
8652
  zova-module-rest-resource@5.1.42:
8662
8653
  resolution: {integrity: sha512-eMWhc4428U5Hs4BHqFJoF7yaH+bK8t71scIrCnpLbQS7M80lNkoHxY9s/Kl4i8Uo3+lVWbSbuaXWtR+zVLNqpA==}
8663
8654
 
8664
- zova-suite-a-zova@5.1.141:
8665
- resolution: {integrity: sha512-fqeynyYUL12PTZMQ1ZxryHEFcCfaQL2hLTs8MxxdbHCKDhOjNEaOTW5MGR5DzSRM7uMXNCq1crPvbYvDmmeUdg==}
8666
-
8667
8655
  zova-suite-a-zova@5.1.143:
8668
8656
  resolution: {integrity: sha512-DMaYtWO1HVu0BIeNguAYqlcOGa9MVfejDLvLqw6mOqmPSSLrvGSSC+lzYGhI/J9xQBbGRFaWbIdMhetCpuZdwg==}
8669
8657
 
8670
- zova@5.1.142:
8671
- resolution: {integrity: sha512-qvrKhrS9y4BVI2Nszre3TSvDJu5BjTo2adzAXP2qC3TeoW4IZ8njvV2ROoAPe//X6SiJ1Il60oTNSc1PnkXvWg==}
8672
-
8673
8658
  zova@5.1.144:
8674
8659
  resolution: {integrity: sha512-YEgsYl7hL635nK9134oH8GMUqHp41IAp0I+rWz27f2QCkp8QGLqvQIbrvXoFnYwJyuYmaCz/eBMMrl1y+mzs0w==}
8675
8660
 
@@ -14591,35 +14576,6 @@ snapshots:
14591
14576
  dependencies:
14592
14577
  zod: '@cabloy/zod@4.3.8'
14593
14578
 
14594
- zova-core@5.1.79(typescript@5.9.3):
14595
- dependencies:
14596
- '@cabloy/compose': link:packages-utils/compose
14597
- '@cabloy/extend': link:packages-utils/extend
14598
- '@cabloy/json5': link:packages-utils/json5
14599
- '@cabloy/localeutil': link:packages-utils/localeutil
14600
- '@cabloy/logger': 1.1.24
14601
- '@cabloy/module-info': 2.0.3
14602
- '@cabloy/utils': link:packages-utils/utils
14603
- '@cabloy/vue-compiler-sfc': 3.5.14
14604
- '@cabloy/vue-reactivity': 3.5.16
14605
- '@cabloy/vue-router': 4.4.16(vue@3.5.39(typescript@5.9.3))
14606
- '@cabloy/vue-runtime-core': 3.5.57
14607
- '@cabloy/vue-runtime-dom': 3.5.13
14608
- '@cabloy/vue-server-renderer': 3.5.18(vue@3.5.39(typescript@5.9.3))
14609
- '@cabloy/word-utils': 2.1.14
14610
- '@cabloy/zod-errors-custom': link:packages-utils/zod-errors-custom
14611
- '@cabloy/zod-openapi': link:packages-utils/zod-openapi
14612
- '@cabloy/zod-query': link:packages-utils/zod-query
14613
- '@types/js-cookie': 3.0.6
14614
- '@vue/shared': 3.5.36
14615
- deep-equal: 2.2.3
14616
- reflect-metadata: 0.2.2
14617
- vue: 3.5.39(typescript@5.9.3)
14618
- vue-plugin-render-freeze: 2.0.4(vue@3.5.39(typescript@5.9.3))
14619
- zod: '@cabloy/zod@4.3.8'
14620
- transitivePeerDependencies:
14621
- - typescript
14622
-
14623
14579
  zova-core@5.1.81(patch_hash=ff659aa5f659be32501f56841b72f148c24acf1546f79cce551586e27fcde2ce)(typescript@5.9.3):
14624
14580
  dependencies:
14625
14581
  '@cabloy/compose': link:packages-utils/compose
@@ -14649,17 +14605,6 @@ snapshots:
14649
14605
  transitivePeerDependencies:
14650
14606
  - typescript
14651
14607
 
14652
- zova-jsx@1.1.79(typescript@5.9.3):
14653
- dependencies:
14654
- '@cabloy/compose': link:packages-utils/compose
14655
- '@cabloy/utils': link:packages-utils/utils
14656
- '@cabloy/word-utils': 2.1.14
14657
- typestyle: 2.4.0
14658
- vue: 3.5.39(typescript@5.9.3)
14659
- zova-core: 5.1.79(typescript@5.9.3)
14660
- transitivePeerDependencies:
14661
- - typescript
14662
-
14663
14608
  zova-jsx@1.1.81(typescript@5.9.3):
14664
14609
  dependencies:
14665
14610
  '@cabloy/compose': link:packages-utils/compose
@@ -14730,8 +14675,6 @@ snapshots:
14730
14675
  openapi3-ts: 4.6.0
14731
14676
  typestyle: 2.4.0
14732
14677
 
14733
- zova-module-a-pay@5.0.0: {}
14734
-
14735
14678
  zova-module-a-pay@5.0.2: {}
14736
14679
 
14737
14680
  zova-module-a-router@5.1.31: {}
@@ -14773,22 +14716,6 @@ snapshots:
14773
14716
  '@cabloy/zod-query': link:packages-utils/zod-query
14774
14717
  zod: '@cabloy/zod@4.3.8'
14775
14718
 
14776
- zova-module-a-zova@5.1.94(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14777
- dependencies:
14778
- '@cabloy/compose': link:packages-utils/compose
14779
- '@cabloy/deps': link:packages-utils/deps
14780
- '@cabloy/json5': link:packages-utils/json5
14781
- '@cabloy/module-info': 2.0.3
14782
- '@cabloy/utils': link:packages-utils/utils
14783
- '@cabloy/vue-router': 4.4.16(vue@3.5.39(typescript@5.9.3))
14784
- '@cabloy/word-utils': 2.1.14
14785
- defu: 6.1.7
14786
- luxon: 3.7.2
14787
- zova-jsx: 1.1.79(typescript@5.9.3)
14788
- transitivePeerDependencies:
14789
- - typescript
14790
- - vue
14791
-
14792
14719
  zova-module-a-zova@5.1.96(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14793
14720
  dependencies:
14794
14721
  '@cabloy/compose': link:packages-utils/compose
@@ -14805,46 +14732,10 @@ snapshots:
14805
14732
  - typescript
14806
14733
  - vue
14807
14734
 
14808
- zova-module-pay-mock@5.0.0: {}
14809
-
14810
14735
  zova-module-pay-mock@5.0.2: {}
14811
14736
 
14812
14737
  zova-module-rest-resource@5.1.42: {}
14813
14738
 
14814
- zova-suite-a-zova@5.1.141(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14815
- dependencies:
14816
- zova-module-a-api: 5.1.21
14817
- zova-module-a-app: 5.1.25
14818
- zova-module-a-bean: 5.1.32
14819
- zova-module-a-behavior: 5.1.25
14820
- zova-module-a-behaviors: 5.1.21
14821
- zova-module-a-boundary: 5.1.21
14822
- zova-module-a-command: 5.1.33
14823
- zova-module-a-fetch: 5.1.24
14824
- zova-module-a-form: 5.1.46(vue@3.5.39(typescript@5.9.3))
14825
- zova-module-a-icon: 5.1.26
14826
- zova-module-a-interceptor: 5.1.29
14827
- zova-module-a-logger: 5.1.26
14828
- zova-module-a-meta: 5.1.21
14829
- zova-module-a-model: 5.1.33(vue@3.5.39(typescript@5.9.3))
14830
- zova-module-a-openapi: 5.1.47
14831
- zova-module-a-router: 5.1.31
14832
- zova-module-a-routerstack: 5.1.26
14833
- zova-module-a-routertabs: 5.1.33
14834
- zova-module-a-ssr: 5.1.32
14835
- zova-module-a-ssrhmr: 5.1.22
14836
- zova-module-a-ssrserver: 5.1.23
14837
- zova-module-a-style: 5.1.32
14838
- zova-module-a-table: 5.1.37(vue@3.5.39(typescript@5.9.3))
14839
- zova-module-a-zod: 5.1.36
14840
- zova-module-a-zova: 5.1.94(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14841
- transitivePeerDependencies:
14842
- - '@vue/composition-api'
14843
- - debug
14844
- - supports-color
14845
- - typescript
14846
- - vue
14847
-
14848
14739
  zova-suite-a-zova@5.1.143(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14849
14740
  dependencies:
14850
14741
  zova-module-a-api: 5.1.21
@@ -14879,17 +14770,6 @@ snapshots:
14879
14770
  - typescript
14880
14771
  - vue
14881
14772
 
14882
- zova@5.1.142(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14883
- dependencies:
14884
- zova-core: 5.1.79(typescript@5.9.3)
14885
- zova-suite-a-zova: 5.1.141(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
14886
- transitivePeerDependencies:
14887
- - '@vue/composition-api'
14888
- - debug
14889
- - supports-color
14890
- - typescript
14891
- - vue
14892
-
14893
14773
  zova@5.1.144(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
14894
14774
  dependencies:
14895
14775
  zova-core: 5.1.81(patch_hash=ff659aa5f659be32501f56841b72f148c24acf1546f79cce551586e27fcde2ce)(typescript@5.9.3)
@@ -1,35 +1,14 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
- import { Api, v } from 'vona-module-a-openapiutils';
3
+ import { $Dto } from 'vona-module-a-orm';
4
4
  import { Dto } from 'vona-module-a-web';
5
5
 
6
- import { $locale } from '../.metadata/locales.ts';
6
+ import { addressMineWriteColumns } from '../lib/addressMine.ts';
7
+ import { ModelAddress } from '../model/address.ts';
7
8
 
8
9
  export interface IDtoOptionsAddressMineCreate extends IDecoratorDtoOptions {}
9
10
 
10
11
  @Dto<IDtoOptionsAddressMineCreate>()
11
- export class DtoAddressMineCreate {
12
- @Api.field(v.title($locale('RecipientName')), v.required(), v.min(2), v.max(100))
13
- recipientName: string;
14
-
15
- @Api.field(v.title($locale('Phone')), v.required(), v.min(1), v.max(50))
16
- phone: string;
17
-
18
- @Api.field(v.title($locale('CountryCode')), v.required(), v.min(2), v.max(10))
19
- countryCode: string;
20
-
21
- @Api.field(v.title($locale('Region')), v.required(), v.min(1), v.max(100))
22
- region: string;
23
-
24
- @Api.field(v.title($locale('City')), v.required(), v.min(1), v.max(100))
25
- city: string;
26
-
27
- @Api.field(v.title($locale('PostalCode')), v.required(), v.min(1), v.max(30))
28
- postalCode: string;
29
-
30
- @Api.field(v.title($locale('AddressLine1')), v.required(), v.min(1), v.max(255))
31
- addressLine1: string;
32
-
33
- @Api.field(v.title($locale('AddressLine2')), v.optional(), v.max(255))
34
- addressLine2?: string;
35
- }
12
+ export class DtoAddressMineCreate extends $Dto.create(() => ModelAddress, {
13
+ columns: addressMineWriteColumns,
14
+ }) {}
@@ -1,39 +1,14 @@
1
- import type { TableIdentity } from 'table-identity';
2
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
3
2
 
4
- import { Api, v } from 'vona-module-a-openapiutils';
3
+ import { $Dto } from 'vona-module-a-orm';
5
4
  import { Dto } from 'vona-module-a-web';
6
5
 
7
- import { $locale } from '../.metadata/locales.ts';
6
+ import { addressMineReadColumns } from '../lib/addressMine.ts';
7
+ import { ModelAddress } from '../model/address.ts';
8
8
 
9
9
  export interface IDtoOptionsAddressMineItem extends IDecoratorDtoOptions {}
10
10
 
11
11
  @Dto<IDtoOptionsAddressMineItem>()
12
- export class DtoAddressMineItem {
13
- @Api.field(v.tableIdentity())
14
- id: TableIdentity;
15
-
16
- @Api.field(v.title($locale('RecipientName')), v.required(), v.min(2), v.max(100))
17
- recipientName: string;
18
-
19
- @Api.field(v.title($locale('Phone')), v.required(), v.min(1), v.max(50))
20
- phone: string;
21
-
22
- @Api.field(v.title($locale('CountryCode')), v.required(), v.min(2), v.max(10))
23
- countryCode: string;
24
-
25
- @Api.field(v.title($locale('Region')), v.required(), v.min(1), v.max(100))
26
- region: string;
27
-
28
- @Api.field(v.title($locale('City')), v.required(), v.min(1), v.max(100))
29
- city: string;
30
-
31
- @Api.field(v.title($locale('PostalCode')), v.required(), v.min(1), v.max(30))
32
- postalCode: string;
33
-
34
- @Api.field(v.title($locale('AddressLine1')), v.required(), v.min(1), v.max(255))
35
- addressLine1: string;
36
-
37
- @Api.field(v.title($locale('AddressLine2')), v.optional(), v.max(255))
38
- addressLine2?: string;
39
- }
12
+ export class DtoAddressMineItem extends $Dto.get(() => ModelAddress, {
13
+ columns: addressMineReadColumns,
14
+ }) {}
@@ -1,10 +1,14 @@
1
1
  import type { IDecoratorDtoOptions } from 'vona-module-a-web';
2
2
 
3
+ import { $Dto } from 'vona-module-a-orm';
3
4
  import { Dto } from 'vona-module-a-web';
4
5
 
5
- import { DtoAddressMineCreate } from './addressMineCreate.tsx';
6
+ import { addressMineWriteColumns } from '../lib/addressMine.ts';
7
+ import { ModelAddress } from '../model/address.ts';
6
8
 
7
9
  export interface IDtoOptionsAddressMineUpdate extends IDecoratorDtoOptions {}
8
10
 
9
11
  @Dto<IDtoOptionsAddressMineUpdate>()
10
- export class DtoAddressMineUpdate extends DtoAddressMineCreate {}
12
+ export class DtoAddressMineUpdate extends $Dto.update(() => ModelAddress, {
13
+ columns: addressMineWriteColumns,
14
+ }) {}
@@ -0,0 +1,16 @@
1
+ import type { EntityAddress } from '../entity/address.tsx';
2
+
3
+ export const addressMineWriteColumns = [
4
+ 'recipientName',
5
+ 'phone',
6
+ 'countryCode',
7
+ 'region',
8
+ 'city',
9
+ 'postalCode',
10
+ 'addressLine1',
11
+ 'addressLine2',
12
+ ] satisfies Array<keyof EntityAddress>;
13
+
14
+ export const addressMineReadColumns = ['id', ...addressMineWriteColumns] satisfies Array<
15
+ keyof EntityAddress
16
+ >;
@@ -1,5 +1,5 @@
1
1
  import type { TableIdentity } from 'table-identity';
2
- import type { IQueryParams, TypeModelColumns } from 'vona-module-a-orm';
2
+ import type { IQueryParams } from 'vona-module-a-orm';
3
3
 
4
4
  import { BeanBase } from 'vona';
5
5
  import { Service } from 'vona-module-a-bean';
@@ -10,22 +10,9 @@ import type { DtoAddressMineUpdate } from '../dto/addressMineUpdate.tsx';
10
10
  import type { DtoAddressMineView } from '../dto/addressMineView.tsx';
11
11
  import type { DtoAddressSelectRes } from '../dto/addressSelectRes.tsx';
12
12
  import type { DtoAddressView } from '../dto/addressView.tsx';
13
- import type { EntityAddress } from '../entity/address.tsx';
14
13
  import type { ModelAddress } from '../model/address.ts';
15
14
 
16
- const addressColumns: TypeModelColumns<EntityAddress> = [
17
- 'id',
18
- 'recipientName',
19
- 'phone',
20
- 'countryCode',
21
- 'region',
22
- 'city',
23
- 'postalCode',
24
- 'addressLine1',
25
- 'addressLine2',
26
- 'createdAt',
27
- 'updatedAt',
28
- ];
15
+ import { addressMineReadColumns } from '../lib/addressMine.ts';
29
16
 
30
17
  @Service()
31
18
  export class ServiceAddress extends BeanBase {
@@ -43,7 +30,7 @@ export class ServiceAddress extends BeanBase {
43
30
  async mine(params?: IQueryParams<ModelAddress>): Promise<DtoAddressMineRes> {
44
31
  return await this.scope.model.address.selectAndCount({
45
32
  ...params,
46
- columns: addressColumns,
33
+ columns: addressMineReadColumns,
47
34
  where: { ...params?.where, userId: this._getCurrentUserId() },
48
35
  orders: params?.orders ?? [['id', 'asc']],
49
36
  });
@@ -79,7 +66,7 @@ export class ServiceAddress extends BeanBase {
79
66
  private async _getOwnedAddress(id: TableIdentity) {
80
67
  return await this.scope.model.address.get(
81
68
  { id, userId: this._getCurrentUserId() },
82
- { columns: addressColumns },
69
+ { columns: addressMineReadColumns },
83
70
  );
84
71
  }
85
72
  }