Skip to content

Commit 513ab87

Browse files
committed
stash
1 parent 1de0d5a commit 513ab87

File tree

6 files changed

+90
-0
lines changed

6 files changed

+90
-0
lines changed
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Altinn.AccessMgmt.PersistenceEF.Extensions;
2+
using Altinn.AccessMgmt.PersistenceEF.Models;
3+
using Altinn.AccessMgmt.PersistenceEF.Models.Base;
4+
using Microsoft.EntityFrameworkCore;
5+
using Microsoft.EntityFrameworkCore.Metadata.Builders;
6+
7+
namespace Altinn.AccessMgmt.PersistenceEF.Configurations;
8+
9+
public class OutboxMessageConfiguration : IEntityTypeConfiguration<OutboxMessage>
10+
{
11+
public void Configure(EntityTypeBuilder<OutboxMessage> builder)
12+
{
13+
builder.ToDefaultTable();
14+
15+
builder.HasKey(p => p.Id);
16+
builder.HasIndex(p => p.RefId);
17+
18+
builder.Property(p => p.CompletedAt);
19+
builder.Property(p => p.CorrelationId);
20+
21+
builder.Property(p => p.Data)
22+
.HasColumnType("jsonb")
23+
.IsRequired();
24+
25+
builder.Property(p => p.Handler);
26+
builder.Property(p => p.Retries)
27+
.IsRequired()
28+
.HasDefaultValue(0);
29+
30+
builder.Property(p => p.Schedule);
31+
builder.Property(p => p.StartedAt);
32+
33+
builder.Property(b => b.Status)
34+
.HasConversion<string>()
35+
.HasDefaultValue(OutboxStatus.Pending)
36+
.IsRequired();
37+
38+
builder.Property(b => b.Timeout)
39+
.HasDefaultValue(TimeSpan.FromSeconds(10));
40+
}
41+
}

src/apps/Altinn.AccessManagement/src/Altinn.AccessMgmt.PersistenceEF/Contexts/AppDbContext.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public class AppDbContext(DbContextOptions<AppDbContext> options) : DbContext(op
5050

5151
public DbSet<EntityVariantRole> EntityVariantRoles => Set<EntityVariantRole>();
5252

53+
public DbSet<OutboxMessage> OutboxMessages => Set<OutboxMessage>();
54+
5355
public DbSet<Package> Packages => Set<Package>();
5456

5557
public DbSet<PackageResource> PackageResources => Set<PackageResource>();
@@ -165,6 +167,7 @@ private void ApplyAuditConfiguration(ModelBuilder modelBuilder)
165167
modelBuilder.ApplyConfiguration<AuditEntityType>(new AuditEntityTypeConfiguration());
166168
modelBuilder.ApplyConfiguration<AuditEntityVariant>(new AuditEntityVariantConfiguration());
167169
modelBuilder.ApplyConfiguration<AuditEntityVariantRole>(new AuditEntityVariantRoleConfiguration());
170+
modelBuilder.ApplyConfiguration<OutboxMessage>(new OutboxMessageConfiguration());
168171
modelBuilder.ApplyConfiguration<AuditPackage>(new AuditPackageConfiguration());
169172
modelBuilder.ApplyConfiguration<AuditPackageResource>(new AuditPackageResourceConfiguration());
170173
modelBuilder.ApplyConfiguration<AuditProvider>(new AuditProviderConfiguration());
@@ -317,6 +320,7 @@ public async Task UpsertOutboxAsync<TOutboxData, TData>(
317320
Func<TData> addValueFactory,
318321
Func<TData, TOutboxData, TData> updateValueFactory)
319322
{
323+
320324
ArgumentException.ThrowIfNullOrEmpty(refId);
321325
ArgumentNullException.ThrowIfNull(addValueFactory);
322326
ArgumentNullException.ThrowIfNull(updateValueFactory);

src/apps/Altinn.AccessManagement/src/Altinn.AccessMgmt.PersistenceEF/Extensions/ServiceCollectionExtensions.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Altinn.AccessMgmt.PersistenceEF.Constants;
55
using Altinn.AccessMgmt.PersistenceEF.Contexts;
66
using Altinn.AccessMgmt.PersistenceEF.Data;
7+
using Altinn.AccessMgmt.PersistenceEF.Outbox;
78
using Altinn.AccessMgmt.PersistenceEF.Queries.Connection;
89
using Altinn.AccessMgmt.PersistenceEF.Utils;
910
using Altinn.Authorization.Host.Database;
@@ -22,6 +23,7 @@ public static class ServiceCollectionExtensions
2223
public static IServiceCollection AddAccessManagementDatabase(this IServiceCollection services, Action<AccessManagementDatabaseOptions> configureOptions)
2324
{
2425
var options = new AccessManagementDatabaseOptions(configureOptions);
26+
services.AddKeyedSingleton("handlers", options.Handlers);
2527
_configureTracing = options.AppConnectionString.Contains("database=authorizationdb", StringComparison.OrdinalIgnoreCase);
2628
ConstantGuard.ConstantIdsAreUnique();
2729
services.AddScoped<ReadOnlyInterceptor>();
@@ -226,5 +228,14 @@ public AccessManagementDatabaseOptions(Action<AccessManagementDatabaseOptions> c
226228
public string MigrationConnectionString { get; set; } = string.Empty;
227229

228230
public string AppConnectionString { get; set; } = string.Empty;
231+
232+
internal Dictionary<string, Type> Handlers { get; set; } = [];
233+
234+
public AccessManagementDatabaseOptions AddOutboxHandler<T>(string handlerName)
235+
where T : IOutboxHandler
236+
{
237+
Handlers[handlerName] = typeof(T);
238+
return this;
239+
}
229240
}
230241
}

src/apps/Altinn.AccessManagement/src/Altinn.AccessMgmt.PersistenceEF/Outbox/OutboxHandlerJob.cs

Whitespace-only changes.

src/apps/Altinn.AccessManagement/src/Altinn.AccessMgmt.PersistenceEF/Outbox/OutboxReaperJob.cs

Whitespace-only changes.
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System.Collections.Concurrent;
2+
using Altinn.AccessMgmt.PersistenceEF.Models;
3+
4+
namespace Altinn.AccessMgmt.PersistenceEF.Outbox;
5+
6+
/// <summary>
7+
///
8+
/// </summary>
9+
internal class OutboxRegisterHandlers
10+
{
11+
private ConcurrentDictionary<string, Type> Handlers { get; } = [];
12+
13+
public OutboxRegisterHandlers AddHandler<THandler>(string handlerName)
14+
where THandler : IOutboxHandler
15+
{
16+
Handlers.AddOrUpdate(
17+
handlerName,
18+
add => typeof(THandler),
19+
(_, oldHandler) =>
20+
{
21+
return typeof(THandler);
22+
});
23+
24+
return this;
25+
}
26+
27+
public bool TryGetHandler(string handlerName, out Type handler) =>
28+
Handlers.TryGetValue(handlerName, out handler);
29+
}
30+
31+
public interface IOutboxHandler
32+
{
33+
Task Handle<TData>(OutboxMessage message, TData data, IServiceProvider provider, CancellationToken cancellationToken);
34+
}

0 commit comments

Comments
 (0)