using Microsoft.EntityFrameworkCore; namespace HrynCo.NotificationService.DAL.EF; internal sealed class TemplateMutationRunner(NotificationDbContext db) { public async Task ExecuteAsync(Func write, CancellationToken ct) { await using var transaction = db.Database.CurrentTransaction is null ? await db.Database.BeginTransactionAsync(ct) : null; // Service/language administration and template writes share the same transaction lock. // Counts, catalog membership and revision checks are therefore valid until commit. await db.Database.ExecuteSqlRawAsync("SELECT pg_advisory_xact_lock(1601)", ct); await write(); await db.SaveChangesAsync(ct); if (transaction is not null) await transaction.CommitAsync(ct); } }