using FrameworkDAL.DTO.Testing; using FrameworkDAL.Query.TestRun; 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.TestRun { public class TestRunDAL : ITestRunDAL { private readonly IQueryExecutor _QueryExecutor; private readonly IPickListExecutor _PickListExecutor; public TestRunDAL(IQueryExecutor QueryExecutor, IPickListExecutor PickListExecutor) { _QueryExecutor = QueryExecutor; _PickListExecutor = PickListExecutor; } public async Task> GetSelectListTestRun( int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = TestRunQB.GET_SELECTLIST_TESTRUN_BASE; sql = await ApplyTestRunCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyTestRunCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); sql += TestRunQB.GET_SELECTLIST_TESTRUN_PAGING_SUFFIX; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; return await _QueryExecutor.QueryAsync(LoginDTO, sql, parameter); } catch (Exception) { throw; } } public async Task GetSelectListTestRunCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = TestRunQB.GET_SELECTLIST_TESTRUN_COUNT_BASE; sql = await ApplyTestRunCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyTestRunCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); return await _QueryExecutor.ExecuteScalarAsync(LoginDTO, sql, null); } catch (Exception) { throw; } } private async Task ApplyTestRunCriteria(string sql, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { string[,] criteriaMap = new string[,] { { "Id", "TR.TESTRUNID" }, { "Number", "TR.TESTRUNNUMBER" }, { "RunDate", "TR.TESTRUNDATE" }, { "DB", "TR.TESTRUNDB" }, { "ById", "TR.TESTRUNBYID" }, { "Remarks", "TR.TESTRUNREMARKS" }, { "TestSetId", "TR.TESTSETID" } }; return await _PickListExecutor.ApplyCriteria(sql, criteriaMap, criteriaDTO, loginDTO); } } }