//[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()); }