using System; using System.Collections.Generic; using System.Linq; using GB5Shared.DTO.Framework.Login; using GB5Shared.DTO.Framework.Validation; using GB5Shared.Query.Framework.Validation; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; namespace GB5Shared.ValidationCriteria { public class ValidationAssignmentDAL : IValidationAssignmentDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public ValidationAssignmentDAL(IQueryExecutor queryExecutor, IValidation validation) { _QueryExecutor = queryExecutor; _Validation = validation; } public async Task GetValidationAssignment(int validationAssignmentId, LoginDTO loginDTO) { try { var parameters = new { ValidationAssignmentId = validationAssignmentId }; var result = await _QueryExecutor.QuerySingleAsync(loginDTO, ValidationAssignmentQB.GET_VALIDATIONASSIGNMENT, parameters); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task SaveValidationAssignment(ValidationAssignmentDTO dto, LoginDTO loginDTO) { try { return await _QueryExecutor.ExecuteAsync(loginDTO, ValidationAssignmentQB.SAVE_VALIDATIONASSIGNMENT, dto); } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.SaveErrorMessage); throw new Exception(error); } } public async Task UpdateValidationAssignment(ValidationAssignmentDTO dto, LoginDTO loginDTO) { try { return await _QueryExecutor.ExecuteAsync(loginDTO, ValidationAssignmentQB.UPDATE_VALIDATIONASSIGNMENT, dto); } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.UpdateErrorMessage); throw new Exception(error); } } public async Task DeleteValidationAssignment(int validationAssignmentId, LoginDTO loginDTO) { try { var parameters = new { ValidationAssignmentId = validationAssignmentId }; int rowsAffected = await _QueryExecutor.ExecuteAsync(loginDTO, ValidationAssignmentQB.DELETE_VALIDATIONASSIGNMENT, parameters); return rowsAffected > 0 ? SuccessResponse.DeleteSuccessMessage : ErrorResponse.DeleteNotFoundMessage; } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.DeleteErrorMessage); throw new Exception(error); } } public async Task> GetAssignmentsWithCriteriaForEntity( short entityType, int entityId, int entityStepId, LoginDTO loginDTO) { try { var parameters = new { EntityType = entityType, EntityId = entityId, EntityStepId = entityStepId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync(loginDTO, ValidationAssignmentQB.GET_ASSIGNMENTS_WITH_CRITERIA_FOR_ENTITY, parameters); return result?.ToList() ?? new List(); } catch (Exception) { throw; } } public async Task GetEmployeeSkillLevel(int employeeId, int skillId, LoginDTO loginDTO) { try { var parameters = new { EmployeeId = employeeId, SkillId = skillId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync(loginDTO, ValidationAssignmentQB.GET_EMPLOYEE_SKILL_LEVEL, parameters); return result?.Cast().FirstOrDefault(); } catch (Exception) { throw; } } public async Task GetLatestPassingQuizAttemptCompletedOn(int quizId, int employeeId, LoginDTO loginDTO) { try { var parameters = new { QuizId = quizId, EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync(loginDTO, ValidationAssignmentQB.GET_LATEST_PASSING_QUIZ_ATTEMPT, parameters); return result?.FirstOrDefault(); } catch (Exception) { throw; } } public async Task GetLatestPassingAssessmentAttemptCompletedOn(int assessmentId, int employeeId, LoginDTO loginDTO) { try { var parameters = new { AssessmentId = assessmentId, EmployeeId = employeeId, TenantId = loginDTO.ClientId }; var result = await _QueryExecutor.QueryAsync(loginDTO, ValidationAssignmentQB.GET_LATEST_PASSING_ASSESSMENT_ATTEMPT, parameters); return result?.FirstOrDefault(); } catch (Exception) { throw; } } } }