Skip to main content

Processed Event Storage

Summary

Source-backed persistence of the ProcessedIntegrationEvents table — an inbound idempotency ledger keyed by event id. The table is modeled and migrated, but the Asset Service currently has no inbound event consumer, so it is unused at runtime today.

Audience

Backend engineers, database reviewers, architects, QA, support, operations, security reviewers, and product owners.

Overview

ProcessedIntegrationEvents is intended to record integration events the service has already handled, so a redelivered event can be recognized and skipped. It is messaging infrastructure and, like the outbox, carries no tenant query filter. In the current source the Asset Service registers no inbound consumer — it only emits events through its outbox — so this table exists as a foundation for future subscription rather than an actively-written ledger.

Confirmed persistence behavior

FieldStorageRequiredNotes
IdGuid primary keyYes
EventIdGuidYesUnique index UX_ProcessedEvents_EventId for duplicate detection
EventTypevarchar(160)YesIntegration event type name
TenantIdintegerNoNullable
CorrelationIdvarchar(160)NoCorrelation for tracing
SourceServicevarchar(120)YesOriginating service name
Outcomevarchar(40)YesDefaults to Processed
ProcessedOnUtctimestamptzYesWhen the event was recorded
  • No query filter: the table is not covered by the global tenant query filter.
  • Purpose: it is an inbound idempotency ledger — the mechanism by which a future inbound consumer would recognize an already-processed event and avoid re-applying it.
  • Duplicate detection: the unique index UX_ProcessedEvents_EventId on EventId is the constraint that would make a duplicate insert fail, providing the idempotency guarantee.
  • Not yet consumed: the Asset Service currently registers no inbound consumer — its startup wires only the outbound outbox path. The table is therefore modeled and migrated but unused at runtime today; it is foundation/transitional infrastructure for a future subscription.
  • No cleanup or retention: there is no cleanup worker or retention policy for this table in source.

This document does not describe any inbound-consumer idempotency flow, because none exists in source. It records only what the table is and how it is defined.

Classification

Modeled-but-unused inbound idempotency persistence (transitional foundation).

Requires confirmation

If and when an inbound consumer is introduced, its idempotency behavior, retention, and cleanup for this ledger require confirmation. None of that behavior exists in source today.

See Also

Keywords

  • Processed event
  • Processed Event Storage
  • Draft database documentation

Source References

  • microservices/src/asset-service/Infrastructure/AssetDbContext.cs
  • microservices/src/asset-service/Program.cs
  • microservices/src/asset-service/Infrastructure/Migrations/AssetDbContextModelSnapshot.cs

Revision Information

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