Skip to content

Commit 07d2b92

Browse files
committed
Changed outbox namespace. Added standalone Outbox service to add messages when no transaction is needed.
1 parent da5e4c1 commit 07d2b92

File tree

10 files changed

+271
-250
lines changed

10 files changed

+271
-250
lines changed

src/DotNetElements.AppFramework.AspNet/Outbox/WebApplicationExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using Microsoft.AspNetCore.Builder;
1+
using DotNetElements.AppFramework.Outbox;
2+
using Microsoft.AspNetCore.Builder;
23

34
namespace DotNetElements.AppFramework.AspNet.Outbox;
45

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using DotNetElements.AppFramework.Abstractions.Outbox;
22

3-
namespace DotNetElements.AppFramework;
3+
namespace DotNetElements.AppFramework.Outbox;
44

55
public interface IDbSetOutbox
66
{
7-
public DbSet<OutboxMessage> OutboxMessages { get; }
7+
public DbSet<OutboxMessage> OutboxMessages { get; }
88
}

src/DotNetElements.AppFramework/Outbox/IDbSetOutboxExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using System.Text.Json;
22
using DotNetElements.AppFramework.Abstractions.Outbox;
33

4-
namespace DotNetElements.AppFramework;
4+
namespace DotNetElements.AppFramework.Outbox;
55

66
public static class IDbSetOutboxExtensions
77
{
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
namespace DotNetElements.AppFramework;
1+
namespace DotNetElements.AppFramework.Outbox;
22

33
public interface IOutbox<TDbContext>
4-
where TDbContext : DbContext, IDbSetOutbox
4+
where TDbContext : DbContext, IDbSetOutbox
55
{
6-
void AddMessage<T>(T message);
6+
Task AddMessageAsync<T>(T message);
77
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace DotNetElements.AppFramework.Outbox;
2+
3+
public sealed class Outbox<TDbContext> : IOutbox<TDbContext>
4+
where TDbContext : DbContext, IDbSetOutbox
5+
{
6+
private readonly TDbContext dbContext;
7+
8+
public Outbox(TDbContext dbContext)
9+
{
10+
this.dbContext = dbContext;
11+
}
12+
13+
public async Task AddMessageAsync<T>(T message)
14+
{
15+
dbContext.AddMessage(message);
16+
17+
await dbContext.SaveChangesAsync();
18+
}
19+
}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
namespace DotNetElements.AppFramework;
1+
namespace DotNetElements.AppFramework.Outbox;
22

33
public interface IOutboxMessageProcessor
44
{
5-
Task<ResultWithError> ProcessAsync(object message, CancellationToken cancellation);
5+
Task<ResultWithError> ProcessAsync(object message, CancellationToken cancellation);
66
}
77

88
public abstract class OutboxMessageProcessor<T> : IOutboxMessageProcessor
99
{
10-
public Task<ResultWithError> ProcessAsync(object message, CancellationToken cancellation)
11-
{
12-
if (message is not T typedMessage)
13-
throw new ArgumentException($"Invalid message type: {message.GetType().Name}. Expected: {typeof(T).Name}.");
10+
public Task<ResultWithError> ProcessAsync(object message, CancellationToken cancellation)
11+
{
12+
if (message is not T typedMessage)
13+
throw new ArgumentException($"Invalid message type: {message.GetType().Name}. Expected: {typeof(T).Name}.");
1414

15-
return ProcessAsync(typedMessage, cancellation);
16-
}
15+
return ProcessAsync(typedMessage, cancellation);
16+
}
1717

18-
protected abstract Task<ResultWithError> ProcessAsync(T message, CancellationToken cancellation);
18+
protected abstract Task<ResultWithError> ProcessAsync(T message, CancellationToken cancellation);
1919
}
Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
11
using System.Reflection;
22

3-
namespace DotNetElements.AppFramework;
3+
namespace DotNetElements.AppFramework.Outbox;
44

55
public sealed class JobInterval
66
{
7-
public static JobInterval FromSeconds(int seconds) => new JobInterval { Value = seconds, Unit = IntervalUnit.Seconds };
8-
public static JobInterval FromMinutes(int minutes) => new JobInterval { Value = minutes, Unit = IntervalUnit.Minutes };
7+
public static JobInterval FromSeconds(int seconds) => new JobInterval { Value = seconds, Unit = IntervalUnit.Seconds };
8+
public static JobInterval FromMinutes(int minutes) => new JobInterval { Value = minutes, Unit = IntervalUnit.Minutes };
99

10-
[Range(1, 59, ErrorMessage = "Interval needs to be between {0} and {1}")]
11-
public int Value { get; private init; }
10+
[Range(1, 59, ErrorMessage = "Interval needs to be between {0} and {1}")]
11+
public int Value { get; private init; }
1212

13-
[Required]
14-
public IntervalUnit Unit { get; private init; }
13+
[Required]
14+
public IntervalUnit Unit { get; private init; }
1515

16-
private JobInterval() { }
16+
private JobInterval() { }
1717
}
1818

1919
public enum IntervalUnit
2020
{
21-
Seconds,
22-
Minutes
21+
Seconds,
22+
Minutes
2323
}
2424

2525
public sealed class OutboxOptions : IValidatableObject
2626
{
27-
[Required]
28-
public Assembly? MessagesAssembly { get; set; }
27+
[Required]
28+
public Assembly? MessagesAssembly { get; set; }
2929

30-
[Range(minimum: 1, maximum: 10)]
31-
public int MaxRetryCount { get; set; } = 3;
30+
[Range(minimum: 1, maximum: 10)]
31+
public int MaxRetryCount { get; set; } = 3;
3232

33-
[Required]
34-
public JobInterval JobInterval { get; set; } = JobInterval.FromSeconds(30);
33+
[Required]
34+
public JobInterval JobInterval { get; set; } = JobInterval.FromSeconds(30);
3535

36-
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
37-
{
38-
List<ValidationResult> results = [];
39-
Validator.TryValidateObject(JobInterval, new ValidationContext(JobInterval), results, true);
36+
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
37+
{
38+
List<ValidationResult> results = [];
39+
Validator.TryValidateObject(JobInterval, new ValidationContext(JobInterval), results, true);
4040

41-
return results;
42-
}
41+
return results;
42+
}
4343
}

0 commit comments

Comments
 (0)