public async Task <ActionResult> ExportResultSubmissions([FromQuery] DateTimeOffset?day = null, [FromQuery] int from = 0, [FromQuery] int count = 9999999) { try { if ( !User.IsDataExporter(userRepository, placeProviderRepository) && !await User.IsPlaceProviderAdmin(userRepository, placeProviderRepository) ) { throw new Exception(localizer[Controllers_ResultController.Only_user_with_Data_Exporter_role_is_allowed_to_fetch_all_sick_visitors].Value); } logger.LogInformation($"ExportResultSubmissions: {User.GetEmail()} is exporting"); using var stream = new MemoryStream(); using var writer = new StreamWriter(stream); using var csv = new CsvWriter(writer, CultureInfo.InvariantCulture); var places = (await placeRepository.ListAll()).Where(place => place.PlaceProviderId == User.GetPlaceProvider()).Select(p => p.Id).ToHashSet(); var data = await visitorRepository.ExportResultSubmissions(from, count, places); if (day.HasValue) { data = data.Where(d => d.Time >= day.Value.Date && d.Time < day.Value.Date.AddDays(1)); } csv.WriteRecords(data); writer.Flush(); var ret = stream.ToArray(); logger.LogInformation($"Export size: {ret.Length}"); return(File(ret, "text/csv", $"final-data-export-{from}-{count}.csv")); } catch (ArgumentException exc) { logger.LogError(exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } catch (Exception exc) { logger.LogError(exc, exc.Message); return(BadRequest(new ProblemDetails() { Detail = exc.Message })); } }