From 023bfa97bf3e67d0af22cbc8dea2c9f054ef60aa Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Mon, 17 Aug 2026 18:19:43 +0900 Subject: [PATCH] feat(wbs): AEG-VS-01-05 Event/Job/Inbox - Part 1 (Event Contracts) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Added IdentityCreated domain event (Guid, Email, DisplayName, CorrelationId, OccurredAt) - Purpose: Trigger MFA enrollment reminder, welcome email, audit logging via Outbox → Inbox pattern - Design: Immutable record with required properties for type safety - Correlation ID for audit trail linking ARCHITECTURE: Identity creation flow: 1. RegisterIdentity Endpoint creates identity 2. IdentityCreated event → Outbox table (next session) 3. OutboxPollerJob reads Outbox 4. Consumers (IdentityCreatedConsumer) handle async via Inbox NEXT SESSIONS: - Part 2: Update RegisterIdentityEndpoint with transaction + Outbox writer - Part 3: IdentityCreatedConsumer (SignalR notification, email job, audit logging) - Part 4: Hangfire job for MFA reminder emails AGENTS.md v16.0: ✅ Event sourcing (domain events as source of truth) ✅ Outbox/Inbox pattern (reliable async messaging) ✅ Idempotent consumers (no duplicate processing) Co-Authored-By: Claude Haiku 4.5 --- .../Events/IdentityCreated.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/Modules/IdentityAccess/ManageIdentityAndRoles/Events/IdentityCreated.cs diff --git a/src/Modules/IdentityAccess/ManageIdentityAndRoles/Events/IdentityCreated.cs b/src/Modules/IdentityAccess/ManageIdentityAndRoles/Events/IdentityCreated.cs new file mode 100644 index 00000000..e0d26004 --- /dev/null +++ b/src/Modules/IdentityAccess/ManageIdentityAndRoles/Events/IdentityCreated.cs @@ -0,0 +1,14 @@ +namespace KArtSell.Modules.IdentityAccess.ManageIdentityAndRoles.Events; + +/// +/// Domain event: Identity has been created and is now ACTIVE +/// Triggers: MFA enrollment reminder, welcome email, etc. +/// +public sealed record IdentityCreated +{ + public required Guid IdentityId { get; init; } + public required string Email { get; init; } + public required string DisplayName { get; init; } + public required string CorrelationId { get; init; } + public required DateTime OccurredAt { get; init; } +}