using CMGMDAL.DTOs; using CMGMDAL.Interfaces; using CMGMDAL.QueryBuilders; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace CMGMDAL.Implementations; public class SkillDevPlanDAL : ISkillDevPlanDAL { private readonly IQueryExecutor _qe; public SkillDevPlanDAL(IQueryExecutor queryExecutor) => _qe = queryExecutor; public async Task GetByIdAsync(int devPlanId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync(login, SkillDevPlanQB.GET_BY_ID, new { DevPlanId = devPlanId, TenantId = login.ClientId }) .ConfigureAwait(false); public async Task> GetListAsync(int targetId, short planType, short status, LoginDTO login, CancellationToken ct) => await _qe.QueryAsync(login, SkillDevPlanQB.GET_LIST, new { TargetId = targetId, PlanType = planType, Status = status, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false) ?? Enumerable.Empty(); public async Task SaveAsync(SkillDevPlanDTO dto, bool isNew, LoginDTO login, CancellationToken ct) { if (isNew) return await _qe.ExecuteIdentityAsync(login, SkillDevPlanQB.INSERT, new { dto.PlanType, dto.TargetId, dto.SkillId, dto.CurrentProficiencyLevel, dto.TargetProficiencyLevel, dto.Priority, dto.TrainingMethod, dto.TargetDate, dto.EstimatedHours, dto.TrainerId, dto.Status, TenantId = login.ClientId, CreatedBy = login.UserId, ModifiedBy = login.UserId }) .ConfigureAwait(false); await _qe.ExecuteAsync(login, SkillDevPlanQB.UPDATE, new { dto.DevPlanId, dto.Priority, dto.TrainingMethod, dto.TargetDate, dto.EstimatedHours, dto.TrainerId, dto.Status, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct).ConfigureAwait(false); return dto.DevPlanId; } public async Task CompleteAsync(int devPlanId, int actualHours, string? completionNotes, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, SkillDevPlanQB.COMPLETE, new { DevPlanId = devPlanId, ActualHours = actualHours, CompletionNotes = completionNotes, TenantId = login.ClientId, ModifiedBy = login.UserId }, cancellationToken: ct) .ConfigureAwait(false); public async Task DeleteAsync(int devPlanId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync(login, SkillDevPlanQB.DELETE, new { DevPlanId = devPlanId, TenantId = login.ClientId }, cancellationToken: ct) .ConfigureAwait(false); }