@stackonward/cli 0.0.1 → 1.0.0
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/dist/index.js +4588 -205
- package/dist/index.js.map +1 -1
- package/dist/resources/apple/.claude/docs/architecture-template.md +54 -0
- package/dist/resources/apple/.claude/docs/architecture.md +52 -0
- package/dist/resources/apple/.claude/docs/index.md +13 -0
- package/dist/resources/apple/.claude/docs/security-lifecycle.md +57 -0
- package/dist/resources/apple/.claude/docs/stack.md +93 -0
- package/dist/resources/apple/.claude/docs/verification.md +63 -0
- package/dist/resources/apple/AGENTS.md +397 -0
- package/dist/resources/apple/CLAUDE.md +397 -0
- package/dist/resources/apple/Gemfile +2 -0
- package/dist/resources/apple/Gemfile.lock +365 -0
- package/dist/resources/apple/_gitignore +14 -0
- package/dist/resources/apple/fastlane/Fastfile +123 -0
- package/dist/resources/components/nuxt/site-source/app/app.vue +42 -0
- package/dist/resources/components/nuxt/site-source/app/assets/css/site-shell.css +1035 -0
- package/dist/resources/components/nuxt/site-source/app/assets/icons/brand/.gitkeep +0 -0
- package/dist/resources/components/nuxt/site-source/app/assets/icons/common/.gitkeep +0 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationHeader.vue +35 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationShell.vue +56 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ApplicationSidebar.vue +40 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/BackToTop.vue +42 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ContentArticlePage.vue +40 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ContentListPage.vue +30 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/CookieConsent.vue +18 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/MarketingFooter.vue +52 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/MarketingHeader.vue +106 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/MarketingShell.vue +35 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/SiteBrand.vue +10 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/StaticPage.vue +21 -0
- package/dist/resources/components/nuxt/site-source/app/components/site/ToastViewport.vue +25 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/BaseButton.vue +86 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/BaseGradientBorder.vue +59 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/BaseModal.vue +131 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/BasePopover.vue +150 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/BaseText.vue +138 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/CheckoutStatus.vue +112 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/CheckoutSummary.vue +172 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/GoogleSignInButton.vue +113 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/InfiniteScroll.vue +123 -0
- package/dist/resources/components/nuxt/site-source/app/components/ui/YoutubeEmbed.vue +126 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useAnalytics.ts +24 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useCheckout.ts +121 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useConsent.ts +31 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useGoogleIdentity.ts +163 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useNavigation.ts +11 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useSeo.ts +33 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useSiteShell.ts +58 -0
- package/dist/resources/components/nuxt/site-source/app/composables/useToasts.ts +48 -0
- package/dist/resources/components/nuxt/site-source/app/layouts/app.vue +5 -0
- package/dist/resources/components/nuxt/site-source/app/layouts/default.vue +5 -0
- package/dist/resources/components/nuxt/site-source/app/plugins/analytics.client.ts +121 -0
- package/dist/resources/components/nuxt/site-source/app/plugins/google-identity.client.ts +24 -0
- package/dist/resources/components/nuxt/site-source/app/theme/accordion.ts +9 -0
- package/dist/resources/components/nuxt/site-source/app/theme/breadcrumb.ts +8 -0
- package/dist/resources/components/nuxt/site-source/app/theme/button.ts +92 -0
- package/dist/resources/components/nuxt/site-source/app/theme/carousel.ts +11 -0
- package/dist/resources/components/nuxt/site-source/app/theme/checkbox.ts +12 -0
- package/dist/resources/components/nuxt/site-source/app/theme/index.ts +30 -0
- package/dist/resources/components/nuxt/site-source/app/theme/input.ts +47 -0
- package/dist/resources/components/nuxt/site-source/app/theme/modal.ts +9 -0
- package/dist/resources/components/nuxt/site-source/app/theme/pagination.ts +6 -0
- package/dist/resources/components/nuxt/site-source/app/theme/select.ts +23 -0
- package/dist/resources/components/nuxt/site-source/app/theme/stepper.ts +10 -0
- package/dist/resources/components/nuxt/site-source/app/theme/toast.ts +8 -0
- package/dist/resources/components/nuxt/site-source/app/theme/tooltip.ts +6 -0
- package/dist/resources/components/nuxt/site-source/app/types/site-shell.ts +85 -0
- package/dist/resources/components/react/ui/Button.tsx +73 -0
- package/dist/resources/components/react/ui/Input.tsx +44 -0
- package/dist/resources/components/registry.json +355 -0
- package/dist/resources/components/vue/feedback/Toast.vue +120 -0
- package/dist/resources/components/vue/feedback/useToast.ts +70 -0
- package/dist/resources/components/vue/media/FileUpload.vue +229 -0
- package/dist/resources/components/vue/media/VideoPlayer.vue +157 -0
- package/dist/resources/components/vue/ui/AppImage.vue +147 -0
- package/dist/resources/components/vue/ui/BottomSheet.vue +217 -0
- package/dist/resources/components/vue/ui/Button.vue +154 -0
- package/dist/resources/components/vue/ui/Card.vue +111 -0
- package/dist/resources/components/vue/ui/Input.vue +113 -0
- package/dist/resources/components/vue/ui/Modal.vue +193 -0
- package/dist/resources/components/vue/ui/ScrollArea.vue +163 -0
- package/dist/resources/components/vue/ui/Tooltip.vue +115 -0
- package/dist/resources/registry.json +158 -0
- package/dist/resources/snippets/node/cache.ts +116 -0
- package/dist/resources/snippets/node/date.ts +126 -0
- package/dist/resources/snippets/node/logger.ts +104 -0
- package/dist/resources/snippets/node/validation.ts +132 -0
- package/dist/resources/snippets/react/useDebounce.ts +90 -0
- package/dist/resources/snippets/registry.json +65 -0
- package/dist/resources/snippets/vue/useAsync.ts +96 -0
- package/dist/resources/snippets/vue/usePagination.ts +102 -0
- package/dist/resources/templates/base/.claude/docs/architecture-template.md +459 -0
- package/dist/resources/templates/base/.claude/docs/architecture.md +137 -0
- package/dist/resources/templates/base/.claude/docs/index.md +42 -0
- package/dist/resources/templates/base/.claude/docs/security-lifecycle.md +129 -0
- package/dist/resources/templates/base/.claude/docs/verification.md +121 -0
- package/dist/resources/templates/base/AGENTS.md +415 -0
- package/dist/resources/templates/base/CLAUDE.md +415 -0
- package/dist/resources/templates/go-backend/.claude/docs/api-design.md +486 -0
- package/dist/resources/templates/go-backend/.claude/docs/architecture-template.md +449 -0
- package/dist/resources/templates/go-backend/.claude/docs/check-list.md +155 -0
- package/dist/resources/templates/go-backend/.claude/docs/database.md +369 -0
- package/dist/resources/templates/go-backend/.claude/docs/e2e-standards.md +161 -0
- package/dist/resources/templates/go-backend/.claude/docs/error-handling.md +558 -0
- package/dist/resources/templates/go-backend/.claude/docs/event-runtime-boundary.md +124 -0
- package/dist/resources/templates/go-backend/.claude/docs/identifier-contract.md +195 -0
- package/dist/resources/templates/go-backend/.claude/docs/index.md +22 -0
- package/dist/resources/templates/go-backend/.claude/docs/logging.md +314 -0
- package/dist/resources/templates/go-backend/.claude/docs/mediagen-provider-onboarding-sop.md +917 -0
- package/dist/resources/templates/go-backend/.claude/docs/mediagen-provider-quick-reference.md +195 -0
- package/dist/resources/templates/go-backend/.claude/docs/module-standards.md +309 -0
- package/dist/resources/templates/go-backend/.claude/docs/openapi-contract.md +141 -0
- package/dist/resources/templates/go-backend/.claude/docs/payment-gateway-onboarding.md +283 -0
- package/dist/resources/templates/go-backend/.claude/docs/platform-boundary.md +191 -0
- package/dist/resources/templates/go-backend/.claude/docs/quality-gates.md +112 -0
- package/dist/resources/templates/go-backend/.dockerignore +6 -0
- package/dist/resources/templates/go-backend/.env.example +13 -0
- package/dist/resources/templates/go-backend/.gitattributes +2 -0
- package/dist/resources/templates/go-backend/AGENTS.md +1139 -0
- package/dist/resources/templates/go-backend/CLAUDE.md +1139 -0
- package/dist/resources/templates/go-backend/Dockerfile +14 -0
- package/dist/resources/templates/go-backend/Makefile +71 -0
- package/dist/resources/templates/go-backend/README.md +66 -0
- package/dist/resources/templates/go-backend/_gitignore +10 -0
- package/dist/resources/templates/go-backend/api/openapi/README.md +29 -0
- package/dist/resources/templates/go-backend/api/openapi/dist/artifact-manifest.json +19 -0
- package/dist/resources/templates/go-backend/api/openapi/dist/conformance-matrix.json +276 -0
- package/dist/resources/templates/go-backend/api/openapi/document.go +30 -0
- package/dist/resources/templates/go-backend/api/openapi/package.json +28 -0
- package/dist/resources/templates/go-backend/api/openapi/pnpm-lock.yaml +3052 -0
- package/dist/resources/templates/go-backend/api/openapi/redocly-source.yaml +18 -0
- package/dist/resources/templates/go-backend/api/openapi/redocly.yaml +8 -0
- package/dist/resources/templates/go-backend/api/openapi/sdk-generators.json +16 -0
- package/dist/resources/templates/go-backend/api/openapi/service-registry.json +39 -0
- package/dist/resources/templates/go-backend/api/openapi/services/product-api/conformance/runtime.arazzo.yaml +65 -0
- package/dist/resources/templates/go-backend/api/openapi/services/product-api/dist/internal.openapi.json +327 -0
- package/dist/resources/templates/go-backend/api/openapi/services/product-api/dist/runtime-contract.json +56 -0
- package/dist/resources/templates/go-backend/api/openapi/services/product-api/openapi.yaml +222 -0
- package/dist/resources/templates/go-backend/api/openapi/services/worker/conformance/runtime.arazzo.yaml +65 -0
- package/dist/resources/templates/go-backend/api/openapi/services/worker/dist/internal.openapi.json +327 -0
- package/dist/resources/templates/go-backend/api/openapi/services/worker/dist/runtime-contract.json +56 -0
- package/dist/resources/templates/go-backend/api/openapi/services/worker/openapi.yaml +222 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/breaking.mjs +416 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/build.mjs +103 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/conformance_coverage.mjs +111 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/contract_compiler.mjs +62 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/contract_policy.mjs +208 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/delegated_contract.mjs +302 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/deterministic_archive.mjs +69 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_example_privacy.mjs +93 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_projection.mjs +498 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/documentation_quality.mjs +346 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/git_artifact_history.mjs +188 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/manifest.mjs +170 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/overlay.mjs +98 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/project.mjs +549 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/route_contract.mjs +156 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/runtime_conformance.mjs +193 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/scalar_asset_localization.mjs +164 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/sdk_generator.mjs +229 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/semantic_version.mjs +64 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/service_contract_inputs.mjs +16 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/breaking.test.mjs +365 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/build.test.mjs +42 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/conformance_coverage.test.mjs +88 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/contract_policy.test.mjs +257 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/delegated_contract.test.mjs +205 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_example_privacy.test.mjs +51 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_projection.test.mjs +368 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/documentation_quality.test.mjs +151 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/git_artifact_history.test.mjs +60 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/head_policy.test.mjs +8 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/overlay.test.mjs +44 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/projection.test.mjs +270 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/redocly_documentation_rules.test.mjs +146 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/release_manifest.test.mjs +76 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/route_contract.test.mjs +119 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/runtime_conformance.test.mjs +75 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/scalar_asset_localization.test.mjs +50 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/sdk_generator.test.mjs +31 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/semantic_version.test.mjs +60 -0
- package/dist/resources/templates/go-backend/api/openapi/tooling/test/service_contract_inputs.test.mjs +27 -0
- package/dist/resources/templates/go-backend/cmd/internal/runtime/resources.go +125 -0
- package/dist/resources/templates/go-backend/cmd/internal/runtime/runtime.go +102 -0
- package/dist/resources/templates/go-backend/cmd/internal/runtime/runtime_test.go +70 -0
- package/dist/resources/templates/go-backend/cmd/product-api/lifecycle_test.go +58 -0
- package/dist/resources/templates/go-backend/cmd/product-api/main.go +32 -0
- package/dist/resources/templates/go-backend/cmd/product-api/wire.go +13 -0
- package/dist/resources/templates/go-backend/cmd/product-api/wire_gen.go +94 -0
- package/dist/resources/templates/go-backend/cmd/worker/main.go +47 -0
- package/dist/resources/templates/go-backend/cmd/worker/wire.go +14 -0
- package/dist/resources/templates/go-backend/cmd/worker/wire_gen.go +111 -0
- package/dist/resources/templates/go-backend/configs/config.yaml +37 -0
- package/dist/resources/templates/go-backend/deployments/compose.yaml +71 -0
- package/dist/resources/templates/go-backend/docs/openapi-provenance.json +489 -0
- package/dist/resources/templates/go-backend/docs/runtime-provenance.json +175 -0
- package/dist/resources/templates/go-backend/docs/source-provenance.json +3568 -0
- package/dist/resources/templates/go-backend/docs/standards-provenance.json +1624 -0
- package/dist/resources/templates/go-backend/go.mod +256 -0
- package/dist/resources/templates/go-backend/go.sum +805 -0
- package/dist/resources/templates/go-backend/internal/common/canonicaljson/canonical.go +370 -0
- package/dist/resources/templates/go-backend/internal/common/canonicaljson/canonical_test.go +223 -0
- package/dist/resources/templates/go-backend/internal/common/checkoutbff/contracts.go +125 -0
- package/dist/resources/templates/go-backend/internal/common/checkoutbff/platform_client.go +212 -0
- package/dist/resources/templates/go-backend/internal/common/checkoutbff/platform_client_test.go +319 -0
- package/dist/resources/templates/go-backend/internal/common/contentaccess/contentaccess.go +50 -0
- package/dist/resources/templates/go-backend/internal/common/contracts/contact.go +85 -0
- package/dist/resources/templates/go-backend/internal/common/ctxutil/identity.go +20 -0
- package/dist/resources/templates/go-backend/internal/common/ctxutil/product.go +53 -0
- package/dist/resources/templates/go-backend/internal/common/enumdomain/payment.go +12 -0
- package/dist/resources/templates/go-backend/internal/common/enums/dto_admin.go +9 -0
- package/dist/resources/templates/go-backend/internal/common/enums/enum.go +1247 -0
- package/dist/resources/templates/go-backend/internal/common/enums/handler_admin.go +66 -0
- package/dist/resources/templates/go-backend/internal/common/enums/module.go +46 -0
- package/dist/resources/templates/go-backend/internal/common/enums/provider.go +10 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register.go +11 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_audit.go +274 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_command_replay.go +12 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_config.go +27 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_locale.go +37 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_ops.go +14 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_outbox.go +15 -0
- package/dist/resources/templates/go-backend/internal/common/enums/register_rule_expression.go +63 -0
- package/dist/resources/templates/go-backend/internal/common/enums/registry.go +77 -0
- package/dist/resources/templates/go-backend/internal/common/httporigin/origin.go +62 -0
- package/dist/resources/templates/go-backend/internal/common/httporigin/origin_test.go +38 -0
- package/dist/resources/templates/go-backend/internal/common/iamcredential/plaintext.go +35 -0
- package/dist/resources/templates/go-backend/internal/common/iamcredential/plaintext_test.go +29 -0
- package/dist/resources/templates/go-backend/internal/common/iamscope/scope.go +212 -0
- package/dist/resources/templates/go-backend/internal/common/iamscope/scope_binding.go +26 -0
- package/dist/resources/templates/go-backend/internal/common/iamscope/scope_filter.go +173 -0
- package/dist/resources/templates/go-backend/internal/common/iamscope/scope_filter_test.go +279 -0
- package/dist/resources/templates/go-backend/internal/common/internalapi/authorization_details.go +10 -0
- package/dist/resources/templates/go-backend/internal/common/internalapi/route_permission_policies.go +660 -0
- package/dist/resources/templates/go-backend/internal/common/internalapi/route_permission_policies_test.go +331 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/audience_token_source.go +166 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/bootstrap_token_exchanger.go +183 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/bound_service_token_signer.go +52 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/delegated_access_token_exchanger.go +189 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/delegated_access_token_exchanger_test.go +159 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/product_scoped_service_token_signer.go +92 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/provider.go +25 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/request_signer.go +86 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/resolver.go +69 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/resolver_test.go +42 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/route_scope.go +95 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/route_scope_test.go +78 -0
- package/dist/resources/templates/go-backend/internal/common/internalservice/service_identity_test.go +387 -0
- package/dist/resources/templates/go-backend/internal/common/jsonschema/compiler.go +100 -0
- package/dist/resources/templates/go-backend/internal/common/jsonschema/compiler_test.go +41 -0
- package/dist/resources/templates/go-backend/internal/common/jwksapi/handler.go +83 -0
- package/dist/resources/templates/go-backend/internal/common/jwksapi/handler_test.go +104 -0
- package/dist/resources/templates/go-backend/internal/common/locale/locale.go +145 -0
- package/dist/resources/templates/go-backend/internal/common/locale/locale_test.go +75 -0
- package/dist/resources/templates/go-backend/internal/common/mediaref/mediaref.go +54 -0
- package/dist/resources/templates/go-backend/internal/common/mediaref/mediaref_test.go +77 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/apikey_auth.go +320 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/apikey_throttle.go +158 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/auth.go +40 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/auth_test.go +50 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/client_context.go +86 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/cors.go +68 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/event_context.go +18 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/gateway_identity.go +279 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/helpers.go +159 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_route_permission.go +171 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_token_auth.go +151 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/iam_delegated_token_auth_test.go +99 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/iam_service_identity.go +138 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/iam_service_token_auth.go +74 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/idempotent.go +273 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/idempotent_test.go +83 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/internal_route_permission.go +45 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/internal_route_permission_test.go +186 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/logging.go +191 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/metrics.go +45 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/middleware_test.go +1516 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/principal_context.go +160 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/principal_context_test.go +355 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/product_context.go +100 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/recovery.go +40 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/referral_attribution.go +178 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/requestid.go +48 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/resource_permission.go +790 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/resource_permission_test.go +440 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/service_credential_auth.go +67 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/tenant.go +148 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/throttle.go +310 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/trusted_client_ip.go +23 -0
- package/dist/resources/templates/go-backend/internal/common/middleware/trusted_client_ip_test.go +60 -0
- package/dist/resources/templates/go-backend/internal/common/money/currency.go +25 -0
- package/dist/resources/templates/go-backend/internal/common/money/errors.go +23 -0
- package/dist/resources/templates/go-backend/internal/common/money/format.go +123 -0
- package/dist/resources/templates/go-backend/internal/common/money/format_test.go +204 -0
- package/dist/resources/templates/go-backend/internal/common/money/gateway.go +144 -0
- package/dist/resources/templates/go-backend/internal/common/money/gateway_test.go +165 -0
- package/dist/resources/templates/go-backend/internal/common/money/rounding.go +56 -0
- package/dist/resources/templates/go-backend/internal/common/money/rounding_test.go +51 -0
- package/dist/resources/templates/go-backend/internal/common/principal/context.go +56 -0
- package/dist/resources/templates/go-backend/internal/common/principal/principal.go +49 -0
- package/dist/resources/templates/go-backend/internal/common/productcode/code.go +24 -0
- package/dist/resources/templates/go-backend/internal/common/productcode/code_test.go +35 -0
- package/dist/resources/templates/go-backend/internal/common/providerconfig/schema.go +577 -0
- package/dist/resources/templates/go-backend/internal/common/providerconfig/schema_test.go +47 -0
- package/dist/resources/templates/go-backend/internal/common/requestprivacy/request.go +246 -0
- package/dist/resources/templates/go-backend/internal/common/requestprivacy/request_test.go +170 -0
- package/dist/resources/templates/go-backend/internal/common/response/pagination.go +60 -0
- package/dist/resources/templates/go-backend/internal/common/response/response.go +110 -0
- package/dist/resources/templates/go-backend/internal/common/response/response_test.go +463 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/ast.go +141 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/ast_test.go +81 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/canonical.go +184 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/canonical_test.go +319 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/decoder.go +555 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/decoder_test.go +260 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/errors.go +55 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/evaluator.go +96 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/evaluator_test.go +220 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/fuzz_test.go +116 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/limits.go +331 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/schema.go +412 -0
- package/dist/resources/templates/go-backend/internal/common/ruleexpression/schema_test.go +164 -0
- package/dist/resources/templates/go-backend/internal/common/runtimeinput/runtime_input.go +627 -0
- package/dist/resources/templates/go-backend/internal/common/runtimeinput/runtime_input_test.go +245 -0
- package/dist/resources/templates/go-backend/internal/common/semver/errors.go +6 -0
- package/dist/resources/templates/go-backend/internal/common/semver/semver.go +125 -0
- package/dist/resources/templates/go-backend/internal/common/semver/semver_test.go +205 -0
- package/dist/resources/templates/go-backend/internal/common/serviceidentity/audience.go +48 -0
- package/dist/resources/templates/go-backend/internal/common/serviceidentity/audience_test.go +35 -0
- package/dist/resources/templates/go-backend/internal/common/serviceidentity/resource_identifier.go +33 -0
- package/dist/resources/templates/go-backend/internal/common/serviceidentity/resource_identifier_test.go +32 -0
- package/dist/resources/templates/go-backend/internal/common/tradeno/generator.go +99 -0
- package/dist/resources/templates/go-backend/internal/common/tradeno/generator_test.go +396 -0
- package/dist/resources/templates/go-backend/internal/common/tradeno/prefix.go +247 -0
- package/dist/resources/templates/go-backend/internal/common/types/asset_url.go +11 -0
- package/dist/resources/templates/go-backend/internal/common/types/billing.go +89 -0
- package/dist/resources/templates/go-backend/internal/common/types/billing_test.go +77 -0
- package/dist/resources/templates/go-backend/internal/common/types/country.go +74 -0
- package/dist/resources/templates/go-backend/internal/common/types/country_test.go +28 -0
- package/dist/resources/templates/go-backend/internal/common/types/currency.go +60 -0
- package/dist/resources/templates/go-backend/internal/common/types/identifiers.go +41 -0
- package/dist/resources/templates/go-backend/internal/common/types/operator.go +28 -0
- package/dist/resources/templates/go-backend/internal/common/types/subscription_entitlement.go +24 -0
- package/dist/resources/templates/go-backend/internal/common/types/subscription_entitlement_test.go +35 -0
- package/dist/resources/templates/go-backend/internal/common/types/tier.go +72 -0
- package/dist/resources/templates/go-backend/internal/common/types/types.go +411 -0
- package/dist/resources/templates/go-backend/internal/common/types/types_test.go +295 -0
- package/dist/resources/templates/go-backend/internal/common/utils/constants.go +100 -0
- package/dist/resources/templates/go-backend/internal/common/utils/crypto.go +158 -0
- package/dist/resources/templates/go-backend/internal/common/utils/crypto_test.go +345 -0
- package/dist/resources/templates/go-backend/internal/common/utils/duration.go +25 -0
- package/dist/resources/templates/go-backend/internal/common/utils/helpers.go +18 -0
- package/dist/resources/templates/go-backend/internal/common/utils/json.go +62 -0
- package/dist/resources/templates/go-backend/internal/common/utils/json_test.go +76 -0
- package/dist/resources/templates/go-backend/internal/common/utils/pagination.go +51 -0
- package/dist/resources/templates/go-backend/internal/common/utils/pagination_test.go +45 -0
- package/dist/resources/templates/go-backend/internal/common/utils/pointer.go +107 -0
- package/dist/resources/templates/go-backend/internal/common/utils/pointer_test.go +15 -0
- package/dist/resources/templates/go-backend/internal/common/utils/slice.go +24 -0
- package/dist/resources/templates/go-backend/internal/common/utils/snowflake.go +110 -0
- package/dist/resources/templates/go-backend/internal/common/utils/snowflake_test.go +316 -0
- package/dist/resources/templates/go-backend/internal/common/utils/string.go +16 -0
- package/dist/resources/templates/go-backend/internal/common/utils/timefmt.go +42 -0
- package/dist/resources/templates/go-backend/internal/common/validator/validator.go +136 -0
- package/dist/resources/templates/go-backend/internal/common/validator/validator_test.go +240 -0
- package/dist/resources/templates/go-backend/internal/common/youtubeapi/client.go +224 -0
- package/dist/resources/templates/go-backend/internal/core/apicontract/document.go +269 -0
- package/dist/resources/templates/go-backend/internal/core/apicontract/document_test.go +104 -0
- package/dist/resources/templates/go-backend/internal/core/apicontract/route_validator.go +78 -0
- package/dist/resources/templates/go-backend/internal/core/apicontract/route_validator_test.go +108 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/assets/scalar-api-reference.js +2385 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/assets/scalar-api-reference.metadata.json +10 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/route.go +107 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/route_test.go +200 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/scalar.go +117 -0
- package/dist/resources/templates/go-backend/internal/core/apidocs/scalar_test.go +99 -0
- package/dist/resources/templates/go-backend/internal/core/audit/access_log_policy.go +91 -0
- package/dist/resources/templates/go-backend/internal/core/audit/access_log_policy_test.go +51 -0
- package/dist/resources/templates/go-backend/internal/core/audit/actor_resolver.go +36 -0
- package/dist/resources/templates/go-backend/internal/core/audit/constants.go +30 -0
- package/dist/resources/templates/go-backend/internal/core/audit/context.go +119 -0
- package/dist/resources/templates/go-backend/internal/core/audit/context_test.go +310 -0
- package/dist/resources/templates/go-backend/internal/core/audit/dto.go +468 -0
- package/dist/resources/templates/go-backend/internal/core/audit/dto_admin.go +172 -0
- package/dist/resources/templates/go-backend/internal/core/audit/enum.go +460 -0
- package/dist/resources/templates/go-backend/internal/core/audit/enum_test.go +314 -0
- package/dist/resources/templates/go-backend/internal/core/audit/errors.go +9 -0
- package/dist/resources/templates/go-backend/internal/core/audit/handler.go +568 -0
- package/dist/resources/templates/go-backend/internal/core/audit/listener.go +319 -0
- package/dist/resources/templates/go-backend/internal/core/audit/listener_test.go +98 -0
- package/dist/resources/templates/go-backend/internal/core/audit/middleware.go +669 -0
- package/dist/resources/templates/go-backend/internal/core/audit/middleware_test.go +268 -0
- package/dist/resources/templates/go-backend/internal/core/audit/model.go +306 -0
- package/dist/resources/templates/go-backend/internal/core/audit/partition_job.go +316 -0
- package/dist/resources/templates/go-backend/internal/core/audit/ports.go +9 -0
- package/dist/resources/templates/go-backend/internal/core/audit/provider.go +30 -0
- package/dist/resources/templates/go-backend/internal/core/audit/repository.go +1007 -0
- package/dist/resources/templates/go-backend/internal/core/audit/repository_test.go +934 -0
- package/dist/resources/templates/go-backend/internal/core/audit/router.go +85 -0
- package/dist/resources/templates/go-backend/internal/core/audit/service.go +770 -0
- package/dist/resources/templates/go-backend/internal/core/audit/service_test.go +331 -0
- package/dist/resources/templates/go-backend/internal/core/audit/vo_admin.go +475 -0
- package/dist/resources/templates/go-backend/internal/core/cache/config.go +30 -0
- package/dist/resources/templates/go-backend/internal/core/cache/key.go +41 -0
- package/dist/resources/templates/go-backend/internal/core/cache/key_test.go +62 -0
- package/dist/resources/templates/go-backend/internal/core/cache/l1.go +153 -0
- package/dist/resources/templates/go-backend/internal/core/cache/l1_test.go +212 -0
- package/dist/resources/templates/go-backend/internal/core/cache/manager.go +278 -0
- package/dist/resources/templates/go-backend/internal/core/cache/manager_provider.go +24 -0
- package/dist/resources/templates/go-backend/internal/core/cache/metrics.go +126 -0
- package/dist/resources/templates/go-backend/internal/core/cache/namespace.go +46 -0
- package/dist/resources/templates/go-backend/internal/core/cache/namespace_test.go +90 -0
- package/dist/resources/templates/go-backend/internal/core/cache/options.go +39 -0
- package/dist/resources/templates/go-backend/internal/core/cache/options_test.go +96 -0
- package/dist/resources/templates/go-backend/internal/core/cache/redis.go +311 -0
- package/dist/resources/templates/go-backend/internal/core/cache/redis_test.go +51 -0
- package/dist/resources/templates/go-backend/internal/core/cache/serializer.go +31 -0
- package/dist/resources/templates/go-backend/internal/core/cache/serializer_test.go +139 -0
- package/dist/resources/templates/go-backend/internal/core/cache/singleflight.go +53 -0
- package/dist/resources/templates/go-backend/internal/core/cache/singleflight_test.go +211 -0
- package/dist/resources/templates/go-backend/internal/core/cache/warming.go +86 -0
- package/dist/resources/templates/go-backend/internal/core/clock/clock.go +66 -0
- package/dist/resources/templates/go-backend/internal/core/clock/clock_test.go +26 -0
- package/dist/resources/templates/go-backend/internal/core/clock/runtime_clock.go +283 -0
- package/dist/resources/templates/go-backend/internal/core/clock/runtime_clock_test.go +98 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/errors.go +6 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/model.go +90 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/model_test.go +79 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/namespace.go +7 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/persistence.go +269 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/persistence_test.go +185 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/provider.go +9 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/repository.go +22 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/service.go +853 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/service_persistence_test.go +432 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/service_test.go +891 -0
- package/dist/resources/templates/go-backend/internal/core/commandreplay/types.go +121 -0
- package/dist/resources/templates/go-backend/internal/core/config/config.go +2069 -0
- package/dist/resources/templates/go-backend/internal/core/config/config_test.go +1122 -0
- package/dist/resources/templates/go-backend/internal/core/config/contract/contract_test.go +388 -0
- package/dist/resources/templates/go-backend/internal/core/config/contract/docs.go +198 -0
- package/dist/resources/templates/go-backend/internal/core/config/contract/verify.go +424 -0
- package/dist/resources/templates/go-backend/internal/core/config/enum.go +46 -0
- package/dist/resources/templates/go-backend/internal/core/config/metadata.go +717 -0
- package/dist/resources/templates/go-backend/internal/core/config/metadata_test.go +228 -0
- package/dist/resources/templates/go-backend/internal/core/config/product_admin_config_test.go +210 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/aes_gcm.go +111 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/aes_gcm_test.go +364 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/encryptor.go +12 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/envelope_encryptor.go +134 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/envelope_encryptor_test.go +118 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/pem.go +112 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/pem_test.go +44 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/provider.go +130 -0
- package/dist/resources/templates/go-backend/internal/core/crypto/provider_test.go +92 -0
- package/dist/resources/templates/go-backend/internal/core/database/base_model.go +24 -0
- package/dist/resources/templates/go-backend/internal/core/database/clickhouse.go +121 -0
- package/dist/resources/templates/go-backend/internal/core/database/database.go +112 -0
- package/dist/resources/templates/go-backend/internal/core/database/database_logger_test.go +95 -0
- package/dist/resources/templates/go-backend/internal/core/database/errors.go +25 -0
- package/dist/resources/templates/go-backend/internal/core/database/metrics_plugin.go +105 -0
- package/dist/resources/templates/go-backend/internal/core/database/pool_collector.go +71 -0
- package/dist/resources/templates/go-backend/internal/core/database/read_replica.go +520 -0
- package/dist/resources/templates/go-backend/internal/core/database/transaction.go +170 -0
- package/dist/resources/templates/go-backend/internal/core/database/transaction_test.go +282 -0
- package/dist/resources/templates/go-backend/internal/core/distlock/lock.go +353 -0
- package/dist/resources/templates/go-backend/internal/core/distlock/lock_test.go +106 -0
- package/dist/resources/templates/go-backend/internal/core/errors/handler.go +189 -0
- package/dist/resources/templates/go-backend/internal/core/errors/handler_test.go +515 -0
- package/dist/resources/templates/go-backend/internal/core/eventbus/eventbus.go +667 -0
- package/dist/resources/templates/go-backend/internal/core/eventbus/eventbus_test.go +792 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/noop.go +22 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/provider.go +20 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/publisher.go +38 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/redis.go +109 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/routing.go +104 -0
- package/dist/resources/templates/go-backend/internal/core/eventstream/routing_test.go +71 -0
- package/dist/resources/templates/go-backend/internal/core/geoip/model.go +19 -0
- package/dist/resources/templates/go-backend/internal/core/geoip/service.go +88 -0
- package/dist/resources/templates/go-backend/internal/core/health/health.go +333 -0
- package/dist/resources/templates/go-backend/internal/core/health/health_test.go +27 -0
- package/dist/resources/templates/go-backend/internal/core/httpclient/client.go +772 -0
- package/dist/resources/templates/go-backend/internal/core/httpclient/client_test.go +287 -0
- package/dist/resources/templates/go-backend/internal/core/httpclient/download.go +578 -0
- package/dist/resources/templates/go-backend/internal/core/httpclient/download_test.go +374 -0
- package/dist/resources/templates/go-backend/internal/core/jwtkeyring/jwk.go +38 -0
- package/dist/resources/templates/go-backend/internal/core/jwtkeyring/keyring.go +144 -0
- package/dist/resources/templates/go-backend/internal/core/jwtkeyring/keyring_test.go +128 -0
- package/dist/resources/templates/go-backend/internal/core/jwtkeyring/registry.go +60 -0
- package/dist/resources/templates/go-backend/internal/core/logger/logger.go +53 -0
- package/dist/resources/templates/go-backend/internal/core/logger/logger_test.go +194 -0
- package/dist/resources/templates/go-backend/internal/core/observability/metrics.go +358 -0
- package/dist/resources/templates/go-backend/internal/core/observability/sentry.go +445 -0
- package/dist/resources/templates/go-backend/internal/core/observability/sentry_privacy_test.go +175 -0
- package/dist/resources/templates/go-backend/internal/core/observability/tracing.go +187 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/model.go +314 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/model_test.go +77 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/persistence.go +51 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/provider.go +23 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/relay.go +1138 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/relay_postgres_test.go +257 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/relay_test.go +690 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/rescheduler.go +164 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/rescheduler_test.go +209 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/writer.go +249 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/writer_postgres_test.go +170 -0
- package/dist/resources/templates/go-backend/internal/core/outbox/writer_test.go +123 -0
- package/dist/resources/templates/go-backend/internal/core/provider.go +198 -0
- package/dist/resources/templates/go-backend/internal/core/queue/metrics_middleware.go +38 -0
- package/dist/resources/templates/go-backend/internal/core/queue/metrics_middleware_test.go +12 -0
- package/dist/resources/templates/go-backend/internal/core/queue/queue.go +288 -0
- package/dist/resources/templates/go-backend/internal/core/queue/queue_test.go +159 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/bulkhead.go +514 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/bulkhead_test.go +984 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/circuitbreaker.go +358 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/circuitbreaker_test.go +788 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/retry.go +318 -0
- package/dist/resources/templates/go-backend/internal/core/resilience/retry_test.go +735 -0
- package/dist/resources/templates/go-backend/internal/core/schedule/recorder.go +305 -0
- package/dist/resources/templates/go-backend/internal/core/schedule/run_context.go +124 -0
- package/dist/resources/templates/go-backend/internal/core/schedule/run_context_test.go +85 -0
- package/dist/resources/templates/go-backend/internal/core/schedule/scheduler.go +1589 -0
- package/dist/resources/templates/go-backend/internal/core/schedule/scheduler_control_test.go +808 -0
- package/dist/resources/templates/go-backend/internal/core/storage/oss_provider.go +398 -0
- package/dist/resources/templates/go-backend/internal/core/storage/oss_provider_test.go +89 -0
- package/dist/resources/templates/go-backend/internal/core/storage/path.go +110 -0
- package/dist/resources/templates/go-backend/internal/core/storage/path_test.go +301 -0
- package/dist/resources/templates/go-backend/internal/core/storage/s3_provider.go +489 -0
- package/dist/resources/templates/go-backend/internal/core/storage/s3_provider_test.go +60 -0
- package/dist/resources/templates/go-backend/internal/core/storage/storage.go +268 -0
- package/dist/resources/templates/go-backend/internal/core/storage/validation.go +225 -0
- package/dist/resources/templates/go-backend/internal/core/storage/validation_test.go +495 -0
- package/dist/resources/templates/go-backend/internal/core/temporal/logger.go +38 -0
- package/dist/resources/templates/go-backend/internal/core/temporal/provider.go +126 -0
- package/dist/resources/templates/go-backend/internal/core/temporal/provider_test.go +67 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/client.go +282 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/client_test.go +81 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/config.go +58 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/handler.go +53 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/hub.go +269 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/message.go +273 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/notifier.go +92 -0
- package/dist/resources/templates/go-backend/internal/core/websocket/provider.go +33 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/action.go +77 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/action_test.go +238 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/condition.go +107 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/decision.go +256 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/enum.go +643 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/errors.go +102 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/principal_record.go +21 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/product_context.go +486 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/resource.go +215 -0
- package/dist/resources/templates/go-backend/internal/integrations/onex/iam/resource_test.go +242 -0
- package/dist/resources/templates/go-backend/internal/products/README.md +5 -0
- package/dist/resources/templates/go-backend/internal/sharedevents/README.md +5 -0
- package/dist/resources/templates/go-backend/migrations/000001_infrastructure.down.sql +13 -0
- package/dist/resources/templates/go-backend/migrations/000001_infrastructure.up.sql +886 -0
- package/dist/resources/templates/go-backend/pkg/apierror/error.go +327 -0
- package/dist/resources/templates/go-backend/pkg/apierror/error_code.go +65 -0
- package/dist/resources/templates/go-backend/pkg/apierror/error_test.go +41 -0
- package/dist/resources/templates/go-backend/pkg/apierror/error_type.go +14 -0
- package/dist/resources/templates/go-backend/pkg/apierror/http_response.go +216 -0
- package/dist/resources/templates/go-backend/pkg/apierror/http_response_test.go +216 -0
- package/dist/resources/templates/go-backend/scripts/check-openapi-clean-deletion.sh +54 -0
- package/dist/resources/templates/go-backend/scripts/test-migrations.sh +32 -0
- package/dist/resources/templates/go-backend/tests/infrastructure.sql +69 -0
- package/dist/resources/templates/mcp-server/.claude/docs/stack.md +338 -0
- package/dist/resources/templates/mcp-server/.editorconfig +13 -0
- package/dist/resources/templates/mcp-server/.env.example +8 -0
- package/dist/resources/templates/mcp-server/.github/ISSUE_TEMPLATE/bug_report.yml +104 -0
- package/dist/resources/templates/mcp-server/.github/ISSUE_TEMPLATE/feature_request.yml +54 -0
- package/dist/resources/templates/mcp-server/.github/PULL_REQUEST_TEMPLATE.md +36 -0
- package/dist/resources/templates/mcp-server/.github/workflows/ci.yml +78 -0
- package/dist/resources/templates/mcp-server/.husky/commit-msg +1 -0
- package/dist/resources/templates/mcp-server/.husky/pre-commit +1 -0
- package/dist/resources/templates/mcp-server/.lintstagedrc.json +4 -0
- package/dist/resources/templates/mcp-server/.nvmrc +1 -0
- package/dist/resources/templates/mcp-server/.prettierrc +8 -0
- package/dist/resources/templates/mcp-server/CONTRIBUTING.md +184 -0
- package/dist/resources/templates/mcp-server/Dockerfile +23 -0
- package/dist/resources/templates/mcp-server/LICENSE +21 -0
- package/dist/resources/templates/mcp-server/README.md +123 -0
- package/dist/resources/templates/mcp-server/_gitignore +26 -0
- package/dist/resources/templates/mcp-server/commitlint.config.js +24 -0
- package/dist/resources/templates/mcp-server/eslint.config.js +30 -0
- package/dist/resources/templates/mcp-server/package.json +72 -0
- package/dist/resources/templates/mcp-server/src/index.ts +27 -0
- package/dist/resources/templates/mcp-server/src/resources.ts +33 -0
- package/dist/resources/templates/mcp-server/src/services/.gitkeep +0 -0
- package/dist/resources/templates/mcp-server/src/tools.ts +43 -0
- package/dist/resources/templates/mcp-server/src/types/index.ts +19 -0
- package/dist/resources/templates/mcp-server/src/utils/index.ts +31 -0
- package/dist/resources/templates/mcp-server/tsconfig.json +22 -0
- package/dist/resources/templates/mcp-server/tsup.config.ts +14 -0
- package/dist/resources/templates/mcp-server/vitest.config.ts +15 -0
- package/dist/resources/templates/nuxt/.claude/docs/stack.md +666 -0
- package/dist/resources/templates/nuxt/.editorconfig +15 -0
- package/dist/resources/templates/nuxt/.env.example +22 -0
- package/dist/resources/templates/nuxt/.github/workflows/ci.yml +34 -0
- package/dist/resources/templates/nuxt/.husky/commit-msg +1 -0
- package/dist/resources/templates/nuxt/.husky/pre-commit +1 -0
- package/dist/resources/templates/nuxt/.nvmrc +1 -0
- package/dist/resources/templates/nuxt/.prettierignore +9 -0
- package/dist/resources/templates/nuxt/.prettierrc +1 -0
- package/dist/resources/templates/nuxt/README.md +23 -0
- package/dist/resources/templates/nuxt/_gitignore +7 -0
- package/dist/resources/templates/nuxt/app/app.config.ts +105 -0
- package/dist/resources/templates/nuxt/app/i18n/locales/en.json +5 -0
- package/dist/resources/templates/nuxt/app/pages/app/index.vue +224 -0
- package/dist/resources/templates/nuxt/app/pages/authors/[slug].vue +37 -0
- package/dist/resources/templates/nuxt/app/pages/blog/[slug].vue +55 -0
- package/dist/resources/templates/nuxt/app/pages/blog/category/[category].vue +38 -0
- package/dist/resources/templates/nuxt/app/pages/blog/index.vue +46 -0
- package/dist/resources/templates/nuxt/app/pages/index.vue +626 -0
- package/dist/resources/templates/nuxt/app/pages/legal/privacy.vue +21 -0
- package/dist/resources/templates/nuxt/app/pages/legal/terms.vue +21 -0
- package/dist/resources/templates/nuxt/app/pages/ui/index.vue +397 -0
- package/dist/resources/templates/nuxt/commitlint.config.mjs +1 -0
- package/dist/resources/templates/nuxt/eslint.config.mjs +4 -0
- package/dist/resources/templates/nuxt/lint-staged.config.mjs +8 -0
- package/dist/resources/templates/nuxt/nuxt.config.ts +71 -0
- package/dist/resources/templates/nuxt/package.json +67 -0
- package/dist/resources/templates/nuxt/public/apple-touch-icon.png +0 -0
- package/dist/resources/templates/nuxt/public/favicon.ico +0 -0
- package/dist/resources/templates/nuxt/public/favicon.svg +5 -0
- package/dist/resources/templates/nuxt/public/icon-16x16.png +0 -0
- package/dist/resources/templates/nuxt/public/icon-192x192.png +0 -0
- package/dist/resources/templates/nuxt/public/icon-32x32.png +0 -0
- package/dist/resources/templates/nuxt/public/icon-512x512.png +0 -0
- package/dist/resources/templates/nuxt/public/logo.svg +6 -0
- package/dist/resources/templates/nuxt/public/media/hero-product-gallery.png +0 -0
- package/dist/resources/templates/nuxt/server/api/content/sitemap-urls.get.ts +12 -0
- package/dist/resources/templates/nuxt/server/api/preview.get.ts +9 -0
- package/dist/resources/templates/nuxt/stylelint.config.mjs +3 -0
- package/dist/resources/templates/nuxt/test/e2e/rendering.test.ts +13 -0
- package/dist/resources/templates/nuxt/tsconfig.json +3 -0
- package/dist/resources/templates/nuxt/vitest.config.ts +8 -0
- package/package.json +16 -12
|
@@ -0,0 +1,449 @@
|
|
|
1
|
+
# Architecture Document Template
|
|
2
|
+
|
|
3
|
+
> Design documents produced in plan mode must follow this skeleton.
|
|
4
|
+
> After completing a new module's design document, archive it at `docs/platform/{module}-architecture.md`.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Level A: New Module / Major Architecture Change
|
|
9
|
+
|
|
10
|
+
Complete architecture document, must include all of the following sections. Refer to existing documents in `docs/platform/`.
|
|
11
|
+
|
|
12
|
+
### Mandatory Skeleton
|
|
13
|
+
|
|
14
|
+
```markdown
|
|
15
|
+
# {Module Name} Architecture Design Document
|
|
16
|
+
|
|
17
|
+
> **Version**: 1.0
|
|
18
|
+
> **Module Complexity**: Full DDD / Simplified DDD / Flat
|
|
19
|
+
> **Tech Stack**: Go 1.24 + Gin + GORM + PostgreSQL 16 + Redis 7.0 [+ Asynq]
|
|
20
|
+
> **Design Reference**: {Industry reference, e.g. Stripe API, Shopify Order}
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 1. Architecture Overview
|
|
25
|
+
|
|
26
|
+
### 1.1 Module Position in the System
|
|
27
|
+
|
|
28
|
+
[ASCII diagram: Client → Gateway → BFF → This Module → Dependent Modules → Infrastructure]
|
|
29
|
+
|
|
30
|
+
### 1.2 Core Capabilities
|
|
31
|
+
|
|
32
|
+
| Capability | Description |
|
|
33
|
+
|------------|-------------|
|
|
34
|
+
| {Capability 1} | {One-line description} |
|
|
35
|
+
|
|
36
|
+
### 1.3 Design Principles
|
|
37
|
+
|
|
38
|
+
| Principle | Application in This Module |
|
|
39
|
+
|-----------|---------------------------|
|
|
40
|
+
| {Principle} | {Specific application} |
|
|
41
|
+
|
|
42
|
+
### 1.4 Module Complexity Assessment
|
|
43
|
+
|
|
44
|
+
{Answer the complexity decision tree: Does it have a state machine? → Does it have complex domain logic? → Which Tier?}
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 2. Core Concept Definitions
|
|
49
|
+
|
|
50
|
+
### 2.1 Concept Relationship Diagram
|
|
51
|
+
|
|
52
|
+
[ASCII diagram: Relationships between entities (1:N, N:M, reference)]
|
|
53
|
+
|
|
54
|
+
### 2.2 Concept Description Table
|
|
55
|
+
|
|
56
|
+
| Concept | Definition | Go Type | Persistence |
|
|
57
|
+
|---------|------------|---------|-------------|
|
|
58
|
+
| {Entity} | {One-line definition} | `domain.Xxx` | `p_{module}_xxx` |
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## 3. Database Design
|
|
63
|
+
|
|
64
|
+
### 3.1 Table Structure Overview
|
|
65
|
+
|
|
66
|
+
| Table Name | Description | Row Volume |
|
|
67
|
+
|------------|-------------|------------|
|
|
68
|
+
| `p_{module}_xxx` | {Purpose} | {Estimate} |
|
|
69
|
+
|
|
70
|
+
### 3.2 Detailed Table Definitions
|
|
71
|
+
|
|
72
|
+
Each table must include:
|
|
73
|
+
|
|
74
|
+
| Column | Type | Nullable | Default | Comment |
|
|
75
|
+
|--------|------|----------|---------|---------|
|
|
76
|
+
| `id` | `bigserial` | NO | — | Primary key |
|
|
77
|
+
| ... | ... | ... | ... | ... |
|
|
78
|
+
|
|
79
|
+
Index definitions:
|
|
80
|
+
|
|
81
|
+
| Index | Columns | Type | Purpose |
|
|
82
|
+
|-------|---------|------|---------|
|
|
83
|
+
| ... | ... | unique/btree/gin | ... |
|
|
84
|
+
|
|
85
|
+
### 3.3 Migration Files
|
|
86
|
+
|
|
87
|
+
```sql
|
|
88
|
+
-- Complete SQL, ready to execute
|
|
89
|
+
CREATE TABLE p_{module}_xxx (
|
|
90
|
+
...
|
|
91
|
+
);
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 4. Directory Structure Design
|
|
97
|
+
|
|
98
|
+
### 4.1 Complete Directory Tree
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
internal/platform/{module}/
|
|
102
|
+
├── module.go # Module facade
|
|
103
|
+
├── provider.go # Wire ProviderSet
|
|
104
|
+
├── domain/
|
|
105
|
+
│ ├── model.go # {List each Entity}
|
|
106
|
+
│ ├── enum.go # {List each enum}
|
|
107
|
+
│ ├── repository.go # {List each repository interface}
|
|
108
|
+
│ └── events.go # {If domain events exist}
|
|
109
|
+
├── application/
|
|
110
|
+
│ ├── service.go # {List each Service}
|
|
111
|
+
│ ├── handler.go # {List each Handler}
|
|
112
|
+
│ ├── dto.go # {List each Request DTO}
|
|
113
|
+
│ ├── vo.go # {List each Response VO}
|
|
114
|
+
│ └── listener.go # {If event listeners exist}
|
|
115
|
+
└── infrastructure/
|
|
116
|
+
└── persistence.go # {List repository implementations}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 4.2 Package Split Decision
|
|
120
|
+
|
|
121
|
+
{Answer the package split rules from CLAUDE.md: Does application/ need sub-domain splitting? Does domain/ need splitting by aggregate root?}
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## 5. Domain Model Design
|
|
126
|
+
|
|
127
|
+
### 5.1 Aggregate Root
|
|
128
|
+
|
|
129
|
+
```go
|
|
130
|
+
type Xxx struct {
|
|
131
|
+
database.BaseModel
|
|
132
|
+
// Field definitions (with GORM tag + comment tag)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
func (x *Xxx) TableName() string { return "p_{module}_xxx" }
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 5.2 State Machine (if applicable)
|
|
139
|
+
|
|
140
|
+
```
|
|
141
|
+
State transition diagram:
|
|
142
|
+
pending → processing, cancelled
|
|
143
|
+
processing → completed, failed
|
|
144
|
+
completed → refunded (terminal)
|
|
145
|
+
cancelled (terminal)
|
|
146
|
+
failed (terminal)
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
```go
|
|
150
|
+
var xxxTransitions = map[XxxStatus][]XxxStatus{
|
|
151
|
+
XxxStatusPending: {XxxStatusProcessing, XxxStatusCancelled},
|
|
152
|
+
...
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### 5.3 Behavior Methods
|
|
157
|
+
|
|
158
|
+
| Method Signature | Purpose | Caller |
|
|
159
|
+
|------------------|---------|--------|
|
|
160
|
+
| `IsXxx() bool` | {Condition check} | Service |
|
|
161
|
+
| `CanTransitionTo(target) bool` | {State transition validity} | Service |
|
|
162
|
+
| `TransitionTo(target) error` | {Execute state transition} | Service |
|
|
163
|
+
|
|
164
|
+
### 5.4 Repository Interface
|
|
165
|
+
|
|
166
|
+
```go
|
|
167
|
+
type XxxRepository interface {
|
|
168
|
+
FindByID(ctx context.Context, id int64) (*Xxx, error)
|
|
169
|
+
Save(ctx context.Context, entity *Xxx) error
|
|
170
|
+
// Add as needed
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
### 5.5 Domain Events
|
|
175
|
+
|
|
176
|
+
| Event | Trigger | Consumer |
|
|
177
|
+
|-------|---------|----------|
|
|
178
|
+
| `XxxCreatedEvent` | After successful creation | {module} Listener |
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 6. Application Service Design
|
|
183
|
+
|
|
184
|
+
### 6.1 Service Method List
|
|
185
|
+
|
|
186
|
+
| Method | Parameters | Return | Business Rules |
|
|
187
|
+
|--------|------------|--------|----------------|
|
|
188
|
+
| `CreateXxx(ctx, req)` | `CreateXxxRequest` | `*XxxResponse, error` | {Key logic} |
|
|
189
|
+
|
|
190
|
+
### 6.2 Key Workflows
|
|
191
|
+
|
|
192
|
+
{Describe main business flows in steps:}
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
CreateXxx:
|
|
196
|
+
1. Validate input
|
|
197
|
+
2. Check business rules (call model methods)
|
|
198
|
+
3. Persist
|
|
199
|
+
4. Publish event with AuditChanges when the operation owns a domain event
|
|
200
|
+
5. Otherwise call audit.Enrich() after successful write; never use both audit paths
|
|
201
|
+
6. Return VO
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 7. API Interface Design
|
|
207
|
+
|
|
208
|
+
### 7.1 Endpoint List
|
|
209
|
+
|
|
210
|
+
| Method | Path | Auth | Handler | Description |
|
|
211
|
+
|--------|------|------|---------|-------------|
|
|
212
|
+
| POST | `/api/v1/xxx` | authenticated | `CreateXxx` | Create |
|
|
213
|
+
| GET | `/api/v1/xxx/:id` | authenticated | `GetXxx` | Query |
|
|
214
|
+
|
|
215
|
+
### 7.2 Request/Response Examples
|
|
216
|
+
|
|
217
|
+
**POST /api/v1/xxx**
|
|
218
|
+
|
|
219
|
+
Request:
|
|
220
|
+
```json
|
|
221
|
+
{
|
|
222
|
+
"name": "example",
|
|
223
|
+
"type": "standard"
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Response (201):
|
|
228
|
+
```json
|
|
229
|
+
{
|
|
230
|
+
"id": 1,
|
|
231
|
+
"name": "example",
|
|
232
|
+
"type": "standard",
|
|
233
|
+
"status": "pending",
|
|
234
|
+
"created_at": "2026-01-01T00:00:00Z"
|
|
235
|
+
}
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Error (422):
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"error": {
|
|
242
|
+
"type": "business_error",
|
|
243
|
+
"code": "xxx_limit_exceeded",
|
|
244
|
+
"message": "Cannot create more than 10 items"
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## 8. Event-Driven Integration (if cross-module interaction exists)
|
|
252
|
+
|
|
253
|
+
### 8.1 Published Events
|
|
254
|
+
|
|
255
|
+
| Event | Definition Location | Trigger |
|
|
256
|
+
|-------|---------------------|---------|
|
|
257
|
+
| `XxxCreatedEvent` | `sharedevents/events.go` | After successful creation |
|
|
258
|
+
|
|
259
|
+
### 8.2 Consumed Events
|
|
260
|
+
|
|
261
|
+
| Event | Source Module | Handling Logic |
|
|
262
|
+
|-------|--------------|----------------|
|
|
263
|
+
| `PaymentSucceededEvent` | payment | Update order status |
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
## 9. Wire Injection Design
|
|
268
|
+
|
|
269
|
+
### 9.1 ProviderSet
|
|
270
|
+
|
|
271
|
+
```go
|
|
272
|
+
var ProviderSet = wire.NewSet(
|
|
273
|
+
NewModule,
|
|
274
|
+
application.NewXxxService,
|
|
275
|
+
application.NewXxxHandler,
|
|
276
|
+
infrastructure.NewXxxRepository,
|
|
277
|
+
)
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### 9.2 Injection per cmd/
|
|
281
|
+
|
|
282
|
+
| cmd/ | Injected Content | Notes |
|
|
283
|
+
|------|------------------|-------|
|
|
284
|
+
| template-app | `*Module` | Full module (routes + listeners) |
|
|
285
|
+
| worker | `*XxxListener` | Event listeners only (no Handler) |
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## 10. Design Decisions
|
|
290
|
+
|
|
291
|
+
| Decision | Choice | Alternatives | Rationale |
|
|
292
|
+
|----------|--------|--------------|-----------|
|
|
293
|
+
| {Decision 1} | {Choice} | {Alternative} | {Reason} |
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 11. Implementation Plan
|
|
298
|
+
|
|
299
|
+
### Wave 1: Foundation
|
|
300
|
+
| File | Change |
|
|
301
|
+
|------|--------|
|
|
302
|
+
| `domain/model.go` | Create entities + behavior methods |
|
|
303
|
+
| `domain/enum.go` | Status enums + transition rules |
|
|
304
|
+
|
|
305
|
+
### Wave 2: Infrastructure
|
|
306
|
+
| File | Change |
|
|
307
|
+
|------|--------|
|
|
308
|
+
|
|
309
|
+
### Wave 3: Application
|
|
310
|
+
| File | Change |
|
|
311
|
+
|------|--------|
|
|
312
|
+
|
|
313
|
+
### Wave 4: Assembly
|
|
314
|
+
| File | Change |
|
|
315
|
+
|------|--------|
|
|
316
|
+
|
|
317
|
+
### Wave 5: Verification
|
|
318
|
+
- `go build ./...`
|
|
319
|
+
- `make wire`
|
|
320
|
+
- Quantitative verification (grep counts)
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 12. P1-P11 Verification
|
|
325
|
+
|
|
326
|
+
| Principle | Status | Notes |
|
|
327
|
+
|-----------|--------|-------|
|
|
328
|
+
| P1 Domain model has behavior | ✓ | {Specific notes} |
|
|
329
|
+
| P2 Service uses model methods | ✓ | |
|
|
330
|
+
| P3 Module is self-registering | ✓ | |
|
|
331
|
+
| P4 Handler has zero logic | ✓ | |
|
|
332
|
+
| P5 Inject minimum dependencies | ✓ | |
|
|
333
|
+
| P6 File placement | ✓ | |
|
|
334
|
+
| P7 Entity never exposed | ✓ | |
|
|
335
|
+
| P8 End-to-end traceability | ✓ | |
|
|
336
|
+
| P9 Correct status codes | ✓ | |
|
|
337
|
+
| P10 No deferred code | ✓ | |
|
|
338
|
+
| P11 Audit on writes | ✓ | |
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Optional Sections (add as needed)
|
|
342
|
+
|
|
343
|
+
Include the following sections based on module characteristics:
|
|
344
|
+
|
|
345
|
+
| Section | When Needed | Reference |
|
|
346
|
+
|---------|-------------|-----------|
|
|
347
|
+
| Security Design | Involves authentication, encryption, permissions | identity-architecture.md |
|
|
348
|
+
| Caching Strategy | Has Redis caching requirements | user-settings-architecture.md |
|
|
349
|
+
| Strategy Engine / Provider Abstraction | Multi-channel/multi-vendor integration | notification-architecture.md |
|
|
350
|
+
| Privacy Compliance (GDPR) | Stores personal data | user-architecture.md |
|
|
351
|
+
| Monitoring & Operations | Prometheus metrics / alerting | ratelimit-architecture.md |
|
|
352
|
+
| Internationalization | i18n requirements | appversion-architecture.md |
|
|
353
|
+
|
|
354
|
+
---
|
|
355
|
+
|
|
356
|
+
## Level B: Feature Addition / Significant Change
|
|
357
|
+
|
|
358
|
+
Adding features to an existing module or making significant changes. Does not require a full architecture document, but must produce all of the following sections:
|
|
359
|
+
|
|
360
|
+
```markdown
|
|
361
|
+
# {Feature Name} Design Document
|
|
362
|
+
|
|
363
|
+
## 1. Change Scope
|
|
364
|
+
|
|
365
|
+
| Dimension | Impact |
|
|
366
|
+
|-----------|--------|
|
|
367
|
+
| Modules | {List of affected modules} |
|
|
368
|
+
| Database Tables | {List of affected tables} |
|
|
369
|
+
| API Endpoints | {New/modified endpoints} |
|
|
370
|
+
| Events | {New/modified events} |
|
|
371
|
+
| Wire | {Affected cmd/ apps} |
|
|
372
|
+
|
|
373
|
+
## 2. Industry Reference
|
|
374
|
+
|
|
375
|
+
{How does the industry solve this problem? Who was referenced?}
|
|
376
|
+
|
|
377
|
+
## 3. Database Changes
|
|
378
|
+
|
|
379
|
+
For each new/modified field:
|
|
380
|
+
| Column | Type | Nullable | Default | Comment | Table |
|
|
381
|
+
|--------|------|----------|---------|---------|-------|
|
|
382
|
+
|
|
383
|
+
Migration SQL:
|
|
384
|
+
```sql
|
|
385
|
+
ALTER TABLE ...
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
## 4. Domain Model Changes
|
|
389
|
+
|
|
390
|
+
New/modified entity fields and behavior methods.
|
|
391
|
+
Include state machine changes (if any).
|
|
392
|
+
|
|
393
|
+
## 5. API Changes
|
|
394
|
+
|
|
395
|
+
Complete request/response contracts for new/modified endpoints.
|
|
396
|
+
|
|
397
|
+
## 6. Data Flow
|
|
398
|
+
|
|
399
|
+
For each new field, trace the full path:
|
|
400
|
+
Source → DTO → Service → Repository → Entity → VO → Response
|
|
401
|
+
|
|
402
|
+
## 7. Implementation Plan
|
|
403
|
+
|
|
404
|
+
File change list organized by Wave.
|
|
405
|
+
|
|
406
|
+
## 8. P1-P11 Verification
|
|
407
|
+
|
|
408
|
+
Confirm each affected principle one by one.
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
413
|
+
## Level C: Bug Fix / Minor Change
|
|
414
|
+
|
|
415
|
+
Small-scope fixes or adjustments. Must produce:
|
|
416
|
+
|
|
417
|
+
```markdown
|
|
418
|
+
# {Bug/Change} Fix Design
|
|
419
|
+
|
|
420
|
+
## 1. Root Cause Analysis
|
|
421
|
+
|
|
422
|
+
{What is the problem, why it happens, scope of impact}
|
|
423
|
+
|
|
424
|
+
## 2. Fix Design
|
|
425
|
+
|
|
426
|
+
{Specific approach, not just "fix the bug"}
|
|
427
|
+
|
|
428
|
+
## 3. Affected Files
|
|
429
|
+
|
|
430
|
+
| File | Change |
|
|
431
|
+
|------|--------|
|
|
432
|
+
| ... | ... |
|
|
433
|
+
|
|
434
|
+
## 4. Verification Method
|
|
435
|
+
|
|
436
|
+
{How to confirm the fix works and doesn't introduce new issues}
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Task Level Decision
|
|
442
|
+
|
|
443
|
+
```
|
|
444
|
+
Is this a new module or major architecture change?
|
|
445
|
+
→ YES: Level A (full architecture document)
|
|
446
|
+
→ NO: Does it touch 3+ files or change schema/API?
|
|
447
|
+
→ YES: Level B (focused design document)
|
|
448
|
+
→ NO: Level C (fix design)
|
|
449
|
+
```
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Development Checklist
|
|
2
|
+
|
|
3
|
+
> Workflow and quality gates. Rules in `CLAUDE.md`.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Feature Development Workflow
|
|
8
|
+
|
|
9
|
+
1. Design(架构评审)
|
|
10
|
+
2. Implementation
|
|
11
|
+
3. Self-review(对照 CLAUDE.md FORBIDDEN 表)
|
|
12
|
+
4. Pre-commit validation
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Pre-Commit Checklist
|
|
17
|
+
|
|
18
|
+
- [ ] `make build` passes
|
|
19
|
+
- [ ] `make lint` passes (golangci-lint)
|
|
20
|
+
- [ ] No `fmt.Println` / `log.Println`
|
|
21
|
+
- [ ] No commented-out code
|
|
22
|
+
- [ ] No unused imports (`goimports` 自动处理)
|
|
23
|
+
- [ ] Layer dependencies correct (handler → service → repository)
|
|
24
|
+
- [ ] No circular package imports
|
|
25
|
+
- [ ] DTO and Model in correct files
|
|
26
|
+
- [ ] No hardcoded secrets
|
|
27
|
+
- [ ] Input validation on all endpoints (binding tags)
|
|
28
|
+
- [ ] Unit tests for new services
|
|
29
|
+
- [ ] Cross-process relay whitelist uses exact public event names for partial aggregate families (`user.deleted`, not `user.*`)
|
|
30
|
+
- [ ] Worker listeners consume durable public events only; source projection listeners stay in the source runtime
|
|
31
|
+
- [ ] Cross-runtime workflows have an E2E contract test that asserts DB state, access behavior, and side effects
|
|
32
|
+
- [ ] Write operations in Service carry before/after snapshots through DomainEvent `AuditChanges`, or call `audit.Enrich()` when no domain event is published (writes to `sys_audit_logs`)
|
|
33
|
+
- [ ] Auth events (login/logout/password_change etc.) auto dual-written to `sys_audit_logs` + `sys_login_logs` by AuditListener
|
|
34
|
+
- [ ] HTTP requests auto-written to `sys_access_logs` by AuditMiddleware (no manual work needed)
|
|
35
|
+
- [ ] Repository/persistence adapters do not call `audit.Enrich`; owning service commands or DomainEvent envelopes carry audit evidence
|
|
36
|
+
- [ ] Worker/system events that change user-visible state carry DomainEvent `AuditChanges`
|
|
37
|
+
- [ ] Successful read-request logs are sampled or debug-level; failures, writes, and slow requests remain preserved
|
|
38
|
+
- [ ] New log/audit table migrations preserve default partitions, BRIN time indexes, and failure/trace lookup indexes
|
|
39
|
+
- [ ] New index migrations include `查询路径:` and `索引理由:` comments tied to a real repository/service query
|
|
40
|
+
- [ ] `make pre-commit` passes before local commit
|
|
41
|
+
- [ ] `make pre-push` passes before pushing a branch for review
|
|
42
|
+
- [ ] `make test` passes
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## Code Review Checklist
|
|
47
|
+
|
|
48
|
+
### Naming
|
|
49
|
+
- [ ] Files: snake_case (Go 标准)
|
|
50
|
+
- [ ] Types: PascalCase, match purpose
|
|
51
|
+
- [ ] Methods: verb prefix, `EnsureXxx` panics / `CheckXxx` returns bool / `IsXxx` returns bool
|
|
52
|
+
- [ ] unexported types/functions for internal use only
|
|
53
|
+
|
|
54
|
+
### Handler
|
|
55
|
+
- [ ] struct with injected dependencies
|
|
56
|
+
- [ ] `RegisterRoutes(rg *gin.RouterGroup)` method
|
|
57
|
+
- [ ] No try-catch pattern (return error, middleware handles)
|
|
58
|
+
- [ ] Uses `response.OK()` / `response.Error()` helpers, not raw `c.JSON()`
|
|
59
|
+
- [ ] No business logic, no existence checks — pure delegation to Service
|
|
60
|
+
|
|
61
|
+
### Service
|
|
62
|
+
- [ ] Single file < 500 lines
|
|
63
|
+
- [ ] No type definitions inline (move to `dto.go`, `vo.go`, `model.go`)
|
|
64
|
+
- [ ] Uses injected `*zap.Logger`
|
|
65
|
+
- [ ] Publishes events via `EventBus` for cross-module communication
|
|
66
|
+
- [ ] Returns `*XxxResponse` (VO), NEVER domain model
|
|
67
|
+
- [ ] ALL write operations carry before/after snapshots through DomainEvent `AuditChanges` or request-context `audit.Enrich(ctx, changes, metadata)`, never both
|
|
68
|
+
- [ ] `audit.Enrich()` called ONLY after successful write, NEVER on error path
|
|
69
|
+
- [ ] Status-change operations capture `oldStatus` before mutation for before snapshot
|
|
70
|
+
|
|
71
|
+
### Model (Entity)
|
|
72
|
+
- [ ] Embeds `database.BaseModel` or `database.SoftDeleteModel`
|
|
73
|
+
- [ ] All columns have `comment` tag (Chinese)
|
|
74
|
+
- [ ] Indexes on FK and high-frequency query fields
|
|
75
|
+
- [ ] `TableName()` method returns prefixed table name
|
|
76
|
+
|
|
77
|
+
### Wire
|
|
78
|
+
- [ ] `provider.go` defines `ProviderSet` with `wire.NewSet(...)`
|
|
79
|
+
- [ ] Interface bindings: `wire.Bind(new(domain.XxxRepository), new(*xxxRepository))`
|
|
80
|
+
- [ ] No manual construction in `main.go`
|
|
81
|
+
|
|
82
|
+
### Error Handling
|
|
83
|
+
- [ ] Uses `apierror.NotFound()` / `apierror.Business()` etc., no raw error strings
|
|
84
|
+
- [ ] Error messages in English only
|
|
85
|
+
- [ ] Wraps errors with `fmt.Errorf("context: %w", err)` for stack context
|
|
86
|
+
- [ ] `errors.As()` / `errors.Is()` for error type checking
|
|
87
|
+
|
|
88
|
+
### Logging
|
|
89
|
+
- [ ] `*zap.Logger` injected via constructor
|
|
90
|
+
- [ ] `logger.Named("ServiceName")` for context
|
|
91
|
+
- [ ] Structured fields: `zap.Int64("userId", id)`, NOT string formatting
|
|
92
|
+
- [ ] No sensitive data in logs (passwords, tokens, PII)
|
|
93
|
+
- [ ] No per-request info-level log for every successful read endpoint in production
|
|
94
|
+
- [ ] Buffer overflow logs are aggregated, not emitted once per dropped entry
|
|
95
|
+
|
|
96
|
+
### Code Quality
|
|
97
|
+
- [ ] No duplicate code
|
|
98
|
+
- [ ] No magic numbers/strings (use constants)
|
|
99
|
+
- [ ] Imports: stdlib → external → internal
|
|
100
|
+
- [ ] No circular package dependencies
|
|
101
|
+
- [ ] `context.Context` as first parameter in all service/repo methods
|
|
102
|
+
- [ ] Error return as last return value
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
## Pre-Commit Validation Report
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
Pre-Commit Validation
|
|
110
|
+
=====================
|
|
111
|
+
Files changed: [list]
|
|
112
|
+
Specs checked:
|
|
113
|
+
- CLAUDE.md FORBIDDEN table: PASS/FAIL (CRITICAL)
|
|
114
|
+
- api-design.md: PASS/FAIL
|
|
115
|
+
- module-standards.md: PASS/FAIL
|
|
116
|
+
- error-handling.md: PASS/FAIL
|
|
117
|
+
- database.md: PASS/FAIL
|
|
118
|
+
- logging.md: PASS/FAIL
|
|
119
|
+
- event-runtime-boundary.md: PASS/FAIL
|
|
120
|
+
- e2e-standards.md: PASS/FAIL
|
|
121
|
+
- openapi-contract.md: PASS/FAIL
|
|
122
|
+
- check-list.md: PASS/FAIL
|
|
123
|
+
Violations found: [list or "None"]
|
|
124
|
+
Ready to commit: YES/NO
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Useful Commands
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
# 格式化代码
|
|
133
|
+
goimports -w .
|
|
134
|
+
gofmt -w .
|
|
135
|
+
|
|
136
|
+
# 静态分析
|
|
137
|
+
make lint # golangci-lint
|
|
138
|
+
go vet ./... # Go 内置 vet
|
|
139
|
+
|
|
140
|
+
# 测试
|
|
141
|
+
make test # 全部测试
|
|
142
|
+
go test -v ./internal/... # 带详细输出
|
|
143
|
+
go test -race ./... # 竞态检测
|
|
144
|
+
go test -coverprofile=coverage.out ./... && go tool cover -html=coverage.out # 覆盖率
|
|
145
|
+
|
|
146
|
+
# 依赖
|
|
147
|
+
go mod tidy # 清理依赖
|
|
148
|
+
go mod verify # 验证依赖完整性
|
|
149
|
+
|
|
150
|
+
# 代码生成
|
|
151
|
+
make wire # Wire DI 生成
|
|
152
|
+
make openapi-generate # OpenAPI 投影与运行时制品
|
|
153
|
+
make openapi-check # 契约、确定性与 tracked 制品校验
|
|
154
|
+
make openapi-breaking # 受保护基线与外部承诺兼容性校验
|
|
155
|
+
```
|