public async Task <int> ReloadLedgerHistoryAsync() { while (!StartWork()) { await Task.Delay(1000); } try { using (var context = CreateContext()) { var offset = 0; var data = await _b2C2RestClient.GetLedgerHistoryAsync(offset, 100); _log.Info($"Current offset={offset}; load more {data.Count}"); var query = $"TRUNCATE TABLE {Constants.Schema}.{Constants.LedgersTable}"; _log.Info($"TRUNCATE TABLE {Constants.Schema}.{Constants.LedgersTable}"); await context.Database.ExecuteSqlCommandAsync(query); var list = new HashSet <string>(); while (data.Any()) { var items = data.Select(e => new LedgerEntity(e)).Where(e => !list.Contains(e.TransactionId)).ToList(); context.Ledgers.AddRange(items); await context.SaveChangesAsync(); foreach (var i in items) { list.Add(i.TransactionId); } offset += data.Count; data = await GetDataFromB2C2(offset); _log.Info($"Current offset={offset}; load more {data.Count}"); } return(offset); } } finally { StopWork(); } }
//[Fact] public async void LedgerTest() { var result = await _restClient.GetLedgerHistoryAsync(); Assert.NotNull(result); Assert.NotEmpty(result); foreach (var ledgerLog in result) { Assert.NotEmpty(ledgerLog.TransactionId); Assert.NotEmpty(ledgerLog.Reference); Assert.NotEmpty(ledgerLog.Currency); Assert.NotEqual(0, ledgerLog.Amount); Assert.NotEmpty(ledgerLog.Type); Assert.NotEqual(default(DateTime), ledgerLog.Created); } }
public async Task <int> ReloadLedgerHistoryAsync() { while (!StartWork()) { await Task.Delay(1000); } try { using (var context = CreateContext()) { var ledgerRequest = new LedgersRequest { Limit = 100 }; string transactionId = null; if (_enableAutoUpdate) { var last = context.Ledgers.OrderByDescending(x => x.Created).FirstOrDefault(); if (last != null) { ledgerRequest.CreatedAfter = last.Created.AddHours(-1); transactionId = last.TransactionId; } } var data = await _b2C2RestClient.GetLedgerHistoryAsync(ledgerRequest); _log.Debug($"Current cursor = null; get data after transactionId = {(transactionId ?? "null")}; load more {data.Data.Count}"); int totalCount = 0; bool finish = false; while (!finish || data.Data.Count > 0) { var items = new List <LedgerEntity>(); foreach (var item in data.Data) { foreach (var assetMapping in _assetMappings) { item.Currency = item.Currency.Replace(assetMapping.Key, assetMapping.Value); } items.Add(new LedgerEntity(item)); } foreach (var item in items) { if (!string.IsNullOrEmpty(transactionId) && item.TransactionId == transactionId) { finish = true; break; } totalCount++; context.Ledgers.Add(item); } await context.SaveChangesAsync(); if (finish) { _log.Debug($"Finish loading to transactionId = {transactionId}. Loaded {totalCount} records"); break; } ledgerRequest.Cursor = data.Next; data = await GetDataFromB2C2(ledgerRequest); if (string.IsNullOrEmpty(data.Next)) { finish = true; } _log.Debug($"Current cursor = {ledgerRequest.Cursor}; next cursor: {ledgerRequest.Cursor}; load more {data.Data.Count}"); } return(totalCount); } } finally { StopWork(); } }