using CMGMDAL.DTOs; using CMGMDAL.Interfaces; using CMGMDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace CMGMDAL.Implementations; public class CompetencyKRAMapDAL : ICompetencyKRAMapDAL { private readonly IQueryExecutor _qe; public CompetencyKRAMapDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task> GetByFrameworkAsync(int frameworkId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, CompetencyKRAMapQB.GET_BY_FRAMEWORK, new { FrameworkId = frameworkId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task BulkSaveAsync(int frameworkId, IEnumerable maps, LoginDTO login, CancellationToken ct) { await using var tx = await _qe.BeginTransactionAsync(login).ConfigureAwait(false); try { await _qe.ExecuteAsync(login, CompetencyKRAMapQB.DELETE_BY_FRAMEWORK, new { FrameworkId = frameworkId, TenantId = login.ClientId }, tx, ct).ConfigureAwait(false); foreach (var map in maps) { await _qe.ExecuteIdentityAsync(login, CompetencyKRAMapQB.INSERT, new { map.FrameworkId, map.KRAId, map.SkillId, map.ExpectedProficiencyLevel, map.IsMandatory, map.SortOrder, TenantId = login.ClientId }) .ConfigureAwait(false); } await tx.CommitAsync(ct).ConfigureAwait(false); } catch { await tx.RollbackAsync(ct).ConfigureAwait(false); throw; } } public async Task DeleteOneAsync(int competencyKRAMapId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, CompetencyKRAMapQB.DELETE_ONE, new { CompetencyKRAMapId = competencyKRAMapId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); }