public async Task <IActionResult> RemoveFromStock([FromBody] RemoveFromStockHttpRequest?removeFromStockHttpRequest)
        {
            RemoveFromStockCommand removeFromStockCommand = new RemoveFromStockCommand(removeFromStockHttpRequest?.ProductId ?? string.Empty,
                                                                                       removeFromStockHttpRequest?.Count ?? 0,
                                                                                       removeFromStockHttpRequest?.CorrelationId ?? string.Empty);
            await _executionContext.ExecuteAsync(removeFromStockCommand, CancellationToken.None);

            return(StatusCode((int)HttpStatusCode.OK));
        }
 private async Task RemoveFromStockAsync(OrderSubmittedIntegrationEvent orderSubmittedIntegrationEvent, CancellationToken cancellationToken)
 {
     foreach (OrderItem orderItem in orderSubmittedIntegrationEvent.OrderItems)
     {
         string correlationId = CorrelationIdGenerator.DecreaseFromStock(orderSubmittedIntegrationEvent.OrderId, orderItem.ProductId);
         RemoveFromStockCommand removeFromStockCommand = new RemoveFromStockCommand(orderItem.ProductId,
                                                                                    orderItem.Quantity,
                                                                                    correlationId);
         try
         {
             using (IExecutionContext executionContext = GetExecutionContext())
                 await executionContext.ExecuteAsync(removeFromStockCommand, cancellationToken);
         }
         catch (StockActionAlreadyExistException)
         {
             continue;
         }
     }
 }
Example #3
0
        public async Task <IActionResult> RemoveFromStock([FromRoute] long productId, [FromBody] RemoveFromStockHttpRequest removeFromStockHttpRequest)
        {
            var queryProductServiceRequest = new QueryProductCommand(0, 1)
            {
                ProductId = productId
            };

            await _mediator.Send(queryProductServiceRequest);

            StockActionHttpResponse stockActionHttpResponse = null;
            await _distributedLockManager.LockAsync(StockOperationLockKey(productId),
                                                    async() =>
            {
                RemoveFromStockCommand removeFromStockCommand = removeFromStockHttpRequest != null
                                                                                                            ? new RemoveFromStockCommand(productId, removeFromStockHttpRequest.Count, removeFromStockHttpRequest.CorrelationId)
                                                                                                            : null;

                StockActionResponse stockActionResponse = await _mediator.Send(removeFromStockCommand);

                stockActionHttpResponse = stockActionResponse.ToStockActionHttpResponse();
            });

            return(StatusCode((int)HttpStatusCode.OK, stockActionHttpResponse));
        }