using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; using GB5Shared.Resource.Response; using GB5Shared.Validation; using Newtonsoft.Json; using TMSDAL.DTO.Evaluation; using TMSDAL.DTO.EvaluationInstance; using TMSDAL.Query.EvaluationInstance; namespace TMSDAL.CustomCode.EvaluationInstance { public class EvaluationInstanceDAL : IEvaluationInstanceDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IValidation _Validation; public EvaluationInstanceDAL(IQueryExecutor queryExecutor, IValidation validation) { _QueryExecutor = queryExecutor; _Validation = validation; } public async Task GetEvaluationInstance(int evaluationInstanceId, LoginDTO loginDTO) { try { var result = await _QueryExecutor.QuerySingleAsync( loginDTO, EvaluationInstanceQB.GET_EVALUATIONINSTANCE, new { EvaluationInstanceId = evaluationInstanceId, TenantId = loginDTO.ClientId }); return JsonConvert.SerializeObject(result); } catch (Exception) { throw; } } public async Task GetEvaluationInstanceList(CriteriaDTO criteriaDTO, LoginDTO loginDTO) => await _QueryExecutor.QueryWithCriteriaAsync( loginDTO, EvaluationInstanceQB.GET_EVALUATIONINSTANCE_LIST, criteriaDTO); public async Task SaveEvaluationInstance(EvaluationInstanceDTO dto, LoginDTO loginDTO) { try { return await _QueryExecutor.ExecuteAsync( loginDTO, EvaluationInstanceQB.SAVE_EVALUATIONINSTANCE, dto); } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.SaveErrorMessage); throw new Exception(error); } } public async Task UpdateEvaluationInstanceStatus(EvaluationInstanceDTO dto, LoginDTO loginDTO) { try { return await _QueryExecutor.ExecuteAsync( loginDTO, EvaluationInstanceQB.UPDATE_EVALUATIONINSTANCE_STATUS, dto); } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.UpdateErrorMessage); throw new Exception(error); } } public async Task DeleteEvaluationInstance(int evaluationInstanceId, LoginDTO loginDTO) { try { int rows = await _QueryExecutor.ExecuteAsync(loginDTO, EvaluationInstanceQB.DELETE_EVALUATIONINSTANCE, new { EvaluationInstanceId = evaluationInstanceId, TenantId = loginDTO.ClientId }); return rows > 0 ? SuccessResponse.DeleteSuccessMessage : ErrorResponse.DeleteNotFoundMessage; } catch (Exception ex) { string error = await _Validation.HandleException(ex, ErrorResponse.DeleteErrorMessage); throw new Exception(error); } } } }