Ejemplo n.º 1
0
        public async Task <IActionResult> GetStock([FromQuery] GetStockCollectionHttpRequest getStockCollectionHttpRequest)
        {
            var queryStockCommand = new QueryStockCommand(getStockCollectionHttpRequest?.Offset ?? 0,
                                                          getStockCollectionHttpRequest?.Take ?? 1)
            {
                StockId               = getStockCollectionHttpRequest?.StockId,
                ProductId             = getStockCollectionHttpRequest?.ProductId,
                PartialProductCode    = getStockCollectionHttpRequest?.ProductCode,
                StockUpdatedLaterThan = getStockCollectionHttpRequest?.StockUpdatedLaterThan
            };
            StockCollectionResponse stockCollectionResponse = await _mediator.Send(queryStockCommand);

            var stockCollectionHttpResponse = new StockCollectionHttpResponse
            {
                TotalCount = stockCollectionResponse.TotalCount,
                Data       = stockCollectionResponse.Data
                             .Select(s => s.ToStockHttpResponse())
                             .ToList()
            };

            return(StatusCode((int)HttpStatusCode.OK, stockCollectionHttpResponse));
        }
        private async Task SyncAvailableStock(long productId, long stockActionId, int availableStock)
        {
            await _distributedLockManager.LockAsync(UpdateAvailableStockLockKey(productId),
                                                    async() =>
            {
                var queryStockCommand = new QueryStockCommand(0, 1)
                {
                    ProductId = productId
                };

                StockCollectionResponse stockCollectionResponse = await _mediator.Send(queryStockCommand);
                StockResponse stockResponse = stockCollectionResponse.Data.First();

                var updateAvailableStockCommand = new UpdateAvailableStockCommand(stockResponse.StockId, availableStock, stockActionId, stockResponse.LastStockOperationDate);
                try
                {
                    await _mediator.Send(updateAvailableStockCommand);
                }
                catch (StockTimeLineException e)
                {
                    _logger.LogInformation(e.Message);
                }
            });
        }