This commit is contained in:
2021-02-01 20:45:20 +00:00
parent fa40aef432
commit e70a1a256e
4 changed files with 74 additions and 11 deletions

View File

@@ -103,6 +103,32 @@ namespace AyaNova.Api.Controllers
return Ok(ApiOkResponse.Response(o));
}
/// <summary>
/// Update sort order for user's CoulumnView for DataList key specified
/// </summary>
/// <param name="sortRequest">e.g.{"listKey":"CustomerDataList","sortBy":["CustomerPhone1","CustomerEmail"],"sortDesc":[false,false]}</param>
/// <param name="apiVersion">From route path</param>
/// <returns></returns>
[HttpPost("sort")]
public async Task<IActionResult> 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]}
//------------

View File

@@ -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;

View File

@@ -67,6 +67,26 @@ namespace AyaNova.Biz
}
}
////////////////////////////////////////////////////////////////////////////////////////////////
//SET SORT
//
internal async Task<bool> 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<string, string> newSort = new Dictionary<string, string>();
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<DataListColumnView> 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);
}
////////////////////////////////////////////////////////////////////////////////////////////////

View File

@@ -0,0 +1,4 @@
namespace AyaNova.Models
{
public record DataListSortRequest(string ListKey, string[] sortBy, bool[] sortDesc);
}