using System.Globalization; using CsvHelper; using CsvHelper.Configuration; using CsvHelper.TypeConversion; namespace FKGees.Services; internal class CsvService { private ILogger _logger; public CsvService(ILogger logger) { _logger = logger; } internal async Task CsvExport(string filePath, IEnumerable records) { try { await using var writer = new StreamWriter(filePath); IWriterConfiguration conf = new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";", Mode = CsvMode.RFC4180, ShouldQuote = quoteArgs => quoteArgs.Field != nameof(DecretsResult.Data) && quoteArgs.Field != nameof(DecretsResult.DataWplywu) && !DateTime.TryParseExact(quoteArgs.Field, Constants.DefaultdateFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out _) }; await using var csv = new CsvWriter(writer, conf); var options = new TypeConverterOptions { Formats = [Constants.DefaultdateFormat], NullValues = { string.Empty }}; csv.Context.TypeConverterOptionsCache.AddOptions(options); csv.Context.TypeConverterOptionsCache.AddOptions(options); await csv.WriteRecordsAsync(records); } catch (Exception e) { _logger.LogError(e, "Error"); throw; } } }