This commit is contained in:
2020-01-16 19:05:41 +00:00
parent f7d664c14f
commit 585969a6d3

View File

@@ -8,6 +8,7 @@ using EnumsNET;
using AyaNova.Util;
using AyaNova.Api.ControllerHelpers;
using AyaNova.Models;
using System.Collections.Generic;
namespace AyaNova.Biz
{
@@ -291,22 +292,32 @@ namespace AyaNova.Biz
var qFrom = "FROM AWIDGET";
//WHERE CLAUSE and SORT CLAUSE - FILTER / SORT
var qWhereAndOrderBy = string.Empty;
//FILTER AND SORT
DataFilter TheFilter = null;
if (listOptions.DataFilterId > 0)
{
var TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId);
TheFilter = await ct.DataFilter.FirstOrDefaultAsync(x => x.Id == listOptions.DataFilterId);
}
//BUILD WHERE AND APPEND IT
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId);
//WHERE CLAUSE - FILTER
var qWhere = string.Empty;
if (listOptions.DataFilterId > 0)
{
qWhere = SqlFilterCriteriaBuilder.DataFilterToSQLCriteria(TheFilter, ObjectFields.ObjectFieldsList(ObjectFields.WIDGET_KEY), UserId);
}
//ORDER BY CLAUSE - SORT
var qOrderBy = string.Empty;
if (listOptions.DataFilterId > 0)
{
//BUILD ORDER BY AND APPEND IT
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
qOrderBy = SqlFilterOrderByBuilder.DataFilterToSQLOrderBy(TheFilter);
}
else
{
//GET DEFAULT ORDER BY
qWhereAndOrderBy = qWhereAndOrderBy + SqlFilterOrderByBuilder.DefaultGetManyOrderBy();
qOrderBy = SqlFilterOrderByBuilder.DefaultGetManyOrderBy();
}
//LIMIT AND OFFSET CLAUSE - PAGING
@@ -315,27 +326,32 @@ namespace AyaNova.Biz
var qLimitOffset = $"LIMIT {listOptions.Limit} OFFSET {listOptions.Offset}";
//PUT IT ALL TOGETHER
var qQuery = $"{qSelectColumns} {qFrom} {qWhereAndOrderBy} {qLimitOffset}";
var qDataQuery = $"{qSelectColumns} {qFrom} {qWhereAndOrderBy} {qLimitOffset}";
var qCountQuery = $"";
List<object[]> items = new List<object[]>();
//RUN THE QUERY
using (var command = ct.Database.GetDbConnection().CreateCommand())
{
ct.Database.OpenConnection();
command.CommandText = qQuery;
command.CommandText = qDataQuery;
using (var dr = command.ExecuteReader())
{
while (dr.Read())
{
//Build return here row by row
;
object[] row = new object[dr.FieldCount];
dr.GetValues(row);
items.Add(row);
}
}
}
long totalRecordCount = 10;
string items = string.Empty;
/*
"SELECT id AS df, name, serial, dollaramount, roles, startdate, active FROM AWIDGET ORDER BY ID DESC LIMIT 2 OFFSET 1"
//PAGED FETCH LIST QUERY
SELECT a.id, a.active, a.xmin, a.count, a.customfields, a.dollaramount, a.enddate, a.name, a.notes, a.roles, a.serial, a.startdate, a.tags
FROM (
@@ -381,10 +397,6 @@ namespace AyaNova.Biz
//BUILD THE PAGING LINKS PORTION
var pageLinks = new PaginationLinkBuilder(Url, routeName, null, listOptions, totalRecordCount).PagingLinksObject();
//BUILD THE RETURN BASED ON TEMPLATE and MINI CONDITIONAL FORMAT
//BUILD THE COLUMNS RETURN PROPERTY JSON FRAGMENT
string ColumnsJSON = string.Empty;
if (listOptions.Mini)
@@ -403,13 +415,7 @@ namespace AyaNova.Biz
//TODO: Genericize the above block of building return when it's working as this code needs to be central and optimized as much as possible
//New return code
// dynamic ret = new JObject();
// ret.items = new JArray.fromobj(items);
// ret.pageLinks = pageLinks;
// ret.columns=ColumnsJSON;
// return ret.ToString();
ApiPagedResponse pr = new ApiPagedResponse(items, pageLinks, ColumnsJSON);
return pr;
}