//[Authorize(Roles = "Shop")]
        public async Task <IHttpActionResult> PutOpened(OpenPrivateOrderCommand command)
        {
            command.UserId = UserId;
            var commandResponse = await Bus.Send <OpenPrivateOrderCommand, OpenPrivateOrderCommandResponse>(command);

            var response = new ResponseModel
            {
                Message      = "Order has been successfully opened",
                Success      = true,
                ResponseData = commandResponse
            };

            return(Ok(response));
        }
        public async Task <OpenPrivateOrderCommandResponse> Handle(OpenPrivateOrderCommand command)
        {
            var setting = _applicationSettingRepository.AsQuery().FirstOrDefault();
            var order   = await _orderRepository.FindAsync(command.OrderId);

            if (order == null)
            {
                throw new DomainException("سفارش یافت نشد");
            }
            if (order.OrderStatus == OrderStatus.SelfOpened)
            {
                return(new OpenPrivateOrderCommandResponse());
            }

            if (order is PrivateOrder privateOrder)
            {
                privateOrder.Opened(setting.OrderItemResponseTime);
            }

            else if (order is AreaOrder areaOrder)
            {
                if (_areaRepository.AsQuery()
                    .Any(p => p.PrivateOrder.Id == areaOrder.PrivateOrder.Id && p.OrderStatus == OrderStatus.SelfOpened && p.Id != areaOrder.Id))
                {
                    throw new DomainException("این سفارش توسط یک فروشگاه دیگر باز شده است");
                }
                if (areaOrder.OrderStatus != OrderStatus.Pending)
                {
                    throw new DomainException("وضعیت جاری سفارش نامعتبر می باشد");
                }
                if (areaOrder.ExpireOpenTime <= DateTime.Now)
                {
                    throw new DomainException("مدت زمان بازکردن سفارش توسط شما به پایان رسیده است");
                }
                areaOrder.OrderStatus        = OrderStatus.SelfOpened;
                areaOrder.ResponseExpireTime =
                    DateTime.Now.AddSeconds(areaOrder.OrderItems.Count * setting.OrderItemResponseTime);
                var otherAreaOrderShop = _areaRepository.AsQuery()
                                         .Where(p => p.PrivateOrder.Id == areaOrder.PrivateOrder.Id && p.Id != areaOrder.Id).ToList();
                foreach (var item in otherAreaOrderShop)
                {
                    item.OrderStatus = OrderStatus.OtherOpened;
                }
            }
            return(new OpenPrivateOrderCommandResponse());
        }