using EventSubscriber.Application; using Microsoft.EntityFrameworkCore; namespace Projection.ReadModel; /// EF Core implementation of the projection store over . public sealed class EfProjectionStore(ProjectionDbContext db) : IProjectionStore { public async Task UpsertAsync(RegisterEntry entry, CancellationToken ct = default) { var row = await db.RegisterEntries.FindAsync([entry.Id], ct); if (row is null) { db.RegisterEntries.Add(new RegisterEntryRow { Id = entry.Id, Status = entry.Status, Reference = entry.Reference, Bsn = entry.Bsn, NaamPlaceholder = entry.NaamPlaceholder, }); } else { row.Status = entry.Status; row.Reference = entry.Reference; row.Bsn = entry.Bsn; row.NaamPlaceholder = entry.NaamPlaceholder; } await db.SaveChangesAsync(ct); } public async Task ClearAsync(CancellationToken ct = default) => await db.RegisterEntries.ExecuteDeleteAsync(ct); public async Task> AllAsync(CancellationToken ct = default) => await db.RegisterEntries .OrderBy(r => r.Id) .Select(r => new RegisterEntry(r.Id, r.Status, Reference: r.Reference, Bsn: r.Bsn, NaamPlaceholder: r.NaamPlaceholder)) .ToListAsync(ct); }