using FrameworkDAL.DTO.Testing; using FrameworkDAL.Query.TestSet; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.PickListGenerator; using GB5Shared.QueryExecutor; using System; using System.Collections.Generic; using System.Threading.Tasks; namespace FrameworkDAL.CustomCode.TestSet { public class TestSetDAL : ITestSetDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IPickListExecutor _PickListExecutor; public TestSetDAL(IQueryExecutor QueryExecutor, IPickListExecutor PickListExecutor) { _QueryExecutor = QueryExecutor; _PickListExecutor = PickListExecutor; } public async Task> GetSelectListTestSet( int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = TestSetQB.GET_SELECTLIST_TESTSET_BASE; sql = await ApplyTestSetCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyTestSetCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); sql += TestSetQB.GET_SELECTLIST_TESTSET_PAGING_SUFFIX; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; return await _QueryExecutor.QueryAsync(LoginDTO, sql, parameter); } catch (Exception) { throw; } } public async Task GetSelectListTestSetCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = TestSetQB.GET_SELECTLIST_TESTSET_COUNT_BASE; sql = await ApplyTestSetCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyTestSetCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); return await _QueryExecutor.ExecuteScalarAsync(LoginDTO, sql, null); } catch (Exception) { throw; } } private async Task ApplyTestSetCriteria(string sql, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { string[,] criteriaMap = new string[,] { { "Id", "TESTSETID" }, { "Name", "TESTSETNAME" } }; return await _PickListExecutor.ApplyCriteria(sql, criteriaMap, criteriaDTO, loginDTO); } } }