using System.Text.Json; using Tiku.Domain.Common; namespace Tiku.Domain.Learning; public sealed class LearningOutboxMessage : TenantEntity { public string EventType { get; set; } = string.Empty; public int SchemaVersion { get; set; } = 1; public Guid AggregateId { get; set; } public JsonElement Payload { get; set; } = JsonDefaults.Object(); public DateTimeOffset OccurredAt { get; set; } = DateTimeOffset.UtcNow; public DateTimeOffset AvailableAt { get; set; } = DateTimeOffset.UtcNow; public DateTimeOffset? ProcessedAt { get; set; } public DateTimeOffset? DeadLetteredAt { get; set; } public int AttemptCount { get; set; } public string? LockedBy { get; set; } public DateTimeOffset? LockExpiresAt { get; set; } public string? LastError { get; set; } } public sealed class LearningProjectionReceipt : TenantEntity { public Guid OutboxMessageId { get; set; } public string ProjectionName { get; set; } = string.Empty; public DateTimeOffset ProcessedAt { get; set; } = DateTimeOffset.UtcNow; }