using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using PERMDAL.DTOs; using PERMDAL.Interfaces; using PERMDAL.QueryBuilders; namespace PERMDAL.Implementations; public class TNADAL : ITNADAL { private readonly IQueryExecutor _qe; public TNADAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task GetTNARequestAsync(int tnaRequestId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, TNAQB.GET_BY_ID, new { TNARequestId = tnaRequestId, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task> GetTNAListAsync( int appraisalId, int employeeId, short? status, int page, int pageSize, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, TNAQB.GET_LIST, new { TenantId = login.ClientId, AppraisalId = appraisalId, EmployeeId = employeeId, Status = status, Offset = (page - 1) * pageSize, PageSize = pageSize }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task UpdateTNAStatusAsync( int tnaRequestId, short status, string? trainingSuggestion, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, TNAQB.UPDATE_STATUS, new { TNARequestId = tnaRequestId, Status = status, TrainingSuggestion = trainingSuggestion, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task GetPendingTNACountAsync(int employeeId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync(login, TNAQB.GET_PENDING_COUNT, new { EmployeeId = employeeId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); public async Task InsertFromSkillGapAsync( int employeeId, IEnumerable<(int KRAId, decimal GapScore)> gaps, LoginDTO login, CancellationToken ct) { foreach (var (kraId, gapScore) in gaps.Where(g => g.KRAId > 0)) await _qe.ExecuteAsync(login, TNAQB.INSERT_TNAREQUEST, new { AppraisalId = -1, EmployeeId = employeeId, KRAId = kraId, GapScore = gapScore, TenantId = login.ClientId, CreatedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); } }