This commit is contained in:
2021-01-27 18:53:13 +00:00
parent c59cc5969c
commit b90ab0b35c
9 changed files with 110 additions and 97 deletions

View File

@@ -18,27 +18,27 @@ namespace AyaNova.DataList
// Get the data list data requested
//
//
internal static async Task<ApiDataListResponse> GetResponseAsync(AyContext ct, DataListOptions listOptions, AuthorizationRoles userRoles, ILogger log, long userId)
internal static async Task<ApiDataListResponse> GetResponseAsync(AyContext ct, DataListTableOptions dataListTableOptions, AuthorizationRoles userRoles, ILogger log, long userId)
{
var DataList = DataListFactory.GetAyaDataList(listOptions.DataListKey);
var DataList = DataListFactory.GetAyaDataList(dataListTableOptions.DataListKey);
//was the name not found as a list?
if (DataList == null)
throw new System.ArgumentOutOfRangeException($"DataList \"{listOptions.DataListKey}\" specified does not exist");
throw new System.ArgumentOutOfRangeException($"DataList \"{dataListTableOptions.DataListKey}\" specified does not exist");
//check rights
if (!userRoles.HasAnyFlags(DataList.AllowedRoles))
throw new System.UnauthorizedAccessException("User roles insufficient for this datalist");
DataList.SetListOptionDefaultsIfNecessary(listOptions);
DataList.SetListOptionDefaultsIfNecessary(dataListTableOptions);
//STATIC filter options from server
List<DataListFilterOption> StaticServerFilterOptions = null;
if (DataList is IAyaDataListServerCriteria)
StaticServerFilterOptions = ((IAyaDataListServerCriteria)DataList).DataListServerCriteria(userId, userRoles, listOptions);
StaticServerFilterOptions = ((IAyaDataListServerCriteria)DataList).DataListServerCriteria(userId, userRoles, dataListTableOptions);
// //Get the public field key names in a list from the listview
@@ -46,12 +46,12 @@ namespace AyaNova.DataList
//Get the combination of all unique fields from both StaticServerFilterOptions and listOptions
//NOTE: this assumes no list options filter colums that don't exist in listoptions.columns
var AllUniqueFieldKeysRequiredForQuery = listOptions.Columns.Union(StaticServerFilterOptions.Select(z => z.Column).ToList()).ToList();
var AllUniqueFieldKeysRequiredForQuery = dataListTableOptions.Columns.Union(StaticServerFilterOptions.Select(z => z.Column).ToList()).ToList();
//Add the internal filters into the listoptions existing filters
//NOTE: There is currently no overlap between internal filtered columns and filters coming from the client
foreach (DataListFilterOption dfo in StaticServerFilterOptions)
listOptions.Filter.Add(dfo);
dataListTableOptions.Filter.Add(dfo);
//BUILD THE QUERY
@@ -65,16 +65,16 @@ namespace AyaNova.DataList
var qOrderBy = string.Empty;
//WHERE CLAUSE - FILTER
qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, listOptions);
qWhere = DataListSqlFilterCriteriaBuilder.DataFilterToSQLCriteria(DataList.FieldDefinitions, dataListTableOptions);
//ORDER BY CLAUSE - SORT
//BUILD ORDER BY
qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, listOptions);
qOrderBy = DataListSqlFilterOrderByBuilder.DataFilterToSQLOrderBy(DataList.FieldDefinitions, dataListTableOptions);
//LIMIT AND OFFSET CLAUSE - PAGING
listOptions.Offset = listOptions.Offset ?? DataListOptions.DefaultOffset;
listOptions.Limit = listOptions.Limit ?? DataListOptions.DefaultLimit;
var qLimitOffset = $"LIMIT {listOptions.Limit} OFFSET {listOptions.Offset}";
dataListTableOptions.Offset = dataListTableOptions.Offset ?? DataListTableOptions.DefaultOffset;
dataListTableOptions.Limit = dataListTableOptions.Limit ?? DataListTableOptions.DefaultLimit;
var qLimitOffset = $"LIMIT {dataListTableOptions.Limit} OFFSET {dataListTableOptions.Offset}";
//PUT IT ALL TOGETHER
string qDataQuery = string.Empty;
@@ -84,7 +84,7 @@ namespace AyaNova.DataList
qTotalRecordsQuery = $"SELECT COUNT(*) {qFrom} {qWhere}".Replace(" ", " ");
//RETURN OBJECTS
int returnRowColumnCount = listOptions.Columns.Count();
int returnRowColumnCount = dataListTableOptions.Columns.Count();
List<List<AyaFieldData>> rows = new List<List<AyaFieldData>>();
long totalRecordCount = 0;
@@ -105,7 +105,7 @@ namespace AyaNova.DataList
//INSERT REMAINING FIELDS FROM TEMPLATE INTO THE RETURN ROWS LIST
foreach (string TemplateField in listOptions.Columns)
foreach (string TemplateField in dataListTableOptions.Columns)
{
//get the AyaObjectFieldDefinition
@@ -230,7 +230,7 @@ namespace AyaNova.DataList
//BUILD THE COLUMNS RETURN PROPERTY JSON FRAGMENT
Newtonsoft.Json.Linq.JArray ColumnsJSON = null;
ColumnsJSON = DataList.GenerateReturnListColumns(listOptions.Columns);//<<<-----this next
ColumnsJSON = DataList.GenerateReturnListColumns(dataListTableOptions.Columns);//<<<-----this next
return new ApiDataListResponse(rows, totalRecordCount, ColumnsJSON);