From aac48abf0cfb68d08d5d8205763d30fea1a73dba Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Tue, 21 Jan 2020 23:18:29 +0000 Subject: [PATCH] --- .../AyaNova/Controllers/DataListController.cs | 7 +----- server/AyaNova/DataList/AyaDataList.cs | 1 + server/AyaNova/DataList/DataListFetcher.cs | 24 +++++-------------- server/AyaNova/DataList/IAyaDataList.cs | 4 +++- .../DataList/TestWidgetUserEmailDataList.cs | 7 ++++++ server/AyaNova/DataList/WidgetDataList.cs | 6 +++++ 6 files changed, 24 insertions(+), 25 deletions(-) diff --git a/server/AyaNova/Controllers/DataListController.cs b/server/AyaNova/Controllers/DataListController.cs index 7c4f634f..e2471770 100644 --- a/server/AyaNova/Controllers/DataListController.cs +++ b/server/AyaNova/Controllers/DataListController.cs @@ -57,12 +57,7 @@ namespace AyaNova.Api.Controllers if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - var MOCK_WIDGET_DISPLAY_TEMPLATE_JSON = @" - { - ""full"":[""widgetname"",""widgetserial"",""widgetdollaramount"",""widgetroles"",""widgetstartdate"",""widgetactive"",""username""], - ""mini"":[""widgetname"",""widgetserial""] - } - "; + //check rights at some point here long UserId = UserIdFromContext.Id(HttpContext.Items); ApiPagedResponse pr = await DataListFetcher.GetResponse(listOptions.DataListKey, ct, Url, nameof(List), listOptions, MOCK_WIDGET_DISPLAY_TEMPLATE_JSON, UserId); diff --git a/server/AyaNova/DataList/AyaDataList.cs b/server/AyaNova/DataList/AyaDataList.cs index fb392ff5..8e0ccc88 100644 --- a/server/AyaNova/DataList/AyaDataList.cs +++ b/server/AyaNova/DataList/AyaDataList.cs @@ -23,6 +23,7 @@ namespace AyaNova.DataList public AuthorizationRoles AllowedRoles { get; set; } public AyaType DefaultListObjectType { get; set; } public string ListKey { get; set; } + public string DefaultDataListDisplayTemplate { get; set; } public string GenerateMINIListColumnsJSON() { diff --git a/server/AyaNova/DataList/DataListFetcher.cs b/server/AyaNova/DataList/DataListFetcher.cs index a0631332..8bb2c804 100644 --- a/server/AyaNova/DataList/DataListFetcher.cs +++ b/server/AyaNova/DataList/DataListFetcher.cs @@ -12,23 +12,16 @@ namespace AyaNova.DataList { internal static class DataListFetcher { - internal static async Task GetResponse( - string DataListKey, AyContext ct, IUrlHelper Url, - string routeName, ListOptions listOptions, string JSONDataListTemplate, long UserId) + internal static async Task GetResponse(string DataListKey, AyContext ct, IUrlHelper Url, + string routeName, ListOptions listOptions, long UserId) { - //TODO: Get template (MOCKED FOR NOW UNTIL PROOF OF CONCEPT) - // var MOCK_WIDGET_USER_EMAIL_DISPLAY_TEMPLATE_JSON = @" - // { - // ""full"":[""widgetname"",""username"",""emailaddress"",""widgetactive""], - // ""mini"":[""widgetname"",""username"",""emailaddress""] - // } - // "; // var AyaObjectFields = AyaObjectFieldDefinitions.AyaObjectFields(AyaObjectFieldDefinitions.TEST_WIDGET_USER_EMAIL_ADDRESS_LIST_KEY); var DataList = DataListFactory.GetAyaDataList(DataListKey); - //TODO: PUt this in the template biz class ultimately and modify sqlselectbuilder to use it + //TODO: FETCH DATALISTTEMPLATE HERE OR USE DEFAULT IF FAULTY OR NOT FOUND + var JSONDataListTemplate = DataList.DefaultDataListDisplayTemplate; //PARSE THE TEMPLATE INTO A STRING ARRAY //SO WE KNOW WHICH FIELDS TO RETURN FROM QUERY @@ -45,16 +38,11 @@ namespace AyaNova.DataList templateFieldList = ((JArray)jtemplate["full"]).ToObject(); } - //BUILD THE QUERY - //SELECT FRAGMENT COLUMNS FROM TEMPLATE - //TODO: Make this a function called from DataList + //SELECT FRAGMENT COLUMNS FROM TEMPLATE var qSelectColumns = DataListSqlSelectBuilder.Build(DataList.FieldDefinitions, JSONDataListTemplate, listOptions.Mini); - //FROM CLAUSE - //this is where the full SQL statement needs to be made with JOINS etc - //TODO: Can this be moved away into the objectfields or new object - //var qFrom = "from awidget left outer join auser on (awidget.userid=auser.id) left outer join auseroptions on (auser.id=auseroptions.userid)"; + //FROM CLAUSE var qFrom = DataList.SQLFrom; //FILTERED? diff --git a/server/AyaNova/DataList/IAyaDataList.cs b/server/AyaNova/DataList/IAyaDataList.cs index 03efec36..61b3b898 100644 --- a/server/AyaNova/DataList/IAyaDataList.cs +++ b/server/AyaNova/DataList/IAyaDataList.cs @@ -19,11 +19,13 @@ namespace AyaNova.DataList //Default object type to open for rows of this list (use no object if no) AyaType DefaultListObjectType { get; set; } + //Default list display template if none found in db or is invalid, this ensures the data will flow even if people fuck up the templates somehow + string DefaultDataListDisplayTemplate { get; set; } string GenerateMINIListColumnsJSON(); string GenerateListColumnsJSONFromTemplate(string template); - + } } \ No newline at end of file diff --git a/server/AyaNova/DataList/TestWidgetUserEmailDataList.cs b/server/AyaNova/DataList/TestWidgetUserEmailDataList.cs index 9804dd40..1b24017b 100644 --- a/server/AyaNova/DataList/TestWidgetUserEmailDataList.cs +++ b/server/AyaNova/DataList/TestWidgetUserEmailDataList.cs @@ -19,6 +19,12 @@ namespace AyaNova.DataList SQLFrom = "from awidget left outer join auser on (awidget.userid=auser.id) left outer join auseroptions on (auser.id=auseroptions.userid)"; AllowedRoles = AuthorizationRoles.AllInternalStaff;//anyone but clients and subcontractors (just for test) DefaultListObjectType = AyaType.Widget; + DefaultDataListDisplayTemplate = @" + { + ""full"":[""widgetname"",""username"",""emailaddress"",""widgetactive""], + ""mini"":[""widgetname"",""username"",""emailaddress""] + } + "; FieldDefinitions = new List(); FieldDefinitions.Add(new AyaDataListFieldDefinition { FieldKey = "df", AyaObjectType = (int)AyaType.Widget, SqlIdColumnName = "awidget.id" }); @@ -54,6 +60,7 @@ namespace AyaNova.DataList SqlValueColumnName = "awidget.active", UiFieldDataType = (int)AyaUiFieldDataType.Bool }); + } }//eoc }//eons \ No newline at end of file diff --git a/server/AyaNova/DataList/WidgetDataList.cs b/server/AyaNova/DataList/WidgetDataList.cs index aa73e5ca..cf570e25 100644 --- a/server/AyaNova/DataList/WidgetDataList.cs +++ b/server/AyaNova/DataList/WidgetDataList.cs @@ -11,6 +11,12 @@ namespace AyaNova.DataList SQLFrom = "from awidget left outer join auser on (awidget.userid=auser.id)"; AllowedRoles = AuthorizationRoles.AllInternalStaff;//anyone but clients and subcontractors (just for test) DefaultListObjectType = AyaType.Widget; + DefaultDataListDisplayTemplate = @" + { + ""full"":[""widgetname"",""widgetserial"",""widgetdollaramount"",""widgetroles"",""widgetstartdate"",""widgetactive"",""username""], + ""mini"":[""widgetname"",""widgetserial""] + } + "; //NOTE: Due to the join, all the sql id and name fields that can conflict with the joined (in this case User) table need to be specified completely FieldDefinitions = new List();