diff --git a/server/AyaNova/Controllers/WorkOrderController.cs b/server/AyaNova/Controllers/WorkOrderController.cs index f019c714..d3a92b53 100644 --- a/server/AyaNova/Controllers/WorkOrderController.cs +++ b/server/AyaNova/Controllers/WorkOrderController.cs @@ -190,22 +190,16 @@ namespace AyaNova.Api.Controllers WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); if (!Authorized.HasCreateRole(HttpContext.Items, AyaType.WorkOrderItem)) return StatusCode(403, new ApiNotAuthorizedResponse()); - if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - - //Create and validate WorkOrderItem o = await biz.CreateItemAsync(newObject); if (o == null) return BadRequest(new ApiErrorResponse(biz.Errors)); else return CreatedAtAction(nameof(WorkOrderController.GetWorkOrderItem), new { id = o.Id, version = apiVersion.ToString() }, new ApiCreatedResponse(o)); - } - - /// /// Get WorkOrderItem object /// @@ -227,62 +221,59 @@ namespace AyaNova.Api.Controllers if (!ModelState.IsValid) return BadRequest(new ApiErrorResponse(ModelState)); - // var o = await biz.GetAsync(id); - // if (o == null) - // return NotFound(new ApiErrorResponse(ApiErrorCode.NOT_FOUND)); - - // // NOTE: HERE would be the second check of biz rules before returning the object - // // in cases where there is also a business rule to affect retrieval on top of basic rights - - // return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, biz.BizType))); - return StatusCode(501); - } - - - - /// - /// Put (update) WorkOrderItem - /// - /// - /// - /// - [HttpPut("items/{WorkOrderItemId}")] - public async Task PutWorkOrderItem([FromRoute] long id, [FromBody] WorkOrderItem updatedObject) - { - if (!serverState.IsOpen) - return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); - - if (!ModelState.IsValid) - return BadRequest(new ApiErrorResponse(ModelState)); - - //Instantiate the business object handler - WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); - - var o = await biz.GetAsync(id, false); + var o = await biz.GetItemAsync(id); 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, updatedObject)) - // 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)); - // } - // return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); - return StatusCode(501); + return Ok(ApiOkResponse.Response(o, !Authorized.HasModifyRole(HttpContext.Items, AyaType.WorkOrderItem))); + } + // /// + // /// Put (update) WorkOrderItem + // /// + // /// + // /// + // /// + // [HttpPut("items/{WorkOrderItemId}")] + // public async Task PutWorkOrderItem([FromRoute] long id, [FromBody] WorkOrderItem updatedObject) + // { + // if (!serverState.IsOpen) + // return StatusCode(503, new ApiErrorResponse(serverState.ApiErrorCode, null, serverState.Reason)); + + // if (!ModelState.IsValid) + // return BadRequest(new ApiErrorResponse(ModelState)); + + // //Instantiate the business object handler + // WorkOrderBiz biz = WorkOrderBiz.GetBiz(ct, HttpContext); + + // var o = await biz.GetAsync(id, false); + // 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, updatedObject)) + // // 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)); + // // } + // // return Ok(ApiOkResponse.Response(new { ConcurrencyToken = o.ConcurrencyToken }, true)); + // return StatusCode(501); + // } + + + diff --git a/server/AyaNova/biz/WorkOrderBiz.cs b/server/AyaNova/biz/WorkOrderBiz.cs index f293c8a5..98f0e2b9 100644 --- a/server/AyaNova/biz/WorkOrderBiz.cs +++ b/server/AyaNova/biz/WorkOrderBiz.cs @@ -300,6 +300,27 @@ namespace AyaNova.Biz } } + + //////////////////////////////////////////////////////////////////////////////////////////////// + // GET + // + internal async Task GetItemAsync(long id, bool logTheGetEvent = true) + { + //Note: there could be rules checking here in future, i.e. can only get own workorder or something + //if so, then need to implement AddError and in route handle Null return with Error check just like PUT route does now + + //https://docs.microsoft.com/en-us/ef/core/querying/related-data + //docs say this will not query twice but will recognize the duplicate woitem bit which is required for multiple grandchild collections + var ret = + await ct.WorkOrderItem + .Include(wi => wi.WorkorderItemLabors) + .Include(wi => wi.WorkorderItemParts) + .SingleOrDefaultAsync(m => m.Id == id); + if (logTheGetEvent && ret != null) + await EventLogProcessor.LogEventToDatabaseAsync(new Event(UserId, id, AyaType.WorkOrderItem, AyaEvent.Retrieved), ct); + return ret; + } + //////////////////////////////////////////////////////////////////////////////////////////////// //VALIDATION