public async Task <Response <OrderResponse> > SetOrderState(SetOrderStateRequest request) { var order = await _uow.Orders.FindAsync(new Guid(request.OrderId)); if (order == null) { return(new Response <OrderResponse>(ResponseStatus.NotFound, null, ResponseMessagesConstans.CannotFindOrder)); } // agent can set only specific states if (!request.RequestIdentity.HasAdminAccess && request.RequestIdentity.HasAgentAccess) { var availableStates = new List <OrderState> { OrderState.Finished }; if (!availableStates.Contains(request.State)) { return(new Response <OrderResponse>(ResponseStatus.BadRequest, null, ResponseMessagesConstans.AgentHasNotPermissionSetThisState)); } } order.State = request.State; order = await _uow.Orders.FindAndReplaceAsync(order.Id, order); var user = await _uow.Users.FindAsync(new Guid(order.Customer.UserId)); if (user != null) { await _mailingLibrary.SendChangeOrderStateEmail(order, user); } var response = _mapService.MapOrder(order); return(new Response <OrderResponse>(ResponseStatus.Ok, response)); }
public async Task <IHttpActionResult> SetOrderState([FromBody] SetOrderStateRequest request) { var response = await _orderService.SetOrderState(request); return(new CreateResult(response)); }