Beispiel #1
0
        public static void Main(string[] args)
        {
            var configureForPostalRegistry = JsonSerializerSettingsProvider.CreateSerializerSettings().ConfigureForPostalRegistry();

            JsonConvert.DefaultSettings = () => configureForPostalRegistry;

            _configuration = new ConfigurationBuilder()
                             .SetBasePath(Directory.GetCurrentDirectory())
                             .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false)
                             .AddJsonFile($"appsettings.{Environment.MachineName.ToLowerInvariant()}.json", optional: true, reloadOnChange: false)
                             .Build();

            _importPath = string.IsNullOrEmpty(_configuration[ImportedPathConfigKey])
                ? AppDomain.CurrentDomain.BaseDirectory + "\\imported"
                : _configuration[ImportedPathConfigKey];

            Directory.CreateDirectory(_importPath);

            var importInstant = Instant.FromDateTimeOffset(DateTimeOffset.Now);
            var timestamp     = new BPostTimestamp(importInstant);

            var dataToImport           = DownloadPostalCodes();
            var previouslyImportedData = GetPreviouslyImportedData();

            var commandFactory = new CommandFactory(GetPostalNamesWithLanguage());

            var oldByPostalCode = previouslyImportedData.GroupBy(x => x.PostalCode).ToDictionary(x => x.Key, x => x.ToList());
            var newByPostalCode = dataToImport.GroupBy(x => x.PostalCode).ToDictionary(x => x.Key, x => x.ToList());

            ImportCommands(GenerateCommands(newByPostalCode, oldByPostalCode, commandFactory, timestamp));

            Console.WriteLine("Saving imported html to csv");
            CsvWriterHelper.Export($"{_importPath}\\{importInstant.InUtc().ToString(FileDateFormat, CultureInfo.InvariantCulture)}.csv", dataToImport);

            Console.WriteLine("Finished");
            Console.ReadKey();
        }
Beispiel #2
0
        /// <summary>
        /// Sets up and adds additional converters for PostalRegister to the JsonSerializerSettings
        /// </summary>
        /// <param name="source"></param>
        /// <returns>the updated JsonSerializerSettings</returns>
        public static JsonSerializerSettings ConfigureForPostalRegistry(this JsonSerializerSettings source)
        {
            var jsonSerializerSettings = JsonSerializerSettingsProvider.CreateSerializerSettings();

            source.ContractResolver = jsonSerializerSettings.ContractResolver;

            if (source.ContractResolver is DefaultContractResolver resolver)
            {
                resolver.NamingStrategy.ProcessDictionaryKeys = true;
            }

            source.DateFormatHandling = DateFormatHandling.IsoDateFormat;
            source.Converters.Add(new StringEnumConverter {
                CamelCaseText = true
            });

            //source.DateFormatString = "yyyy-MM-dd";
            //source.Converters.Add(new TrimStringConverter());
            //source.Converters.Add(new GuidConverter());

            return(source
                   .ConfigureForNodaTime(DateTimeZoneProviders.Tzdb)
                   .WithIsoIntervalConverter());
        }