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; } } }
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)); }