This commit is contained in:
2021-02-03 20:12:36 +00:00
parent 267b498e93
commit fd540f29ed
3 changed files with 23 additions and 23 deletions

2
.vscode/launch.json vendored
View File

@@ -53,7 +53,7 @@
"AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles", "AYANOVA_FOLDER_USER_FILES": "c:\\temp\\RavenTestData\\userfiles",
"AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles", "AYANOVA_FOLDER_BACKUP_FILES": "c:\\temp\\RavenTestData\\backupfiles",
"AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles", "AYANOVA_FOLDER_TEMPORARY_SERVER_FILES": "c:\\temp\\RavenTestData\\tempfiles",
"AYANOVA_SERVER_TEST_MODE": "true", "AYANOVA_SERVER_TEST_MODE": "false",
"AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small", "AYANOVA_SERVER_TEST_MODE_SEEDLEVEL": "small",
"AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7", "AYANOVA_SERVER_TEST_MODE_TZ_OFFSET": "-7",
"AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\" "AYANOVA_BACKUP_PG_DUMP_PATH": "C:\\data\\code\\postgres_13\\bin\\"

View File

@@ -103,7 +103,7 @@ namespace AyaNova.Api.Controllers
/// <param name="inObj"></param> /// <param name="inObj"></param>
/// <returns></returns> /// <returns></returns>
[HttpPut("{id}")] [HttpPut("{id}")]
public async Task<IActionResult> PutDataListSavedFilter([FromRoute] long id, [FromBody] DataListSavedFilter inObj) public async Task<IActionResult> PutDataListSavedFilter([FromBody] DataListSavedFilter inObj)
{ {
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));
@@ -114,7 +114,7 @@ namespace AyaNova.Api.Controllers
//Instantiate the business object handler //Instantiate the business object handler
DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext);
var o = await biz.GetAsync(id, false); var o = await biz.GetAsync(inObj.Id, false);
if (o == null) if (o == null)
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
@@ -128,7 +128,7 @@ namespace AyaNova.Api.Controllers
} }
catch (DbUpdateConcurrencyException) catch (DbUpdateConcurrencyException)
{ {
if (!await biz.ExistsAsync(id)) if (!await biz.ExistsAsync(inObj.Id))
return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND));
else else
return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT));

View File

@@ -49,7 +49,7 @@ namespace AyaNova.Biz
//CREATE //CREATE
internal async Task<DataListSavedFilter> CreateAsync(DataListSavedFilter inObj) internal async Task<DataListSavedFilter> CreateAsync(DataListSavedFilter inObj)
{ {
await ValidateAsync(inObj, true); Validate(inObj, true);
if (HasErrors) if (HasErrors)
return null; return null;
else else
@@ -134,11 +134,11 @@ namespace AyaNova.Biz
internal async Task<List<NameIdDefaultItem>> GetViewListAsync(string listKey) internal async Task<List<NameIdDefaultItem>> GetViewListAsync(string listKey)
{ {
await EnsureDefaultAsync(listKey); await EnsureDefaultAsync(listKey);
return await ct.DataListSavedFilter return await ct.DataListSavedFilter
.AsNoTracking() .AsNoTracking()
.Where(z => z.ListKey == listKey && (z.Public == true || z.UserId == UserId)) .Where(z => z.ListKey == listKey && (z.Public == true || z.UserId == UserId))
.OrderBy(z => z.Name) .OrderBy(z => z.Name)
.Select(z => new NameIdDefaultItem(z.Id, z.Name, z.DefaultFilter)).ToListAsync(); .Select(z => new NameIdDefaultItem(z.Id, z.Name, z.DefaultFilter)).ToListAsync();
} }
@@ -185,7 +185,7 @@ namespace AyaNova.Biz
//this will allow EF to check it out //this will allow EF to check it out
ct.Entry(dbObject).OriginalValues["Concurrency"] = inObj.Concurrency; ct.Entry(dbObject).OriginalValues["Concurrency"] = inObj.Concurrency;
await ValidateAsync(dbObject, false); Validate(dbObject, false);
if (HasErrors) if (HasErrors)
return false; return false;
await ct.SaveChangesAsync(); await ct.SaveChangesAsync();
@@ -233,7 +233,7 @@ namespace AyaNova.Biz
// //
//Can save or update? //Can save or update?
private async Task ValidateAsync(DataListSavedFilter inObj, bool isNew) private void Validate(DataListSavedFilter inObj, bool isNew)
{ {
//UserId required //UserId required
@@ -243,23 +243,23 @@ namespace AyaNova.Biz
AddError(ApiErrorCode.VALIDATION_REQUIRED, "UserId"); AddError(ApiErrorCode.VALIDATION_REQUIRED, "UserId");
} }
//can't save a filter for someone else
if (inObj.UserId != UserId && inObj.Public == false)
{
AddError(ApiErrorCode.NOT_AUTHORIZED, "generalerror", "Can only save private filters for self not other UserId's");
return;
}
//technically not "validation" but always ensure default filter has - name
if (inObj.DefaultFilter)
{
inObj.Name = "-";
}
//Name required //Name required
if (string.IsNullOrWhiteSpace(inObj.Name)) if (string.IsNullOrWhiteSpace(inObj.Name))
AddError(ApiErrorCode.VALIDATION_REQUIRED, "Name"); AddError(ApiErrorCode.VALIDATION_REQUIRED, "Name");
//If name is otherwise OK, check that name is unique
if (!PropertyHasErrors("Name"))
{
//Use Any command is efficient way to check existance, it doesn't return the record, just a true or false
if (await ct.DataListSavedFilter.AnyAsync(z => z.Name == inObj.Name && z.Id != inObj.Id))
{
AddError(ApiErrorCode.VALIDATION_NOT_UNIQUE, "Name");
}
}
if (string.IsNullOrWhiteSpace(inObj.Filter)) if (string.IsNullOrWhiteSpace(inObj.Filter))
AddError(ApiErrorCode.VALIDATION_REQUIRED, "Filter"); AddError(ApiErrorCode.VALIDATION_REQUIRED, "Filter");