From e70a1a256e99fdf0a9bf5939c000277b94f3e43a Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Mon, 1 Feb 2021 20:45:20 +0000 Subject: [PATCH] --- .../DataListColumnViewController.cs | 26 ++++++++++ .../DataList/DataListProcessingBase.cs | 6 +++ server/AyaNova/biz/DataListColumnViewBiz.cs | 49 ++++++++++++++----- server/AyaNova/models/DataListSortRequest.cs | 4 ++ 4 files changed, 74 insertions(+), 11 deletions(-) create mode 100644 server/AyaNova/models/DataListSortRequest.cs diff --git a/server/AyaNova/Controllers/DataListColumnViewController.cs b/server/AyaNova/Controllers/DataListColumnViewController.cs index f6c08e7a..5424dc10 100644 --- a/server/AyaNova/Controllers/DataListColumnViewController.cs +++ b/server/AyaNova/Controllers/DataListColumnViewController.cs @@ -103,6 +103,32 @@ namespace AyaNova.Api.Controllers return Ok(ApiOkResponse.Response(o)); } + + + + /// + /// Update sort order for user's CoulumnView for DataList key specified + /// + /// e.g.{"listKey":"CustomerDataList","sortBy":["CustomerPhone1","CustomerEmail"],"sortDesc":[false,false]} + /// From route path + /// + [HttpPost("sort")] + public async Task SetSort([FromBody] DataListSortRequest sortRequest, ApiVersion apiVersion) + { + if (!serverState.IsOpen) + return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + DataListColumnViewBiz biz = DataListColumnViewBiz.GetBiz(ct, HttpContext); + + if (!ModelState.IsValid) + return BadRequest(new ApiErrorResponse(ModelState)); + if(!await biz.SetSort(sortRequest)) + return BadRequest(new ApiErrorResponse(biz.Errors)); + else + return Ok(); + } + public record SortRequest(string ListKey, string[] sortBy, bool[] sortDesc); + //{"listKey":"CustomerDataList","sortBy":["CustomerPhone1","CustomerEmail"],"sortDesc":[false,false]} + //------------ diff --git a/server/AyaNova/DataList/DataListProcessingBase.cs b/server/AyaNova/DataList/DataListProcessingBase.cs index 2d9d8c93..55accd29 100644 --- a/server/AyaNova/DataList/DataListProcessingBase.cs +++ b/server/AyaNova/DataList/DataListProcessingBase.cs @@ -149,6 +149,12 @@ namespace AyaNova.DataList if (!string.IsNullOrEmpty(o.EnumType)) sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\""); + + //field key needed for sorting etc + sb.Append($",\"fk\":\"{o.FieldKey}\""); + + + sb.Append("}"); FirstColumnAdded = true; diff --git a/server/AyaNova/biz/DataListColumnViewBiz.cs b/server/AyaNova/biz/DataListColumnViewBiz.cs index f50de41a..e4d8ca9a 100644 --- a/server/AyaNova/biz/DataListColumnViewBiz.cs +++ b/server/AyaNova/biz/DataListColumnViewBiz.cs @@ -67,6 +67,26 @@ namespace AyaNova.Biz } } + //////////////////////////////////////////////////////////////////////////////////////////////// + //SET SORT + // + + internal async Task SetSort(AyaNova.Models.DataListSortRequest newObject) + { + //Get the current column view (in an updateable manner) and update it's sort property and save + var dbObject = await ct.DataListColumnView.SingleOrDefaultAsync(z => z.UserId == UserId && z.ListKey == newObject.ListKey); + if (dbObject == null) + dbObject = await CreateDefaultColumnView(newObject.ListKey); + //convert arrays to proper format for saving + Dictionary newSort = new Dictionary(); + for (int x = 0; x < newObject.sortBy.Length; x++) + newSort.Add(newObject.sortBy[x], (newObject.sortDesc[x] ? "-" : "+")); + dbObject.Sort = JsonConvert.SerializeObject(newSort); + //columnview is always replace + await ct.SaveChangesAsync(); + return true; + } + @@ -79,21 +99,28 @@ namespace AyaNova.Biz var ret = await ct.DataListColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey); if (ret == null && createDefaultIfNecessary) { - if (!DataListFactory.ListKeyIsValid(listKey)) - { - throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey"); - } - ret = new DataListColumnView(); - ret.UserId = UserId; - ret.ListKey = listKey; - var dataList = DataListFactory.GetAyaDataList(listKey); - ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns); - ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy); - return await CreateAsync(ret); + return await CreateDefaultColumnView(listKey); } return ret; } + internal async Task CreateDefaultColumnView(string listKey) + { + if (!DataListFactory.ListKeyIsValid(listKey)) + { + throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey"); + } + var ret = new DataListColumnView(); + ret.UserId = UserId; + ret.ListKey = listKey; + var dataList = DataListFactory.GetAyaDataList(listKey); + ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns); + ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy); + return await CreateAsync(ret); + } + + + //////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/server/AyaNova/models/DataListSortRequest.cs b/server/AyaNova/models/DataListSortRequest.cs new file mode 100644 index 00000000..6d3bed89 --- /dev/null +++ b/server/AyaNova/models/DataListSortRequest.cs @@ -0,0 +1,4 @@ +namespace AyaNova.Models +{ + public record DataListSortRequest(string ListKey, string[] sortBy, bool[] sortDesc); +} \ No newline at end of file