public async Task BulkAdd(Stream booksStream)
        {
            if (booksStream == null)
            {
                throw new ArgumentNullException(nameof(booksStream));
            }

            if (booksStream.Length == 0)
            {
                throw new ArgumentException($"An empty stream was passed for books bulk insert.");
            }

            var bookModels = csvParserService.Parse <BookModel, BookModelMap>(booksStream);
            var books      = mapper.Map <IEnumerable <Book> >(bookModels).ToList();

            await context.BulkInsertAsync(books);

            await elasticClient.IndexManyAsync(books);

            logger.LogInformation($"Bulk insert of {books.Count} books has successfully finished at {DateTime.UtcNow}.");
        }
Example #2
0
        public async Task <ImportFileRequestResponse> Handle(string filePath)
        {
            _logger.LogInformation("Start processing the saved file content...");
            var parsedDataItems = await _csvParserService.Parse(filePath);

            var normalizedCSVData = await _normalizationService.Normalize(parsedDataItems);

            _logger.LogInformation("Finish extracting content from the file.");

            _logger.LogInformation("Start processing content to store different storage...");

            var databaseProcess = _dataStorageRepository.SaveNormalizedItemsAsync(normalizedCSVData, StorageTypeEnum.Database);
            var jsonProcess     = _dataStorageRepository.SaveNormalizedItemsAsync(normalizedCSVData, StorageTypeEnum.JSON);
            await Task.WhenAll(databaseProcess, jsonProcess);

            _logger.LogInformation($"Finish storing content in {StorageTypeEnum.Database} and {StorageTypeEnum.JSON}.");

            return(new ImportFileRequestResponse
            {
                ProcessedItems = normalizedCSVData.Products.Count,
                ResponseMessage = $"Imported file processed successfully."
            });
        }