Skip to main content

Asset Workflow Boundaries

Summary

The workflow integration is an HTTP request/response and callback boundary, not an event boundary. It is documented here to keep it clearly separated from the asset event model.

Audience

Engineering, integration, QA, architecture, and security reviewers.

Reference Content

Not an event

Asset approval workflow interactions are HTTP calls, not integration events. No workflow-related integration contract is produced or consumed by asset-service. This section exists so the boundary is not mistaken for eventing.

Outbound: starting a workflow

When workflow approval is enabled, WorkflowServiceClient (a typed HttpClient) calls the workflow service to start an instance, propagating tenant headers (TenantId, TenantKey, UserId, UserEmail) so the instance is created under the same tenant. A failure surfaces as a non-started result rather than an event.

Feature flag

Workflow approval is off by default. Program.cs reads ASSET_APPROVAL_USE_WORKFLOW (or the equivalent options section). When disabled, a NullWorkflowClient is registered and no workflow calls are made.

Inbound: workflow callback

The workflow service signals decisions back to asset-service via an HTTP callback endpoint (documented in the API section), not via an event the asset service subscribes to. A successful approval callback drives the aggregate to issue the asset, which in turn raises AssetAssignedDomainEvent and produces an AssetAssigned event through the normal outbox path. A rejection drives AssetRejectedDomainEvent.

So workflow interactions can trigger asset events indirectly, but the workflow leg itself is HTTP, not eventing.

Public-safety note

Service base addresses, headers values, and credentials are intentionally excluded.

Source References

  • microservices/src/asset-service/Infrastructure/WorkflowServiceClient.cs
  • microservices/src/asset-service/Program.cs
  • microservices/src/asset-service/Domain/Asset/Asset.cs

See Also

Keywords

  • Workflow boundary
  • HTTP callback
  • Not an event

Revision Information

  • Status: Draft
  • Last reviewed: 2026-07-17
  • Review cycle: Quarterly