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)); }
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); }
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); }
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()); }