Files
go-omni/examples/managedService

example.com/managed

This checked-in example uses a relative local framework replacement (../..). Run go mod tidy && go run . here. No external database or cloud account is required. The Go-only error catalog is internal/apierrors/catalog.go, registered by svc. The generated main and handlers are unmodified. Built-in endpoint switches and paths are configured in etc/config.yaml under server.endpoints. Health replies use the project envelope by default; responseMode: raw opts out. Readiness failures stay HTTP 503, independently of business error status policies.

Dependencies can call svc.RequestShutdown(err); the generated entry drains requests, closes resources and retains the failure for a nonzero exit. Try:

curl -i 'http://127.0.0.1:8080/check?kind=fixed'
curl -i 'http://127.0.0.1:8080/check?kind=params'
curl -i 'http://127.0.0.1:8080/missing'
curl -i -H 'X-Signature: valid' --data-binary ' {"hello":1} ' http://127.0.0.1:8080/callback
curl -i -F 'file=hello' http://127.0.0.1:8080/upload
curl -OJ http://127.0.0.1:8080/download

The upload demonstration caps requests at 2048 bytes, so use a small test file; large input is intentionally rejected with HTTP 413. Replace the demonstration X-Signature check with the actual provider's signature algorithm and secret. From the framework root, check generated files with: go run ./cmd/go-omni api generate --dir examples/managedService --check.

Contract changes produce REVIEW notices for affected Logic methods and DTO fields. Definite Logic signature problems produce ERROR diagnostics with a file/line and the required signature. Regeneration preserves business code; --check continues to fail on unresolved signature errors after generation. Run go test ./... too, especially for project type aliases, build tags and changes inside method bodies.

Framework-managed runtime

main.go, internal/svc/runtimeGen.go, generated handlers, internal/types/*Gen.go and OpenAPI are generator-owned. Add project dependencies in svc.Init(ctx) and register each successful initialization with OnClose. Runtime owns reverse cleanup and failure rollback; do not copy locks, constructors or Close methods into this project. The logger is scoped to this App.

Configuration, API contracts, svc fields/Init/AppOptions, Logic, Repository and middleware implementations remain developer-owned. Regeneration preserves them. Use go-omni api format to format local contracts, then api generate and api generate --check. See the framework development guide for array/null responses, typed multipart, explicit configuration references and -check-config, shared contracts and v0.13 upgrade steps. This example keeps its raw callback, streaming upload and download to exercise those existing extension points.