cabloy 5.1.61 → 5.1.62
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/.claude/skills/cabloy-backend-scaffold/SKILL.md +2 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +1 -1
- package/.claude/skills/cabloy-domain-planning/SKILL.md +212 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +2 -0
- package/CHANGELOG.md +42 -0
- package/CLAUDE.md +1 -0
- package/cabloy-docs/.vitepress/config.mjs +158 -12
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +8 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +2 -0
- package/cabloy-docs/ai/skills.md +1 -0
- package/cabloy-docs/backend/backend-contract-emission-output-inspection.md +189 -0
- package/cabloy-docs/backend/backend-contract-emission-source-reading-map.md +160 -0
- package/cabloy-docs/backend/backend-contract-emission-specimen.md +170 -0
- package/cabloy-docs/backend/backend-resource-module-contract-chain.md +323 -0
- package/cabloy-docs/backend/backend-source-reading-debug-checklist.md +173 -0
- package/cabloy-docs/backend/backend-source-reading-roadmap.md +129 -0
- package/cabloy-docs/backend/backend-source-reading-verify-playbook.md +166 -0
- package/cabloy-docs/backend/bean-scene-authoring.md +4 -4
- package/cabloy-docs/backend/broadcast-guide.md +3 -3
- package/cabloy-docs/backend/cli.md +20 -11
- package/cabloy-docs/backend/config-guide.md +4 -4
- package/cabloy-docs/backend/controller-aop-guide.md +10 -10
- package/cabloy-docs/backend/controller-guide.md +12 -2
- package/cabloy-docs/backend/crud-workflow.md +7 -3
- package/cabloy-docs/backend/dto-guide.md +12 -2
- package/cabloy-docs/backend/dto-infer-generation.md +201 -25
- package/cabloy-docs/backend/election-guide.md +2 -2
- package/cabloy-docs/backend/entity-guide.md +12 -3
- package/cabloy-docs/backend/error-guide.md +3 -3
- package/cabloy-docs/backend/event-guide.md +4 -4
- package/cabloy-docs/backend/external-aop-guide.md +2 -2
- package/cabloy-docs/backend/field-indexes.md +9 -3
- package/cabloy-docs/backend/foundation.md +8 -8
- package/cabloy-docs/backend/i18n-guide.md +6 -6
- package/cabloy-docs/backend/internal-aop-guide.md +2 -2
- package/cabloy-docs/backend/introduction.md +13 -0
- package/cabloy-docs/backend/migration-and-changes.md +3 -3
- package/cabloy-docs/backend/model-guide.md +16 -6
- package/cabloy-docs/backend/openapi-guide.md +3 -0
- package/cabloy-docs/backend/queue-guide.md +3 -3
- package/cabloy-docs/backend/redlock-guide.md +2 -2
- package/cabloy-docs/backend/schedule-guide.md +2 -2
- package/cabloy-docs/backend/scripts.md +8 -0
- package/cabloy-docs/backend/serialization-guide.md +2 -2
- package/cabloy-docs/backend/service-guide.md +18 -9
- package/cabloy-docs/backend/startup-guide.md +5 -5
- package/cabloy-docs/backend/status-guide.md +7 -7
- package/cabloy-docs/backend/unit-testing.md +3 -3
- package/cabloy-docs/backend/vona-source-reading-map.md +157 -0
- package/cabloy-docs/backend/websocket-protocol-guide.md +5 -5
- package/cabloy-docs/backend/websocket-usage-guide.md +15 -8
- package/cabloy-docs/frontend/a-model-under-the-hood.md +281 -0
- package/cabloy-docs/frontend/a-openapi-under-the-hood.md +248 -0
- package/cabloy-docs/frontend/a-router-guide.md +307 -0
- package/cabloy-docs/frontend/api-guide.md +4 -4
- package/cabloy-docs/frontend/api-schema-guide.md +1 -0
- package/cabloy-docs/frontend/app-startup-guide.md +7 -4
- package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
- package/cabloy-docs/frontend/behavior-guide.md +16 -16
- package/cabloy-docs/frontend/cli.md +5 -5
- package/cabloy-docs/frontend/command-scene-authoring.md +17 -8
- package/cabloy-docs/frontend/component-guide.md +5 -5
- package/cabloy-docs/frontend/component-props-guide.md +1 -1
- package/cabloy-docs/frontend/component-v-model-guide.md +2 -2
- package/cabloy-docs/frontend/filter-query-select-data-flow-guide.md +260 -0
- package/cabloy-docs/frontend/form-guide.md +19 -28
- package/cabloy-docs/frontend/form-scene-to-page-meta-guide.md +303 -0
- package/cabloy-docs/frontend/foundation.md +10 -6
- package/cabloy-docs/frontend/frontend-source-reading-roadmap.md +249 -0
- package/cabloy-docs/frontend/generated-contract-consumption-debug-checklist.md +190 -0
- package/cabloy-docs/frontend/generated-contract-consumption-entry-branch.md +205 -0
- package/cabloy-docs/frontend/generated-contract-consumption-list-branch.md +157 -0
- package/cabloy-docs/frontend/generated-contract-consumption-specimen.md +203 -0
- package/cabloy-docs/frontend/generated-contract-consumption-verify-playbook.md +189 -0
- package/cabloy-docs/frontend/generic-component-guide.md +1 -1
- package/cabloy-docs/frontend/introduction.md +29 -7
- package/cabloy-docs/frontend/model-architecture.md +38 -2
- package/cabloy-docs/frontend/model-resource-cookbook.md +11 -8
- package/cabloy-docs/frontend/model-resource-internals-deep-dive.md +238 -0
- package/cabloy-docs/frontend/model-resource-owner-pattern.md +22 -2
- package/cabloy-docs/frontend/model-resource-usage-guide.md +22 -6
- package/cabloy-docs/frontend/model-state-guide.md +12 -9
- package/cabloy-docs/frontend/module-scope.md +8 -8
- package/cabloy-docs/frontend/modules-and-suites.md +2 -1
- package/cabloy-docs/frontend/navigation-guards-guide.md +7 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +12 -4
- package/cabloy-docs/frontend/page-guide.md +9 -9
- package/cabloy-docs/frontend/page-meta-guide.md +466 -0
- package/cabloy-docs/frontend/page-params-guide.md +3 -3
- package/cabloy-docs/frontend/page-query-guide.md +2 -2
- package/cabloy-docs/frontend/page-route-guide.md +6 -0
- package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +263 -0
- package/cabloy-docs/frontend/quickstart.md +14 -2
- package/cabloy-docs/frontend/resource-entry-page-deep-dive.md +271 -0
- package/cabloy-docs/frontend/resource-list-page-deep-dive.md +279 -0
- package/cabloy-docs/frontend/rest-resource-source-reading-map.md +522 -0
- package/cabloy-docs/frontend/rest-resource-under-the-hood.md +622 -0
- package/cabloy-docs/frontend/root-behaviors-guide.md +282 -0
- package/cabloy-docs/frontend/route-alias-guide.md +6 -0
- package/cabloy-docs/frontend/router-stack-guide.md +229 -0
- package/cabloy-docs/frontend/router-tabs-introduction.md +26 -3
- package/cabloy-docs/frontend/router-tabs-layout-integration.md +367 -0
- package/cabloy-docs/frontend/router-tabs-mechanism.md +6 -0
- package/cabloy-docs/frontend/router-tabs-route-meta-cookbook.md +7 -0
- package/cabloy-docs/frontend/router-tabs-vs-stack.md +167 -0
- package/cabloy-docs/frontend/router-view-hosts-guide.md +450 -0
- package/cabloy-docs/frontend/server-data.md +2 -1
- package/cabloy-docs/frontend/system-startup-guide.md +2 -2
- package/cabloy-docs/frontend/table-action-visibility-permission-flow-guide.md +263 -0
- package/cabloy-docs/frontend/table-cell-cookbook.md +568 -0
- package/cabloy-docs/frontend/table-guide.md +373 -0
- package/cabloy-docs/frontend/table-resource-crud-cookbook.md +496 -0
- package/cabloy-docs/frontend/zova-app-guide.md +251 -0
- package/cabloy-docs/frontend/zova-form-source-reading-map.md +7 -9
- package/cabloy-docs/frontend/zova-form-under-the-hood.md +5 -0
- package/cabloy-docs/frontend/zova-router-under-the-hood.md +561 -0
- package/cabloy-docs/frontend/zova-source-reading-map.md +101 -7
- package/cabloy-docs/frontend/zova-table-controller-render-supplement.md +225 -0
- package/cabloy-docs/frontend/zova-table-source-reading-map.md +317 -0
- package/cabloy-docs/frontend/zova-table-under-the-hood.md +532 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-debug-checklist.md +245 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-source-reading-map.md +139 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions-verify-playbook.md +248 -0
- package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +511 -0
- package/cabloy-docs/fullstack/contract-loop-playbook.md +8 -2
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +6 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +181 -48
- package/cabloy-docs/fullstack/introduction.md +3 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -2
- package/cabloy-docs/fullstack/suites-and-modules.md +333 -0
- package/cabloy-docs/fullstack/tutorial-1-first-module.md +3 -0
- package/cabloy-docs/fullstack/tutorial-2-first-crud.md +4 -0
- package/cabloy-docs/fullstack/tutorial-3-frontend-metadata-sharing.md +4 -0
- package/cabloy-docs/fullstack/tutorial-4-custom-level-renderers.md +31 -19
- package/cabloy-docs/fullstack/tutorial-5-backend-contract-sharing.md +5 -0
- package/cabloy-docs/fullstack/tutorial-6-one-contract-four-uses.md +4 -0
- package/cabloy-docs/fullstack/tutorials-overview.md +1 -1
- package/cabloy-docs/reference/bean-scene-boilerplates.md +13 -13
- package/cabloy-docs/reference/package-map.md +4 -3
- package/package.json +1 -1
- package/vona/pnpm-lock.yaml +22 -258
- package/vona/src/suite/a-training/modules/training-student/package.json +53 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts +400 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +18 -0
- package/vona/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.index.ts +12 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/meta.version.ts +21 -0
- package/vona/src/suite/a-training/modules/training-student/src/bean/ssrMenu.student.ts +29 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +15 -0
- package/vona/src/suite/a-training/modules/training-student/src/controller/student.ts +74 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +44 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectRes.tsx +11 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectResItem.tsx +45 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +42 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +28 -0
- package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +25 -0
- package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +84 -0
- package/vona/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/vona/src/suite/a-training/modules/training-student/src/model/student.ts +10 -0
- package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +57 -0
- package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +173 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.build.json +11 -0
- package/vona/src/suite/a-training/modules/training-student/tsconfig.json +7 -0
- package/vona/src/suite/a-training/package.json +12 -0
- package/vona/src/suite/a-training/tsconfig.base.json +4 -0
- package/vona/src/suite/a-training/tsconfig.json +10 -0
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +406 -680
- package/zova/src/suite/a-training/modules/training-student/cli/openapi.config.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/package.json +52 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/component/formFieldLevel.ts +31 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/index.ts +258 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/locales.ts +7 -0
- package/zova/src/suite/a-training/modules/training-student/src/.metadata/this.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/baseURL.ts +5 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/index.ts +3 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/schemas.ts +196 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/openapi/types.ts +4146 -0
- package/zova/src/suite/a-training/modules/training-student/src/api/trainingStudent.ts +151 -0
- package/zova/src/suite/a-training/modules/training-student/src/apiSchema/trainingStudent.ts +43 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +51 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +56 -0
- package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.level.tsx +63 -0
- package/zova/src/suite/a-training/modules/training-student/src/component/formFieldLevel/controller.tsx +117 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +9 -0
- package/zova/src/suite/a-training/modules/training-student/src/index.ts +2 -0
- package/zova/src/suite/a-training/modules/training-student/src/model/student.ts +42 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.build.json +13 -0
- package/zova/src/suite/a-training/modules/training-student/tsconfig.json +5 -0
- package/zova/src/suite/a-training/package.json +12 -0
- package/zova/src/suite/a-training/tsconfig.base.json +4 -0
- package/zova/src/suite/a-training/tsconfig.json +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/formFieldSelect/controller.tsx +29 -7
- package/zova/src/suite/cabloy-basic/modules/basic-select/src/component/select/controller.tsx +34 -11
- package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +3 -3
- package/zova/src/suite-vendor/a-zova/modules/a-table/src/lib/tableCell.ts +1 -1
- package/zova/src/suite-vendor/a-zova/package.json +2 -2
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
# Backend Source Reading Verify Playbook
|
|
2
|
+
|
|
3
|
+
This page is a proof-oriented verification companion for one narrow backend question:
|
|
4
|
+
|
|
5
|
+
> after I have chosen a backend source-reading path, what must be true at each backend layer before I trust it?
|
|
6
|
+
|
|
7
|
+
Use this page together with:
|
|
8
|
+
|
|
9
|
+
- [Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap)
|
|
10
|
+
- [Vona Source Reading Map](/backend/vona-source-reading-map)
|
|
11
|
+
- [Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)
|
|
12
|
+
- [Backend Contract Emission Specimen](/backend/backend-contract-emission-specimen)
|
|
13
|
+
- [Backend Contract Emission Source Reading Map](/backend/backend-contract-emission-source-reading-map)
|
|
14
|
+
- [Backend Contract Emission Output Inspection](/backend/backend-contract-emission-output-inspection)
|
|
15
|
+
- [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
16
|
+
|
|
17
|
+
> [!TIP]
|
|
18
|
+
> **Backend source-reading verification path**
|
|
19
|
+
>
|
|
20
|
+
> 1. **[Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap)** — choose the backend source-reading branch
|
|
21
|
+
> 2. **[Vona Source Reading Map](/backend/vona-source-reading-map)**, **[Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)**, or the emission family — inspect the relevant branch/specimen first
|
|
22
|
+
> 3. **[Backend Source Reading Verify Playbook](/backend/backend-source-reading-verify-playbook)** — prove the backend-side path layer by layer
|
|
23
|
+
>
|
|
24
|
+
> **You are here:** step 3.
|
|
25
|
+
> **Previous recommended pages:** [Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap) and [Vona Source Reading Map](/backend/vona-source-reading-map).
|
|
26
|
+
|
|
27
|
+
## Why this page exists
|
|
28
|
+
|
|
29
|
+
The current backend source-reading family already gives you:
|
|
30
|
+
|
|
31
|
+
- a chooser page
|
|
32
|
+
- a broad file-order map
|
|
33
|
+
- a module-wiring specimen
|
|
34
|
+
- an emission specimen/map/inspection family
|
|
35
|
+
|
|
36
|
+
What was still missing was one proof-oriented page that tells you what must be true at each backend layer before you trust the path.
|
|
37
|
+
|
|
38
|
+
This page fills that gap.
|
|
39
|
+
|
|
40
|
+
It is not another concept page and not another file-order map. It is the verification playbook for backend source-reading.
|
|
41
|
+
|
|
42
|
+
## Phase 1: Scope the backend branch first
|
|
43
|
+
|
|
44
|
+
Before checking details, decide which backend branch you are actually in.
|
|
45
|
+
|
|
46
|
+
### Module-wiring branch
|
|
47
|
+
|
|
48
|
+
Use this branch when the question is about:
|
|
49
|
+
|
|
50
|
+
- how controller, service, model, entity, and DTO layers still connect
|
|
51
|
+
- whether generated metadata still reflects the intended module/resource shape
|
|
52
|
+
- whether the current module-wiring specimen still matches the real code path
|
|
53
|
+
|
|
54
|
+
### Contract-emission branch
|
|
55
|
+
|
|
56
|
+
Use this branch when the question is about:
|
|
57
|
+
|
|
58
|
+
- whether controller + DTO + entity metadata still shape the emitted backend contract correctly
|
|
59
|
+
- whether generated metadata records and emitted OpenAPI output still agree
|
|
60
|
+
- whether the backend side is ready to hand off into the forward bridge
|
|
61
|
+
|
|
62
|
+
### Emitted-output inspection only
|
|
63
|
+
|
|
64
|
+
Use this branch when the input-side source path already looks correct and you only need to verify the emitted output surface itself.
|
|
65
|
+
|
|
66
|
+
## Phase 2: Prove the shared generated/module anchor surfaces
|
|
67
|
+
|
|
68
|
+
Start with the smallest shared backend anchors.
|
|
69
|
+
|
|
70
|
+
Primary anchors:
|
|
71
|
+
|
|
72
|
+
- `vona/src/suite/a-training/modules/training-student/src/index.ts`
|
|
73
|
+
- `vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts`
|
|
74
|
+
|
|
75
|
+
What to prove:
|
|
76
|
+
|
|
77
|
+
- the module entry still re-exports the generated surfaces where expected
|
|
78
|
+
- the generated registration surface still exposes the expected controller/model/service/entity/DTO path
|
|
79
|
+
- the current source-reading/specimen docs still line up with the actual generated module surface
|
|
80
|
+
|
|
81
|
+
If this phase fails, do not continue into either branch. The backend source-reading path is already wrong too early.
|
|
82
|
+
|
|
83
|
+
## Phase 3A: Prove the module-wiring branch
|
|
84
|
+
|
|
85
|
+
Only enter this phase when the question is clearly about module wiring.
|
|
86
|
+
|
|
87
|
+
Primary anchors:
|
|
88
|
+
|
|
89
|
+
- `vona/src/suite/a-training/modules/training-student/src/controller/student.ts`
|
|
90
|
+
- `vona/src/suite/a-training/modules/training-student/src/service/student.ts`
|
|
91
|
+
- `vona/src/suite/a-training/modules/training-student/src/model/student.ts`
|
|
92
|
+
- `vona/src/suite/a-training/modules/training-student/src/entity/student.tsx`
|
|
93
|
+
- `vona/src/suite/a-training/modules/training-student/src/dto/*.tsx`
|
|
94
|
+
|
|
95
|
+
What to prove:
|
|
96
|
+
|
|
97
|
+
- controller, service, model, entity, and DTO layers still connect as expected
|
|
98
|
+
- the generated metadata still reflects the intended module/resource chain
|
|
99
|
+
- the current specimen path still matches the actual backend code path
|
|
100
|
+
|
|
101
|
+
If this phase passes, the backend source-reading path is correct enough to trust the module-wiring branch.
|
|
102
|
+
|
|
103
|
+
## Phase 3B: Prove the contract-emission branch
|
|
104
|
+
|
|
105
|
+
Only enter this phase when the question is clearly about emitted backend contract truth.
|
|
106
|
+
|
|
107
|
+
Primary anchors:
|
|
108
|
+
|
|
109
|
+
- `vona/src/suite/a-training/modules/training-student/src/controller/student.ts`
|
|
110
|
+
- `vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx`
|
|
111
|
+
- `vona/src/suite/a-training/modules/training-student/src/.metadata/index.ts`
|
|
112
|
+
- emitted output surface already used in docs:
|
|
113
|
+
- `http://localhost:7102/swagger/json?version=V31`
|
|
114
|
+
|
|
115
|
+
What to prove:
|
|
116
|
+
|
|
117
|
+
- the controller action still declares the intended emitted path and response contract
|
|
118
|
+
- the named DTO still matches the intended emitted response shape
|
|
119
|
+
- generated metadata records still line up with emitted route/DTO presence
|
|
120
|
+
- the emitted output surface itself still reflects those backend inputs
|
|
121
|
+
|
|
122
|
+
If this phase passes, the backend emission branch is correct enough to hand off to the forward bridge.
|
|
123
|
+
|
|
124
|
+
## Phase 4: Escalate only after the backend proof steps pass
|
|
125
|
+
|
|
126
|
+
Only after the earlier proof steps pass should you descend into:
|
|
127
|
+
|
|
128
|
+
- fullstack forward-bridge docs
|
|
129
|
+
- frontend generation/consumption docs
|
|
130
|
+
- deeper consumer-side verification
|
|
131
|
+
|
|
132
|
+
That is the boundary that keeps this page backend-side and source-reading focused.
|
|
133
|
+
|
|
134
|
+
## What this page does not re-explain
|
|
135
|
+
|
|
136
|
+
This page deliberately does **not** re-teach:
|
|
137
|
+
|
|
138
|
+
- the conceptual backend overview -> see [Backend (Vona)](/backend/introduction)
|
|
139
|
+
- controller/service/model/entity/DTO concept guides
|
|
140
|
+
- the broad chooser and broad file-order map -> see [Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap) and [Vona Source Reading Map](/backend/vona-source-reading-map)
|
|
141
|
+
- the module-wiring specimen -> see [Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)
|
|
142
|
+
- the emission family pages -> see [OpenAPI Guide](/backend/openapi-guide), [Backend Contract Emission Specimen](/backend/backend-contract-emission-specimen), [Backend Contract Emission Source Reading Map](/backend/backend-contract-emission-source-reading-map), and [Backend Contract Emission Output Inspection](/backend/backend-contract-emission-output-inspection)
|
|
143
|
+
- the fullstack forward bridge -> see [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
|
|
144
|
+
|
|
145
|
+
Its job is only to tell you what must be true at each backend layer before you trust the source-reading path.
|
|
146
|
+
|
|
147
|
+
## Where to read next
|
|
148
|
+
|
|
149
|
+
- If you need the chooser page first, return to [Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap).
|
|
150
|
+
- If you need the broad file-order map first, continue with [Vona Source Reading Map](/backend/vona-source-reading-map).
|
|
151
|
+
- If the backend result already looks wrong and you want symptom-first diagnosis, continue with [Backend Source Reading Debug Checklist](/backend/backend-source-reading-debug-checklist).
|
|
152
|
+
- If the backend path is now proven and you want the downstream bridge, hand off to [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk).
|
|
153
|
+
- If the backend truth is proven but the real problem is one mixed Student row-action chain, hand off to [Backend Metadata to Frontend Table Actions](/fullstack/backend-metadata-to-frontend-table-actions).
|
|
154
|
+
- If you are still unsure which contract direction or drift type actually applies, return to [Contract Loop Playbook](/fullstack/contract-loop-playbook).
|
|
155
|
+
|
|
156
|
+
## Final takeaway
|
|
157
|
+
|
|
158
|
+
The cleanest way to verify a backend source-reading path is not to jump straight into downstream frontend generation or the broadest concept docs.
|
|
159
|
+
|
|
160
|
+
First prove:
|
|
161
|
+
|
|
162
|
+
- the shared generated/module surface
|
|
163
|
+
- the relevant module-wiring or emission branch
|
|
164
|
+
- the emitted output surface when needed
|
|
165
|
+
|
|
166
|
+
Only then hand off to the fullstack bridge if you still need the downstream path.
|
|
@@ -183,7 +183,7 @@ Representative generated output:
|
|
|
183
183
|
```typescript
|
|
184
184
|
declare module 'vona' {
|
|
185
185
|
export interface IBeanRecordGeneral {
|
|
186
|
-
'
|
|
186
|
+
'training-student.service.student': ServiceStudent;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
189
|
```
|
|
@@ -248,8 +248,8 @@ Representative generated service output includes:
|
|
|
248
248
|
|
|
249
249
|
```typescript
|
|
250
250
|
export interface ServiceStudent {
|
|
251
|
-
get $beanFullName(): '
|
|
252
|
-
get $onionName(): '
|
|
251
|
+
get $beanFullName(): 'training-student.service.student';
|
|
252
|
+
get $onionName(): 'training-student:student';
|
|
253
253
|
}
|
|
254
254
|
```
|
|
255
255
|
|
|
@@ -272,7 +272,7 @@ Keep these two tasks separate.
|
|
|
272
272
|
Example:
|
|
273
273
|
|
|
274
274
|
```bash
|
|
275
|
-
npm run vona :create:bean service student -- --module=
|
|
275
|
+
npm run vona :create:bean service student -- --module=training-student
|
|
276
276
|
```
|
|
277
277
|
|
|
278
278
|
This uses an already-defined scene.
|
|
@@ -10,10 +10,10 @@ This is important because some business logic is not point-to-point background w
|
|
|
10
10
|
|
|
11
11
|
## Create a broadcast
|
|
12
12
|
|
|
13
|
-
Example: create a broadcast named `echo` in module `
|
|
13
|
+
Example: create a broadcast named `echo` in module `training-student`.
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm run vona :create:bean broadcast echo -- --module=
|
|
16
|
+
npm run vona :create:bean broadcast echo -- --module=training-student
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Broadcast definition
|
|
@@ -78,7 +78,7 @@ Representative pattern:
|
|
|
78
78
|
```typescript
|
|
79
79
|
config.onions = {
|
|
80
80
|
broadcast: {
|
|
81
|
-
'
|
|
81
|
+
'training-student:echo': {
|
|
82
82
|
instance: true,
|
|
83
83
|
transaction: true,
|
|
84
84
|
},
|
|
@@ -87,31 +87,31 @@ npm run vona :create:module moduleName -- [--suite=]
|
|
|
87
87
|
### Create a service bean
|
|
88
88
|
|
|
89
89
|
```bash
|
|
90
|
-
npm run vona :create:bean service student -- --module=
|
|
90
|
+
npm run vona :create:bean service student -- --module=training-student
|
|
91
91
|
```
|
|
92
92
|
|
|
93
93
|
### Create a model bean
|
|
94
94
|
|
|
95
95
|
```bash
|
|
96
|
-
npm run vona :create:bean model student -- --module=
|
|
96
|
+
npm run vona :create:bean model student -- --module=training-student
|
|
97
97
|
```
|
|
98
98
|
|
|
99
99
|
### Create an entity bean
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
|
-
npm run vona :create:bean entity student -- --module=
|
|
102
|
+
npm run vona :create:bean entity student -- --module=training-student
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
### Create a DTO bean
|
|
106
106
|
|
|
107
107
|
```bash
|
|
108
|
-
npm run vona :create:bean dto studentCreate -- --module=
|
|
108
|
+
npm run vona :create:bean dto studentCreate -- --module=training-student
|
|
109
109
|
```
|
|
110
110
|
|
|
111
111
|
### Create a startup bean
|
|
112
112
|
|
|
113
113
|
```bash
|
|
114
|
-
npm run vona :create:bean startup log -- --module=
|
|
114
|
+
npm run vona :create:bean startup log -- --module=training-student
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
These examples show that the CLI is tightly connected to module boundaries and bean scenes such as service, model, entity, DTO, and startup.
|
|
@@ -129,7 +129,7 @@ Some backend bean scenes expose more than one scaffold template.
|
|
|
129
129
|
In those cases, use `--boilerplate=...` to select a named variant:
|
|
130
130
|
|
|
131
131
|
```bash
|
|
132
|
-
npm run vona :create:bean ssrMenu menuTest -- --module=
|
|
132
|
+
npm run vona :create:bean ssrMenu menuTest -- --module=training-student --boilerplate=web
|
|
133
133
|
```
|
|
134
134
|
|
|
135
135
|
A practical rule is:
|
|
@@ -147,10 +147,10 @@ Not every backend resource is created through bean scenes.
|
|
|
147
147
|
Representative initializer commands include:
|
|
148
148
|
|
|
149
149
|
```bash
|
|
150
|
-
npm run vona :init:constant
|
|
151
|
-
npm run vona :init:types
|
|
152
|
-
npm run vona :init:lib
|
|
153
|
-
npm run vona :init:asset static -- --module=
|
|
150
|
+
npm run vona :init:constant training-student
|
|
151
|
+
npm run vona :init:types training-student
|
|
152
|
+
npm run vona :init:lib training-student
|
|
153
|
+
npm run vona :init:asset static -- --module=training-student
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
A practical distinction is:
|
|
@@ -160,7 +160,7 @@ A practical distinction is:
|
|
|
160
160
|
|
|
161
161
|
A practical helper-placement rule is:
|
|
162
162
|
|
|
163
|
-
- if a backend module needs reusable pure helper functions, initialize `src/lib` with `npm run vona :init:lib
|
|
163
|
+
- if a backend module needs reusable pure helper functions, initialize `src/lib` with `npm run vona :init:lib training-student`
|
|
164
164
|
- place those shared helpers under `src/lib` and export shared entrypoints from `src/lib/index.ts`
|
|
165
165
|
- if the logic needs container-managed runtime behavior, do not force it into `src/lib`; re-evaluate `src/service` or another bean scene instead
|
|
166
166
|
|
|
@@ -196,3 +196,12 @@ When creating backend code:
|
|
|
196
196
|
4. only then make minimal follow-up edits
|
|
197
197
|
|
|
198
198
|
This reduces unnecessary manual scaffolding and keeps the implementation aligned with Vona conventions.
|
|
199
|
+
|
|
200
|
+
## Where to read next
|
|
201
|
+
|
|
202
|
+
If your next question is no longer only which command to run, but which backend source files to inspect after the CLI step, continue with:
|
|
203
|
+
|
|
204
|
+
- [Backend Scripts](/backend/scripts)
|
|
205
|
+
- [Backend Source Reading Roadmap](/backend/backend-source-reading-roadmap)
|
|
206
|
+
- [Vona Source Reading Map](/backend/vona-source-reading-map)
|
|
207
|
+
- [Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)
|
|
@@ -12,10 +12,10 @@ That matters because backend capabilities often need both:
|
|
|
12
12
|
|
|
13
13
|
## Initialize the config skeleton
|
|
14
14
|
|
|
15
|
-
Example: initialize config for module `
|
|
15
|
+
Example: initialize config for module `training-student`.
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
npm run vona :init:config
|
|
18
|
+
npm run vona :init:config training-student
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
This gives the module its own config file under the module’s config area.
|
|
@@ -53,7 +53,7 @@ Cross-module config access uses the cross-module scope surface.
|
|
|
53
53
|
Representative pattern:
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
|
-
console.log(this.$scope.
|
|
56
|
+
console.log(this.$scope.trainingStudent.config.title);
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
A practical distinction is:
|
|
@@ -122,7 +122,7 @@ Representative pattern:
|
|
|
122
122
|
|
|
123
123
|
```typescript
|
|
124
124
|
config.modules = {
|
|
125
|
-
'
|
|
125
|
+
'training-student': {
|
|
126
126
|
title: 'Hello World!!',
|
|
127
127
|
},
|
|
128
128
|
};
|
|
@@ -23,9 +23,9 @@ Middleware is used for request-path behavior that wraps execution before and aft
|
|
|
23
23
|
Representative CLI generation patterns from the legacy workflow include:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
npm run vona :create:bean middlewareSystem logger -- --module=
|
|
27
|
-
npm run vona :create:bean middleware logger -- --module=
|
|
28
|
-
npm run vona :create:bean middleware logger -- --module=
|
|
26
|
+
npm run vona :create:bean middlewareSystem logger -- --module=training-student
|
|
27
|
+
npm run vona :create:bean middleware logger -- --module=training-student --boilerplate=global
|
|
28
|
+
npm run vona :create:bean middleware logger -- --module=training-student
|
|
29
29
|
```
|
|
30
30
|
|
|
31
31
|
These commands all go through the shared `:create:bean` entrypoint, but they target different middleware scopes and boilerplates.
|
|
@@ -45,13 +45,13 @@ This is where Vona places concerns such as not-found handling, request override
|
|
|
45
45
|
### Representative local usage
|
|
46
46
|
|
|
47
47
|
```typescript
|
|
48
|
-
@Aspect.middleware('
|
|
48
|
+
@Aspect.middleware('training-student:logger')
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
### Representative global usage
|
|
52
52
|
|
|
53
53
|
```typescript
|
|
54
|
-
@Aspect.middlewareGlobal('
|
|
54
|
+
@Aspect.middlewareGlobal('training-student:logger', { prefix: 'elapsed' })
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
### Representative built-in usage
|
|
@@ -85,7 +85,7 @@ Typical jobs include:
|
|
|
85
85
|
### Representative local usage
|
|
86
86
|
|
|
87
87
|
```typescript
|
|
88
|
-
@Aspect.guard('
|
|
88
|
+
@Aspect.guard('training-student:admin')
|
|
89
89
|
```
|
|
90
90
|
|
|
91
91
|
### Representative built-in usage
|
|
@@ -120,7 +120,7 @@ Typical jobs include:
|
|
|
120
120
|
### Representative local usage
|
|
121
121
|
|
|
122
122
|
```typescript
|
|
123
|
-
@Aspect.interceptor('
|
|
123
|
+
@Aspect.interceptor('training-student:logger')
|
|
124
124
|
```
|
|
125
125
|
|
|
126
126
|
### Representative built-in usage
|
|
@@ -140,7 +140,7 @@ Pipes transform or validate request values before they reach controller logic.
|
|
|
140
140
|
### Representative local pipe usage
|
|
141
141
|
|
|
142
142
|
```typescript
|
|
143
|
-
@Aspect.pipe('
|
|
143
|
+
@Aspect.pipe('training-student:number')
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
### Argument pipe pattern
|
|
@@ -150,7 +150,7 @@ Argument pipes are usually created from a local pipe:
|
|
|
150
150
|
```typescript
|
|
151
151
|
import { createArgumentPipe } from 'vona-module-a-aspect';
|
|
152
152
|
|
|
153
|
-
export const ArgNumber = createArgumentPipe('
|
|
153
|
+
export const ArgNumber = createArgumentPipe('training-student:number');
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
Used on a controller parameter:
|
|
@@ -191,7 +191,7 @@ This is where request-path error customization becomes explicit.
|
|
|
191
191
|
### Representative local usage
|
|
192
192
|
|
|
193
193
|
```typescript
|
|
194
|
-
@Aspect.filter('
|
|
194
|
+
@Aspect.filter('training-student:test')
|
|
195
195
|
```
|
|
196
196
|
|
|
197
197
|
### Built-in filter
|
|
@@ -18,12 +18,12 @@ A useful contract-loop mental model is:
|
|
|
18
18
|
|
|
19
19
|
## Create a controller
|
|
20
20
|
|
|
21
|
-
Example: create a controller named `student` in module `
|
|
21
|
+
Example: create a controller named `student` in module `training-student`.
|
|
22
22
|
|
|
23
23
|
### CLI command
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
|
-
npm run vona :create:bean controller student -- --module=
|
|
26
|
+
npm run vona :create:bean controller student -- --module=training-student
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
## Controller definition
|
|
@@ -345,3 +345,13 @@ The safest workflow is:
|
|
|
345
345
|
3. add `@Web`, `@Arg`, validation, and OpenAPI metadata in the same style
|
|
346
346
|
4. choose deliberately whether response wrapper defaults should stay in place
|
|
347
347
|
5. verify the resulting routes and response conventions
|
|
348
|
+
|
|
349
|
+
## Where to read next
|
|
350
|
+
|
|
351
|
+
If your next question is how the HTTP-facing controller layer connects to the rest of one real backend module, continue with:
|
|
352
|
+
|
|
353
|
+
- [Service Guide](/backend/service-guide)
|
|
354
|
+
- [DTO Guide](/backend/dto-guide)
|
|
355
|
+
- [OpenAPI Guide](/backend/openapi-guide)
|
|
356
|
+
- [Vona Source Reading Map](/backend/vona-source-reading-map)
|
|
357
|
+
- [Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)
|
|
@@ -8,18 +8,22 @@ CRUD is one of the clearest places where Cabloy’s CLI-first philosophy pays of
|
|
|
8
8
|
|
|
9
9
|
Instead of creating controller, service, model, entity, DTO, metadata, locale, and test files by hand, Vona already provides generators that create the initial backend thread.
|
|
10
10
|
|
|
11
|
+
> [!NOTE]
|
|
12
|
+
> The fullstack tutorial series intentionally uses a standalone `demo-student` sandbox so readers can experiment without colliding with the repo's real suite-owned `a-training/training-student` implementation.
|
|
13
|
+
> This guide, by contrast, uses the current repo implementation as its compact specimen.
|
|
14
|
+
|
|
11
15
|
## Generate a CRUD skeleton
|
|
12
16
|
|
|
13
|
-
Example: generate a CRUD workflow for `student` in module `
|
|
17
|
+
Example: generate a CRUD workflow for `student` in module `training-student`.
|
|
14
18
|
|
|
15
19
|
```bash
|
|
16
|
-
npm run vona :tools:crud student -- --module=
|
|
20
|
+
npm run vona :tools:crud student -- --module=training-student
|
|
17
21
|
```
|
|
18
22
|
|
|
19
23
|
A lighter variant also exists:
|
|
20
24
|
|
|
21
25
|
```bash
|
|
22
|
-
npm run vona :tools:crudBasic student -- --module=
|
|
26
|
+
npm run vona :tools:crudBasic student -- --module=training-student
|
|
23
27
|
```
|
|
24
28
|
|
|
25
29
|
This is important because the repo already encodes both the full CRUD thread and a lighter CRUD-basic workflow in the CLI surface.
|
|
@@ -16,10 +16,10 @@ That is why DTO design should be treated as a framework concern instead of only
|
|
|
16
16
|
|
|
17
17
|
## Create a DTO
|
|
18
18
|
|
|
19
|
-
Example: create a DTO named `studentCreate` in module `
|
|
19
|
+
Example: create a DTO named `studentCreate` in module `training-student`.
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
npm run vona :create:bean dto studentCreate -- --module=
|
|
22
|
+
npm run vona :create:bean dto studentCreate -- --module=training-student
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
## DTO definition
|
|
@@ -172,3 +172,13 @@ When creating DTOs:
|
|
|
172
172
|
4. avoid re-declaring fields manually if Vona’s DTO-generation or class-derivation tools already solve the problem
|
|
173
173
|
5. treat DTO design as part of the contract between backend handlers, models, and frontend integration
|
|
174
174
|
6. choose explicit DTOs when named long-lived contracts matter, and inferred DTOs when the model/query shape already expresses the contract clearly
|
|
175
|
+
|
|
176
|
+
## Where to read next
|
|
177
|
+
|
|
178
|
+
If your next question is how named DTO artifacts fit into one complete backend module specimen, continue with:
|
|
179
|
+
|
|
180
|
+
- [DTO Infer and Generation](/backend/dto-infer-generation)
|
|
181
|
+
- [Controller Guide](/backend/controller-guide)
|
|
182
|
+
- [OpenAPI Guide](/backend/openapi-guide)
|
|
183
|
+
- [Vona Source Reading Map](/backend/vona-source-reading-map)
|
|
184
|
+
- [Backend Resource/Module Contract Chain](/backend/backend-resource-module-contract-chain)
|