This commit is contained in:
@@ -103,6 +103,32 @@ namespace AyaNova.Api.Controllers
|
|||||||
return Ok(ApiOkResponse.Response(o));
|
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))
|
if (!string.IsNullOrEmpty(o.EnumType))
|
||||||
sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\"");
|
sb.Append($",\"et\":\"{AyaNova.Util.StringUtil.TrimTypeName(o.EnumType)}\"");
|
||||||
|
|
||||||
|
|
||||||
|
//field key needed for sorting etc
|
||||||
|
sb.Append($",\"fk\":\"{o.FieldKey}\"");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
sb.Append("}");
|
sb.Append("}");
|
||||||
FirstColumnAdded = true;
|
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);
|
var ret = await ct.DataListColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
|
||||||
if (ret == null && createDefaultIfNecessary)
|
if (ret == null && createDefaultIfNecessary)
|
||||||
{
|
{
|
||||||
if (!DataListFactory.ListKeyIsValid(listKey))
|
return await CreateDefaultColumnView(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 ret;
|
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