Ejemplo n.º 1
0
        /// <summary>
        /// Обновление дерева последними зарегистрированными транзакциями
        /// </summary>
        public async Task UpdateTree()
        {
            var lastUpdate = await _dbContext.UpdateHistory.OrderByDescending(a => a.CreationTime).FirstOrDefaultAsync(_cancellationToken);

            //Получаем элементы в порядке убывания поддержки
            var order = await _productsService.GetOrderedProducts();

            if (lastUpdate == null) //FP-дерево не создано
            {
                await BuildNewTree(order);
            }
            else
            {
                var transactions = await _transactionsService.GetLastTransactions(lastUpdate.CreationTime);

                var tree = await _fpTreeProvider.GetActualFpTree();

                var root = tree.Single(a => a.Id == lastUpdate.RootId);

                PushTransactions(transactions, order, root);
                _dbContext.UpdateHistory.Add(new FpTreeUpdateInfo(root.Id, DateTimeOffset.UtcNow));
            }

            await _dbContext.SaveChangesAsync(_cancellationToken);
        }