Beispiel #1
0
        public async Task <List <MonthBalanceModel> > HandleAsync(ListMonthBalance query)
        {
            using (ReadModelContext db = dbFactory.Create())
            {
                Dictionary <MonthModel, Price> expenses = await GetMonthBalanceExpensesAsync(db, query);

                Dictionary <MonthModel, Price> incomes = await GetMonthBalanceIncomesAsync(db, query);

                List <MonthBalanceModel> result = new List <MonthBalanceModel>();
                foreach (var expense in expenses)
                {
                    if (!incomes.TryGetValue(expense.Key, out var income))
                    {
                        income = priceConverter.ZeroDefault(query.UserKey);
                    }

                    result.Add(new MonthBalanceModel(expense.Key.Year, expense.Key.Month, expense.Value, income));
                }

                foreach (var income in incomes)
                {
                    if (!result.Any(b => b == income.Key))
                    {
                        result.Add(new MonthBalanceModel(income.Key.Year, income.Key.Month, priceConverter.ZeroDefault(query.UserKey), income.Value));
                    }
                }

                result.Sort((a, b) => a.Month.CompareTo(b.Month));
                return(result);
            }
        }
Beispiel #2
0
        private async Task <Dictionary <MonthModel, Price> > GetMonthBalanceIncomesAsync(ReadModelContext db, ListMonthBalance query)
        {
            var sql = db.Incomes
                      .WhereUserKey(query.UserKey)
                      .Where(o => o.When.Year == query.Year.Year);

            List <IncomeEntity> entities = await sql.ToListAsync();

            Dictionary <MonthModel, Price> totals = new Dictionary <MonthModel, Price>();

            foreach (IncomeEntity entity in entities)
            {
                MonthModel month = entity.When;
                Price      price;
                if (totals.TryGetValue(month, out price))
                {
                    price = price + priceConverter.ToDefault(query.UserKey, entity);
                }
                else
                {
                    price = priceConverter.ToDefault(query.UserKey, entity);
                }

                totals[month] = price;
            }

            return(totals);
        }