diff --git a/server/AyaNova/Controllers/DataListSavedFilterController.cs b/server/AyaNova/Controllers/DataListSavedFilterController.cs index 433bc1d5..460c967f 100644 --- a/server/AyaNova/Controllers/DataListSavedFilterController.cs +++ b/server/AyaNova/Controllers/DataListSavedFilterController.cs @@ -99,10 +99,10 @@ namespace AyaNova.Api.Controllers /// /// Put (update) DataListSavedFilter /// - /// + /// /// [HttpPut] - public async Task PutDataListSavedFilter([FromBody] DataListSavedFilter inObj) + public async Task PutDataListSavedFilter([FromBody] DataListSavedFilter updatedObject) { if (!serverState.IsOpen) return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); @@ -113,26 +113,16 @@ namespace AyaNova.Api.Controllers //Instantiate the business object handler DataListSavedFilterBiz biz = DataListSavedFilterBiz.GetBiz(ct, HttpContext); - var o = await biz.GetAsync(inObj.Id); + var o = await biz.PutAsync(updatedObject); if (o == null) - return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); - - // if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) - // return StatusCode(403, new ApiNotAuthorizedResponse()); - - try { - if (!await biz.PutAsync(o, inObj)) + if (biz.Errors.Exists(z => z.Code == ApiErrorCode.CONCURRENCY_CONFLICT)) + return StatusCode(409, new ApiErrorResponse(biz.Errors)); + else return BadRequest(new ApiErrorResponse(biz.Errors)); } - catch (DbUpdateConcurrencyException) - { - if (!await biz.ExistsAsync(inObj.Id)) - return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); - else - return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); - } - return Ok(ApiOkResponse.Response(new { Concurrency = o.Concurrency })); + return Ok(ApiOkResponse.Response(new { Concurrency = o.Concurrency })); + } diff --git a/server/AyaNova/biz/DataListSavedFilterBiz.cs b/server/AyaNova/biz/DataListSavedFilterBiz.cs index 741253d7..f55c972c 100644 --- a/server/AyaNova/biz/DataListSavedFilterBiz.cs +++ b/server/AyaNova/biz/DataListSavedFilterBiz.cs @@ -57,18 +57,8 @@ namespace AyaNova.Biz //do stuff with datafilter DataListSavedFilter outObj = inObj; outObj.UserId = UserId; - - await ct.DataListSavedFilter.AddAsync(outObj); await ct.SaveChangesAsync(); - - //Handle child and associated items: - - //EVENT LOG - await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, outObj.Id, BizType, AyaEvent.Created), ct); - - - return outObj; } @@ -85,11 +75,7 @@ namespace AyaNova.Biz { //This is simple so nothing more here, but often will be copying to a different output object or some other ops var ret = await ct.DataListSavedFilter.AsNoTracking().SingleOrDefaultAsync(z => z.Id == fetchId && (z.Public == true || z.UserId == UserId)); - // if (logTheGetEvent && ret != null) - // { - // //Log - // await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, fetchId, BizType, AyaEvent.Retrieved), ct); - // } + return ret; } @@ -139,29 +125,38 @@ namespace AyaNova.Biz // //put - internal async Task PutAsync(DataListSavedFilter dbObject, DataListSavedFilter inObj) + internal async Task PutAsync(DataListSavedFilter putObject) { - //preserve the owner ID if none was specified - if (inObj.UserId == 0) - inObj.UserId = dbObject.UserId; + var dbObject = await GetAsync(putObject.Id); + if (dbObject == null) + { + AddError(ApiErrorCode.NOT_FOUND, "id"); + return null; + } - //Replace the db object with the PUT object - CopyObject.Copy(inObj, dbObject, "Id"); - //Set "original" value of concurrency token to input token - //this will allow EF to check it out - ct.Entry(dbObject).OriginalValues["Concurrency"] = inObj.Concurrency; + //preserve the owner ID if none was specified + if (putObject.UserId == 0) + putObject.UserId = dbObject.UserId; Validate(dbObject, false); if (HasErrors) - return false; - await ct.SaveChangesAsync(); + return null; - //Log modification and save context - await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); + ct.Replace(dbObject, putObject); + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await ExistsAsync(putObject.Id)) + AddError(ApiErrorCode.NOT_FOUND); + else + AddError(ApiErrorCode.CONCURRENCY_CONFLICT); + return null; + } - - - return true; + return dbObject; }