using FrameworkDAL.DTO.ChangeTracking; using FrameworkDAL.Query.ChangeTracking; using GB5Shared.ChangeTracking; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.ChangeTracking { public sealed class ChangeTrackingDAL : IChangeTrackingDAL { private readonly IQueryExecutor _qe; public ChangeTrackingDAL(IQueryExecutor qe) => _qe = qe; /// public async Task SaveChangesAsync( int eventLogId, IReadOnlyList changes, LoginDTO login, CancellationToken ct = default) { if (changes.Count == 0) return; // Each change is a separate INSERT — change counts per event are small (<20 typical). // BulkInsertAsync is overkill for this volume; individual inserts keep the code simple. foreach (var change in changes) { await _qe.ExecuteAsync( login, ChangeTrackingQB.INSERT_CHANGE, new { EventLogId = eventLogId, change.FieldName, change.OldValue, change.NewValue, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); } } /// public async Task> GetChangesByEventLogAsync( int eventLogId, LoginDTO login, CancellationToken ct = default) { return (await _qe.QueryAsync( login, ChangeTrackingQB.GET_BY_EVENTLOG_ID, new { EventLogId = eventLogId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false)).ToList(); } } }