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;
}