public async Task <Result> Handle(CreateOrUpdateCounties request, CancellationToken cancellationToken) { var result = await ReadFromCsv(request) .Ensure(x => x != null && x.Count > 0, "No counties to add or update") .Bind(x => ValidateData(x)) .Tap(async x => await InsertOrUpdateCounties(x, cancellationToken)); return(result); }
private Result <List <CountyCsvModel> > ReadFromCsv(CreateOrUpdateCounties request) { List <CountyCsvModel> counties; try { using var reader = new StreamReader(request.File.OpenReadStream()); using var csv = new CsvReader(reader); counties = csv.GetRecords <CountyCsvModel>() .ToList(); } catch (Exception e) { _logger.LogError("Unable to read csv file", e); return(Result.Failure <List <CountyCsvModel> >("Cannot read csv file provided")); } return(Result.Ok(counties)); }