public async Task <Result <Courier> > Decline(CourierDispatchRequest request) { var courier = await _db.Couriers.FindAsync(request.CourierId); if (courier == null) { Log.Information($"Courier {request.CourierId} could not be found."); return(new Result <Courier> { Reason = ReasonType.CourierNotFound, IsSuccessful = false }); } courier.Status = (int)CourierStatus.DispatchDeclined; courier.StatusTimestamp = DateTime.Now; _db.Update(courier); var order = await _db.Orders.FindAsync(request.OrderId); if (order == null) { Log.Information($"Order {request.OrderId} could not be found."); return(new Result <Courier> { Reason = ReasonType.OrderNotFound, IsSuccessful = false }); } order.CourierId = null; order.StatusTimestamp = DateTime.Now; _db.Update(order); var changes = await _db.SaveChangesAsync(); if (changes <= 0) { Log.Information($"Courier {request.CourierId} was not updated."); return(new Result <Courier> { Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false }); } var address = await _db.Addresses.FindAsync(courier.AddressId); Log.Information($"Order {request.OrderId} and courier {request.CourierId} information was updated."); return(new Result <Courier> { ChangeCount = changes, Value = MapEntity(courier, address), IsSuccessful = true }); }
public async Task <Result <Order> > PickUpOrder(CourierDispatchRequest request) { var restaurant = await _db.Restaurants.FindAsync(request.RestaurantId); if (restaurant == null || !restaurant.IsActive) { Log.Information($"Restaurant {request.RestaurantId} could not be found."); return(new Result <Order> { Reason = ReasonType.RestaurantNotFound, IsSuccessful = false }); } if (!restaurant.IsOpen) { Log.Information($"Restaurant {request.RestaurantId} is not open."); return(new Result <Order> { Reason = ReasonType.RestaurantNotOpen, IsSuccessful = false }); } var courier = await _db.Couriers.FindAsync(request.CourierId); if (courier == null) { Log.Information($"Courier {request.CourierId} could not be found."); return(new Result <Order> { Reason = ReasonType.CourierNotFound, IsSuccessful = false }); } courier.Status = (int)CourierStatus.PickedUpOrder; courier.StatusTimestamp = DateTime.Now; _db.Update(courier); var order = await _db.Orders.FindAsync(request.OrderId); if (order == null) { Log.Information($"Order {request.OrderId} could not be found."); return(new Result <Order> { Reason = ReasonType.OrderNotFound, IsSuccessful = false }); } order.CourierId = courier.CourierId; order.Status = (int)OrderStatus.Delivering; order.StatusTimestamp = DateTime.Now; _db.Update(order); int changes = await _db.SaveChangesAsync(); if (changes <= 0) { Log.Information($"Order {request.OrderId} was not updated."); return(new Result <Order> { Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false }); } Log.Information($"Order {request.OrderId} and courier {request.CourierId} information was updated."); return(new Result <Order> { ChangeCount = changes, Value = MapEntity(courier, order), IsSuccessful = true }); }