Ejemplo n.º 1
0
        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
            });
        }
Ejemplo n.º 2
0
        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
            });
        }