@@ -8,31 +8,18 @@ namespace FSH.Framework.Eventing.Outbox;
88/// EF Core-based outbox store for a specific DbContext.
99/// </summary>
1010/// <typeparam name="TDbContext">The DbContext that owns the OutboxMessages set.</typeparam>
11- public sealed class EfCoreOutboxStore < TDbContext > : IOutboxStore
11+ public sealed class EfCoreOutboxStore < TDbContext > (
12+ TDbContext dbContext ,
13+ IEventSerializer serializer ,
14+ ILogger < EfCoreOutboxStore < TDbContext > > logger ,
15+ TimeProvider timeProvider ) : IOutboxStore
1216 where TDbContext : DbContext
1317{
14- private readonly TDbContext _dbContext ;
15- private readonly IEventSerializer _serializer ;
16- private readonly ILogger < EfCoreOutboxStore < TDbContext > > _logger ;
17- private readonly TimeProvider _timeProvider ;
18-
19- public EfCoreOutboxStore (
20- TDbContext dbContext ,
21- IEventSerializer serializer ,
22- ILogger < EfCoreOutboxStore < TDbContext > > logger ,
23- TimeProvider timeProvider )
24- {
25- _dbContext = dbContext ;
26- _serializer = serializer ;
27- _logger = logger ;
28- _timeProvider = timeProvider ;
29- }
30-
3118 public async Task AddAsync ( IIntegrationEvent @event , CancellationToken ct = default )
3219 {
3320 ArgumentNullException . ThrowIfNull ( @event ) ;
3421
35- var payload = _serializer . Serialize ( @event ) ;
22+ var payload = serializer . Serialize ( @event ) ;
3623 var message = new OutboxMessage
3724 {
3825 Id = @event . Id ,
@@ -45,13 +32,13 @@ public async Task AddAsync(IIntegrationEvent @event, CancellationToken ct = defa
4532 IsDead = false
4633 } ;
4734
48- await _dbContext . Set < OutboxMessage > ( ) . AddAsync ( message , ct ) . ConfigureAwait ( false ) ;
49- await _dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
35+ await dbContext . Set < OutboxMessage > ( ) . AddAsync ( message , ct ) . ConfigureAwait ( false ) ;
36+ await dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
5037 }
5138
5239 public async Task < IReadOnlyList < OutboxMessage > > GetPendingBatchAsync ( int batchSize , CancellationToken ct = default )
5340 {
54- return await _dbContext . Set < OutboxMessage > ( )
41+ return await dbContext . Set < OutboxMessage > ( )
5542 . Where ( m => ! m . IsDead && m . ProcessedOnUtc == null )
5643 . OrderBy ( m => m . CreatedOnUtc )
5744 . Take ( batchSize )
@@ -63,9 +50,9 @@ public async Task MarkAsProcessedAsync(OutboxMessage message, CancellationToken
6350 {
6451 ArgumentNullException . ThrowIfNull ( message ) ;
6552
66- message . ProcessedOnUtc = _timeProvider . GetUtcNow ( ) . UtcDateTime ;
67- _dbContext . Set < OutboxMessage > ( ) . Update ( message ) ;
68- await _dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
53+ message . ProcessedOnUtc = timeProvider . GetUtcNow ( ) . UtcDateTime ;
54+ dbContext . Set < OutboxMessage > ( ) . Update ( message ) ;
55+ await dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
6956 }
7057
7158 public async Task MarkAsFailedAsync ( OutboxMessage message , string error , bool isDead , CancellationToken ct = default )
@@ -75,11 +62,11 @@ public async Task MarkAsFailedAsync(OutboxMessage message, string error, bool is
7562 message . RetryCount ++ ;
7663 message . LastError = error ;
7764 message . IsDead = isDead ;
78- _dbContext . Set < OutboxMessage > ( ) . Update ( message ) ;
65+ dbContext . Set < OutboxMessage > ( ) . Update ( message ) ;
7966
80- _logger . LogWarning ( "Outbox message {MessageId} failed. RetryCount={RetryCount}, IsDead={IsDead}, Error={Error}" ,
67+ logger . LogWarning ( "Outbox message {MessageId} failed. RetryCount={RetryCount}, IsDead={IsDead}, Error={Error}" ,
8168 message . Id , message . RetryCount , message . IsDead , error ) ;
8269
83- await _dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
70+ await dbContext . SaveChangesAsync ( ct ) . ConfigureAwait ( false ) ;
8471 }
8572}
0 commit comments