From 3b40abc20cf89627196229faa4c3e5e64d427330 Mon Sep 17 00:00:00 2001 From: John Cardinal Date: Thu, 7 May 2020 22:32:35 +0000 Subject: [PATCH] --- .../Controllers/WorkOrderController.cs | 20 +++++++++---- server/AyaNova/biz/WorkOrderBiz.cs | 28 ++++++++----------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index ab93b353..9d47860f 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -158,10 +158,13 @@ namespace AyaNova.Api.Controllers /// /// Put (update) WorkOrder + /// This route does not update the entire WorkOrder object graph, only the top level + /// in other words nothing in any descendent child collections such as WorkOrderItems and below. + /// Use the separate routes to update descendents of the WorkOrder /// - /// - /// - /// + /// WorkOrder id + /// Workorder top level only, no descendents are evaluated + /// New concurrency token [HttpPut("{id}")] public async Task PutWorkOrder([FromRoute] long id, [FromBody] WorkOrder updatedObject) { @@ -178,8 +181,13 @@ namespace AyaNova.Api.Controllers if (!Authorized.HasModifyRole(HttpContext.Items, biz.BizType)) return StatusCode(403, new ApiNotAuthorizedResponse()); - biz.PutAsync(id, updatedObject); -//todo: handle concurrency in biz object, what to do? + var o = await biz.PutAsync(id, updatedObject); + if (o == null) + return BadRequest(new ApiErrorResponse(biz.Errors)); + + return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); + + //todo: handle concurrency in biz object, what to do? // var o = await biz.PutAsync(id, updatedObject); // try @@ -285,7 +293,7 @@ namespace AyaNova.Api.Controllers return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItem), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); - + } diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index 0027d350..4c8a8092 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -152,25 +152,21 @@ namespace AyaNova.Biz if (HasErrors) return null; - // try - // { - // if (o==null) - // return BadRequest(new ApiErrorResponse(biz.Errors)); - // } - // catch (DbUpdateConcurrencyException) - // { - // if (!await biz.ExistsAsync(id)) - // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); - // else - // return StatusCode(409, new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT)); - // } - - - //Log event and save context + try + { + await ct.SaveChangesAsync(); + } + catch (DbUpdateConcurrencyException) + { + if (!await WorkOrderExistsAsync(id)) + AddError(ApiErrorCode.NOT_FOUND); + else + new ApiErrorResponse(ApiErrorCode.CONCURRENCY_CONFLICT); + return null; + } await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, dbObject.Id, BizType, AyaEvent.Modified), ct); await SearchIndexAsync(dbObject, false); await TagUtil.ProcessUpdateTagsInRepositoryAsync(ct, dbObject.Tags, SnapshotOfOriginalDBObj.Tags); - return dbObject; }