private bool compareStats(TransactionCategoryStats stats, decimal min, decimal max, decimal average)
 {
     return(stats != null &&
            stats.MinAmount == min &&
            stats.MaxAmount == max &&
            stats.AverageAmount == average);
 }
        public async Task <ActionResult <Dictionary <string, TransactionCategoryStats> > > GetStats()
        {
            var result = new Dictionary <string, TransactionCategoryStats>();

            var transactions = await transactionRepository.GetAsync();

            var flattenedTransactions  = transactions.SelectMany(kv => kv.Value);
            var transactionsByCategory = flattenedTransactions.GroupBy(t => t.TransactionCategory);

            foreach (var category in transactionsByCategory)
            {
                var stats = new TransactionCategoryStats();
                stats.MinAmount     = category.Min(t => t.Amount);
                stats.MaxAmount     = category.Max(t => t.Amount);
                stats.AverageAmount = category.Average(t => t.Amount);
                result.Add(category.Key, stats);
            }

            return(result);
        }