Esempio n. 1
0
        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
            });
        }
Esempio n. 2
0
 public async Task <Result <Order> > Deliver(CourierDispatchContext context) => throw new NotImplementedException();
Esempio n. 3
0
        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
            });
        }