Exemplo n.º 1
0
        public async Task <ActionResult> CompanyRegistrationsExport([FromQuery] int from = 0, [FromQuery] int count = 9999999)
        {
            try
            {
                if (!User.IsDataExporter(userRepository, placeProviderRepository))
                {
                    throw new Exception(localizer[Controllers_ResultController.Only_user_with_Data_Exporter_role_is_allowed_to_fetch_all_sick_visitors].Value);
                }

                logger.LogInformation($"CompanyRegistrationsExport: User {User.GetEmail()} is exporting data");

                using var stream = new MemoryStream();
                using var writer = new StreamWriter(stream);
                using var csv    = new CsvWriter(writer, CultureInfo.InvariantCulture);

                var data = await visitorRepository.ExportRegistrations(from, count, User.GetPlaceProvider());

                csv.WriteRecords(data);
                writer.Flush();
                var ret = stream.ToArray();
                logger.LogInformation($"CompanyRegistrationsExport: Export size: {ret.Length}");
                return(File(ret, "text/csv", $"company-registrations-{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
                }));
            }
        }