From 144e92dabe92dfb2b80af3931aaa84de06c8dba1 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 13 Feb 2020 22:23:20 +0000 Subject: [PATCH] --- server/AyaNova/DataList/DataListFetcher.cs | 70 +++++----------------- 1 file changed, 15 insertions(+), 55 deletions(-) diff --git a/server/AyaNova/DataList/DataListFetcher.cs b/server/AyaNova/DataList/DataListFetcher.cs index 3e9be95d..c72aec67 100644 --- a/server/AyaNova/DataList/DataListFetcher.cs +++ b/server/AyaNova/DataList/DataListFetcher.cs @@ -16,8 +16,9 @@ namespace AyaNova.DataList internal static async Task GetResponseAsync(string DataListKey, AyContext ct, ListOptions listOptions, long UserId, AuthorizationRoles UserRoles) { - + var DataList = DataListFactory.GetAyaDataList(DataListKey); + //was the name not found as a list? if (DataList == null) { @@ -29,60 +30,30 @@ namespace AyaNova.DataList if (!UserRoles.HasAnyFlags(DataList.AllowedRoles)) throw new System.UnauthorizedAccessException("User roles insufficient for this datalist"); - //parse the list view - //TODO: do I need to try /catch here? Or will an exception properly bubble back to the controller + //parse the list view var ListViewArray = JArray.Parse(listOptions.ListView); - - - //PARSE THE TEMPLATE INTO A STRING ARRAY - //SO WE KNOW WHICH FIELDS TO RETURN FROM QUERY - // var jtemplate = JObject.Parse(JSONDataListTemplate); - - // //convert to strings array (https://stackoverflow.com/a/33836599/8939) - // string[] templateFieldList; - // if (listOptions.Mini != null && listOptions.Mini == true) - // { - // templateFieldList = ((JArray)jtemplate["mini"]).ToObject(); - // } - // else - // { - // templateFieldList = ((JArray)jtemplate["full"]).ToObject(); - // } - - string[] templateFieldList = DataList.GetFieldListFromListView(listOptions.ListView); + string[] templateFieldList = DataList.GetFieldListFromListView(ListViewArray); //BUILD THE QUERY //SELECT FRAGMENT COLUMNS FROM TEMPLATE - var qSelectColumns = DataListSqlSelectBuilder.Build(DataList.FieldDefinitions, listOptions.ListView); + var qSelectColumns = DataListSqlSelectBuilder.Build(DataList.FieldDefinitions, ListViewArray); //FROM CLAUSE var qFrom = DataList.SQLFrom; - //FILTERED? - bool HasFilter = !string.IsNullOrWhiteSpace(listOptions.FilterJson); - bool HasSort = !string.IsNullOrWhiteSpace(listOptions.SortJson); var qWhere = string.Empty; var qOrderBy = string.Empty; - if (HasFilter) - { - //WHERE CLAUSE - FILTER - qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, listOptions.FilterJson, UserId); - } - if (HasSort) - { - //ORDER BY CLAUSE - SORT - //BUILD ORDER BY - qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, listOptions.SortJson); - } - else - { - //BUILD DEFAULT ORDER BY IF POSSIBLE - qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, null); - } + + //WHERE CLAUSE - FILTER + qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, ListViewArray, UserId); + + //ORDER BY CLAUSE - SORT + //BUILD ORDER BY + qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, ListViewArray); //LIMIT AND OFFSET CLAUSE - PAGING listOptions.Offset = listOptions.Offset ?? ListOptions.DefaultOffset; @@ -92,18 +63,9 @@ namespace AyaNova.DataList //PUT IT ALL TOGETHER string qDataQuery = string.Empty; string qTotalRecordsQuery = string.Empty; - if (HasFilter) - { - qDataQuery = $"{qSelectColumns} {qFrom} {qWhere} {qOrderBy} {qLimitOffset}"; - qTotalRecordsQuery = $"SELECT COUNT(*) {qFrom} {qWhere}"; - } - else - { - qDataQuery = $"{qSelectColumns} {qFrom} {qOrderBy} {qLimitOffset}"; - qTotalRecordsQuery = $"SELECT COUNT(*) {qFrom}"; - } - + qDataQuery = $"{qSelectColumns} {qFrom} {qWhere} {qOrderBy} {qLimitOffset}".Replace(" ", " "); + qTotalRecordsQuery = $"SELECT COUNT(*) {qFrom} {qWhere}".Replace(" ", " "); //RETURN OBJECTS int returnRowColumnCount = templateFieldList.Count() + 1;//Templates don't have the DF column in them but we need it and it's in the query so plus one @@ -177,9 +139,7 @@ namespace AyaNova.DataList //BUILD THE COLUMNS RETURN PROPERTY JSON FRAGMENT Newtonsoft.Json.Linq.JArray ColumnsJSON = null; - ColumnsJSON = DataList.GenerateListColumnsJSONFromListView(JSONDataListTemplate); - - + ColumnsJSON = DataList.GenerateListColumnsJSONFromListView(ListViewArray); return new ApiDataListResponse(rows, totalRecordCount, ColumnsJSON);