public async Task <Result <Courier> > Decline(CourierDispatchContext context) { var courier = await _db.Couriers.FindAsync(context.CourierId); if (courier == null) { _logger.LogInformation($"Courier {context.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(context.OrderId); if (order == null) { _logger.LogInformation($"Order {context.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) { _logger.LogInformation($"Courier {context.CourierId} was not updated."); return(new Result <Courier> { Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false }); } var address = await _db.Addresses.FindAsync(courier.AddressId); _logger.LogInformation($"Order {context.OrderId} and courier {context.CourierId} information was updated."); return(new Result <Courier> { ChangeCount = changes, Value = MapEntity(courier, address), IsSuccessful = true }); }
public async Task <Result <Order> > Deliver(CourierDispatchContext context) => throw new NotImplementedException();
public async Task <Result <Order> > PickUpOrder(CourierDispatchContext context) { var restaurant = await _db.Restaurants.FindAsync(context.RestaurantId); if (restaurant == null || !restaurant.IsActive) { _logger.LogInformation($"Restaurant {context.RestaurantId} could not be found."); return(new Result <Order> { Reason = ReasonType.RestaurantNotFound, IsSuccessful = false }); } if (!restaurant.IsOpen) { _logger.LogInformation($"Restaurant {context.RestaurantId} is not open."); return(new Result <Order> { Reason = ReasonType.RestaurantNotOpen, IsSuccessful = false }); } var courier = await _db.Couriers.FindAsync(context.CourierId); if (courier == null) { _logger.LogInformation($"Courier {context.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(context.OrderId); if (order == null) { _logger.LogInformation($"Order {context.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) { _logger.LogInformation($"Order {context.OrderId} was not updated."); return(new Result <Order> { Reason = ReasonType.DatabaseError, ChangeCount = changes, IsSuccessful = false }); } _logger.LogInformation($"Order {context.OrderId} and courier {context.CourierId} information was updated."); return(new Result <Order> { ChangeCount = changes, Value = MapEntity(courier, order), IsSuccessful = true }); }