private async Task <List <string> > ExtractConversionCurrencies()
        {
            Debug.WriteLine("Starting conversion group => " + _conversionsGroup);
            if (_conversionsGroup == null)
            {
                _conversionsGroup = GetLatestConversionGroup();
            }

            Debug.WriteLine("Database conversion group => " + _conversionsGroup);
            if (_conversionsGroup != null && IsConversionGroupUpToDate(_conversionsGroup))
            {
                return(GenerateConversionCurrencies(_conversionsGroup));
            }

            var providedGroup = await _conversionGroupProvider.ProvideConversionGroup();

            if (providedGroup == null)
            {
                return(GenerateConversionCurrencies(_conversionsGroup));
            }

            _conversionsGroup = providedGroup;
            Debug.WriteLine("Online conversion group => " + _conversionsGroup);
            AddNewestConversionGroup(providedGroup);

            return(GenerateConversionCurrencies(_conversionsGroup));
        }
Exemplo n.º 2
0
        private ConversionsGroup ConvertToLocalConversionsGroup(
            NetConversionGroup netConversionGroup)
        {
            if (netConversionGroup == null)
            {
                return(null);
            }

            var group = new ConversionsGroup
            {
                Id = Guid.NewGuid().ToString(),
                BaseConversionName = netConversionGroup.@base,
                Date = DateTimeOffset.Now
            };

            var rates = netConversionGroup.rates;

            foreach (PropertyInfo convRate in typeof(Rates).GetProperties())
            {
                var value = (double)convRate.GetValue(rates, null);
                var name  = convRate.Name;
                group.ConversionRates.Add(new ConversionRate
                {
                    Id = Guid.NewGuid().ToString(),
                    BaseConversionRate = value,
                    ConversionName     = name
                });
            }
            return(group);
        }
 private void AddNewestConversionGroup(ConversionsGroup conversionsGroup)
 {
     Ensure.That(conversionsGroup).IsNotNull();
     _dataOperationService.RunTransactionOperation(operation =>
     {
         var groupRepo = operation.ConversionsGroupRepository;
         groupRepo.Insert(conversionsGroup);
     });
 }
        private ConversionsGroup GetLatestConversionGroup()
        {
            Debug.WriteLine("Getting latest conversion group");
            ConversionsGroup group = null;

            _dataOperationService.RunOperation(operation =>
            {
                var groupRepo = operation.ConversionsGroupRepository;
                group         = groupRepo.FindLatest(-1);
                Debug.WriteLine("Found latest => " + group);
            });

            return(group);
        }
Exemplo n.º 5
0
        public void Insert(ConversionsGroup conversionsGroup)
        {
            var mapperConfig =
                new MapperConfiguration(cfg =>
            {
                cfg.CreateMap <ConversionsGroup, SqliteConversionGroup>();
                cfg.CreateMap <ConversionRate, SqliteConversionRate>();
            });

            IMapper mapper      = new Mapper(mapperConfig);
            var     sqliteGroup = mapper.Map <SqliteConversionGroup>(conversionsGroup);
            var     sqliteRates = mapper.Map <IList <ConversionRate>, List <SqliteConversionRate> >(conversionsGroup.ConversionRates);

            sqliteRates.ForEach(it => it.ConversionGroupId = conversionsGroup.Id);


            Database.Insert(sqliteGroup);
            new ConversionRateDatabaseHelper().InsertRates(sqliteRates, Database);
        }
Exemplo n.º 6
0
 public void Insert(ConversionsGroup conversionsGroup)
 {
     _realm.Add(conversionsGroup.DeepClone(-1));
 }
 private bool IsConversionGroupUpToDate(ConversionsGroup group)
 {
     Ensure.That(group).IsNotNull();
     //This checks if this is the same day, no point querying multiple times a day
     return(group.Date.Date == DateTimeOffset.Now.Date);
 }
 private static List <string> GenerateConversionCurrencies(ConversionsGroup group)
 {
     return(@group == null
         ? new List <string>()
         : @group.ConversionRates.Select(c => c.ConversionName).ToList());
 }