using CMGMDAL.DTOs; using CMGMDAL.Interfaces; using CMGMDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace CMGMDAL.Implementations; public class CompetencyAnchorDAL : ICompetencyAnchorDAL { private readonly IQueryExecutor _qe; public CompetencyAnchorDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task> GetBySkillAsync(int skillId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, CompetencyAnchorQB.GET_BY_SKILL, new { SkillId = skillId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetBySkillLevelAsync(int skillId, byte proficiencyLevel, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, CompetencyAnchorQB.GET_BY_SKILL_LEVEL, new { SkillId = skillId, ProficiencyLevel = proficiencyLevel, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task SaveAsync(CompetencyAnchorDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { if (isNew) return await _qe.ExecuteIdentityAsync(login, CompetencyAnchorQB.INSERT, new { dto.SkillId, dto.ProficiencyLevel, dto.AnchorText, dto.BehaviorIndicatorsJson, TenantId = login.ClientId }) .ConfigureAwait(false); await _qe.ExecuteAsync(login, CompetencyAnchorQB.UPDATE, new { dto.AnchorId, dto.AnchorText, dto.BehaviorIndicatorsJson, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return dto.AnchorId; } public async Task DeleteAsync(int anchorId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, CompetencyAnchorQB.DELETE, new { AnchorId = anchorId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); }