This commit is contained in:
2021-01-30 19:38:22 +00:00
parent 777d6f95a7
commit 1012f28c0a
2 changed files with 35 additions and 29 deletions

View File

@@ -41,13 +41,12 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Get DataListSavedColumnView /// Get DataListSavedColumnView for current user
/// </summary> /// </summary>
/// <param name="userId"></param>
/// <param name="listKey"></param> /// <param name="listKey"></param>
/// <returns>DataListSavedColumnView</returns> /// <returns>DataListSavedColumnView</returns>
[HttpGet("{userId}/{listKey}")] [HttpGet("{userId}/{listKey}")]
public async Task<IActionResult> GetDataListSavedColumnView([FromRoute] long userId, [FromRoute] string listKey) public async Task<IActionResult> GetDataListSavedColumnView([FromRoute] string listKey)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
@@ -56,7 +55,7 @@ namespace AyaNova.Api.Controllers
return StatusCode(403, new ApiNotAuthorizedResponse()); return StatusCode(403, new ApiNotAuthorizedResponse());
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
var o = await biz.GetAsync(userId, listKey, true); var o = await biz.GetAsync(biz.UserId, listKey, true);
if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); if (o == null) return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
return Ok(ApiOkResponse.Response(o)); return Ok(ApiOkResponse.Response(o));
} }
@@ -89,23 +88,21 @@ namespace AyaNova.Api.Controllers
/// <summary> /// <summary>
/// Reset DataListSavedColumnView to factory defaults /// Reset DataListSavedColumnView to factory defaults
/// </summary> /// </summary>
/// <param name="userId"></param>
/// <param name="listKey"></param> /// <param name="listKey"></param>
/// <returns>NoContent</returns> /// <returns>NoContent</returns>
[HttpDelete("{id}")] [HttpDelete("{id}")]
public async Task<IActionResult> DeleteProject([FromRoute] long userId, [FromRoute] string listKey) public async Task<IActionResult> ResetDataListSavedColumnView([FromRoute] string listKey)
{ {
if (!serverState.IsOpen) if (!serverState.IsOpen)
return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason));
if (!ModelState.IsValid) if (!ModelState.IsValid)
return BadRequest(new ApiErrorResponse(ModelState)); return BadRequest(new ApiErrorResponse(ModelState));
DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext); DataListSavedColumnViewBiz biz = DataListSavedColumnViewBiz.GetBiz(ct, HttpContext);
if (!Authorized.HasDeleteRole(HttpContext.Items, biz.BizType)) var o = await biz.DeleteAsync(biz.UserId, listKey);
return StatusCode(403, new ApiNotAuthorizedResponse()); if (o == null)
if (!await biz.DeleteAsync(userId, listKey))
return BadRequest(new ApiErrorResponse(biz.Errors)); return BadRequest(new ApiErrorResponse(biz.Errors));
return NoContent(); return Ok(ApiOkResponse.Response(o));
} }
//------------ //------------

View File

@@ -53,8 +53,13 @@ namespace AyaNova.Biz
else else
{ {
//delete the existing one in favor of this one //delete the existing one in favor of this one
if (!await DeleteAsync(newObject.UserId, newObject.ListKey)) var dbObject = await GetAsync(newObject.UserId, newObject.ListKey, false);
return null; if (dbObject != null)
{
ct.DataListSavedColumnView.Remove(dbObject);
await ct.SaveChangesAsync();
}
await ct.DataListSavedColumnView.AddAsync(newObject); await ct.DataListSavedColumnView.AddAsync(newObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -72,17 +77,19 @@ namespace AyaNova.Biz
internal async Task<DataListSavedColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary) internal async Task<DataListSavedColumnView> GetAsync(long userId, string listKey, bool createDefaultIfNecessary)
{ {
var ret = await ct.DataListSavedColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey); var ret = await ct.DataListSavedColumnView.AsNoTracking().SingleOrDefaultAsync(z => z.UserId == userId && z.ListKey == listKey);
if(ret==null && createDefaultIfNecessary){ if (ret == null && createDefaultIfNecessary)
if(!DataListFactory.ListKeyIsValid(listKey)){ {
if (!DataListFactory.ListKeyIsValid(listKey))
{
throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey"); throw new System.ArgumentOutOfRangeException($"ListKey '{listKey}' is not a valid DataListKey");
} }
ret=new DataListSavedColumnView(); ret = new DataListSavedColumnView();
ret.UserId=UserId; ret.UserId = UserId;
ret.ListKey=listKey; ret.ListKey = listKey;
var dataList=DataListFactory.GetAyaDataList(listKey); var dataList = DataListFactory.GetAyaDataList(listKey);
ret.Columns=JsonConvert.SerializeObject(dataList.DefaultColumns); ret.Columns = JsonConvert.SerializeObject(dataList.DefaultColumns);
ret.Sort=JsonConvert.SerializeObject(dataList.DefaultSortBy); ret.Sort = JsonConvert.SerializeObject(dataList.DefaultSortBy);
return await CreateAsync(ret); return await CreateAsync(ret);
} }
return ret; return ret;
} }
@@ -90,20 +97,22 @@ namespace AyaNova.Biz
//////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////////////////////
//DELETE //DELETE (RESET)
// //
internal async Task<bool> DeleteAsync(long userId, string listKey) internal async Task<DataListSavedColumnView> DeleteAsync(long userId, string listKey)
{ {
//this is effectively the RESET route handler //this is effectively the RESET route handler
//so it can be called any time even if there is no default list and it's a-ok //so it can be called any time even if there is no default list and it's a-ok
//because a new default will be created if needed //because a new default will be created if needed
var dbObject = await GetAsync(userId, listKey, false); var dbObject = await GetAsync(userId, listKey, false);
if (dbObject != null) if (dbObject != null)
{ {
ct.DataListSavedColumnView.Remove(dbObject); ct.DataListSavedColumnView.Remove(dbObject);
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
dbObject = await GetAsync(userId, listKey, true);
} }
return true; return dbObject;
} }
@@ -121,10 +130,10 @@ namespace AyaNova.Biz
if (string.IsNullOrWhiteSpace(inObj.ListKey)) if (string.IsNullOrWhiteSpace(inObj.ListKey))
AddError(ApiErrorCode.VALIDATION_REQUIRED, "ListKey"); AddError(ApiErrorCode.VALIDATION_REQUIRED, "ListKey");
if (!DataListFactory.ListKeyIsValid(inObj.ListKey)) if (!DataListFactory.ListKeyIsValid(inObj.ListKey))
AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ListKey", $"ListKey \"{inObj.ListKey}\" DataListKey is not valid"); AddError(ApiErrorCode.VALIDATION_INVALID_VALUE, "ListKey", $"ListKey \"{inObj.ListKey}\" DataListKey is not valid");
//Validate Sort JSON //Validate Sort JSON
try try
{ {