using CMGMDAL.DTOs; using CMGMDAL.Interfaces; using CMGMDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace CMGMDAL.Implementations; public class CompetencyProfileDAL : ICompetencyProfileDAL { private readonly IQueryExecutor _qe; public CompetencyProfileDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task> GetByEmployeeAsync(int employeeId, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, CompetencyProfileQB.GET_BY_EMPLOYEE, new { EmployeeId = employeeId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task GetExistingProfileIdAsync(int employeeId, int frameworkId, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync(login, CompetencyProfileQB.GET_EXISTING, new { EmployeeId = employeeId, FrameworkId = frameworkId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); var id = result?.FirstOrDefault(); return id == 0 ? null : id; } public async Task UpsertAsync(CompetencyProfileDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { if (isNew) return await _qe.ExecuteIdentityAsync(login, CompetencyProfileQB.INSERT, new { dto.EmployeeId, dto.FrameworkId, dto.CareerPathId, dto.TargetRoleId, dto.OverallCompetencyScore, dto.SkillGapsJson, dto.Notes, dto.Status, TenantId = login.ClientId, CreatedBy = login.UserId }) .ConfigureAwait(false); await _qe.ExecuteAsync(login, CompetencyProfileQB.UPDATE, new { dto.CompetencyProfileId, dto.CareerPathId, dto.TargetRoleId, dto.OverallCompetencyScore, dto.SkillGapsJson, dto.Notes, dto.Status, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return dto.CompetencyProfileId; } }