public void Execute(ChangeOStatusDto request) { var order = _context.Orders.AsQueryable().Include(o => o.OrderLines).ThenInclude(order => order.Product).FirstOrDefault(o => o.Id == request.OrderId); if (order == null) { throw new EntityNotFoundException(request.OrderId, typeof(Order)); } if (order.OrderStatus == OrderStatus.Delivered) { throw new ConflictOrderStatusException("Cannot change status of delivered order!"); } if (order.OrderStatus == OrderStatus.OnHold) { if (request.Status == OrderStatus.Delivered) { throw new ConflictOrderStatusException("Order cannot be changed from recieved to delivered directly!"); } } if (request.Status == OrderStatus.Canceled || request.Status == OrderStatus.Shipped) { order.OrderStatus = request.Status; if (request.Status == OrderStatus.Canceled) { foreach (var item in order.OrderLines) { item.Product.Stock += item.Quantity; } } _context.SaveChanges(); } }
public void ChangeStatus([FromBody] ChangeOStatusDto dto, [FromServices] IUpdateOrderStatusCommand command) { executor.ExecuteCommand(command, dto); }