This commit is contained in:
@@ -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]}
|
||||
|
||||
//------------
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
4
server/AyaNova/models/DataListSortRequest.cs
Normal file
4
server/AyaNova/models/DataListSortRequest.cs
Normal file
@@ -0,0 +1,4 @@
|
||||
namespace AyaNova.Models
|
||||
{
|
||||
public record DataListSortRequest(string ListKey, string[] sortBy, bool[] sortDesc);
|
||||
}
|
||||
Reference in New Issue
Block a user