using FrameworkDAL.DTO.Server; using FrameworkDAL.Query.Server; using GB5Shared.DTO.Framework.Criteria; using GB5Shared.DTO.Framework.Login; using GB5Shared.PickListGenerator; using GB5Shared.QueryExecutor; using Newtonsoft.Json; namespace FrameworkDAL.CustomCode.Server { public class ServerDAL : IServerDAL { private readonly IQueryExecutor _queryExecutor; private readonly IPickListExecutor _pickListExecutor; public ServerDAL(IQueryExecutor queryExecutor, IPickListExecutor pickListExecutor) { _queryExecutor = queryExecutor; _pickListExecutor = pickListExecutor; } public async Task GetDBInstanceById(int dbInstanceId, LoginDTO login, CancellationToken ct) { try { return await _queryExecutor.QuerySingleAsync( login, ServerQB.GET_DBINSTANCE_BY_ID, new { DBInstanceId = dbInstanceId }, cancellationToken: ct).ConfigureAwait(false); } catch (Exception ex) { throw new Exception($"Failed to retrieve DBInstance {dbInstanceId}: {ex.Message}", ex); } } public async Task GetSelectListDBInstance(int firstNumber, int maxResult, LoginDTO login, CancellationToken ct) { try { var param = new { FirstNumber = firstNumber, MaxResult = maxResult }; var list = await _queryExecutor.QueryAsync( login, ServerQB.GET_SELECTLIST_DBINSTANCE, param, cancellationToken: ct).ConfigureAwait(false); return JsonConvert.SerializeObject(list); } catch (Exception ex) { throw new Exception($"Failed to retrieve DBInstance select list: {ex.Message}", ex); } } public async Task> GetSelectListServer( int FirstNumber, int MaxResult, CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = ServerQB.GET_SELECTLIST_SERVER_BASE; sql = await ApplyServerCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyServerCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); sql += ServerQB.GET_SELECTLIST_SERVER_PAGING_SUFFIX; var parameter = new { firstnumber = FirstNumber, maxresult = MaxResult }; return await _queryExecutor.QueryAsync(LoginDTO, sql, parameter); } catch (Exception) { throw; } } public async Task GetSelectListServerCount(CriteriaDTO CriteriaDTO, LoginDTO LoginDTO) { try { string sql = ServerQB.GET_SELECTLIST_SERVER_COUNT_BASE; sql = await ApplyServerCriteria(sql, CriteriaDTO, LoginDTO); sql = await ApplyServerCriteria(sql, LoginDTO.UserCriteriaDTO, LoginDTO); return await _queryExecutor.ExecuteScalarAsync(LoginDTO, sql, null); } catch (Exception) { throw; } } private async Task ApplyServerCriteria(string sql, CriteriaDTO criteriaDTO, LoginDTO loginDTO) { string[,] criteriaMap = new string[,] { { "ServerPicklistId", "SERVERID" }, { "ServerPicklistName", "SERVERNAME" }, { "ServerPicklistIp", "SERVERIP" }, { "ServerPicklistMachineName", "SERVERMACHINENAME" } }; return await _pickListExecutor.ApplyCriteria(sql, criteriaMap, criteriaDTO, loginDTO); } } }