public async Task <Result> Handle(Query request, CancellationToken cancellationToken)
            {
                var hasBudgetCategoriesAccess = await _accessControlService.HasBudgetCategoriesAccessAsync(request.BudgetCategoryIds);

                if (!hasBudgetCategoriesAccess)
                {
                    throw new NotFoundException(Localization.For(() => ErrorMessages.BudgetCategoryNotFound));
                }

                var balances = request.BudgetCategoryIds
                               .Select(x => _balanceService.GetTotalCategoryBalance(x))
                               .Select(x => new BudgetCategoryBalanceDto()
                {
                    BudgetCategoryId           = x.BudgetCategoryId,
                    BudgetLeftToEndOfYear      = x.BudgetLeftToEndOfYear,
                    ThisMonthTransactionsTotal = x.ThisMonthTransactionsTotal,
                    TotalCategoryBalance       = x.TotalCategoryBalance,
                    ThisYearBudgetedAmount     = x.ThisYearBudgetedAmount
                })
                               .ToList();

                return(new Result()
                {
                    Data = balances,
                    Total = balances.Count
                });
            }
            public async Task <Result> Handle(Query request, CancellationToken cancellationToken)
            {
                var spendingBudgetCategoryIds = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Spending).ToList();
                var incomeBudgetCategoryIds   = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Income).ToList();
                var savingBudgetCategoryIds   = _accessControlService.GetAccessibleBudgetCategoryIds(request.BudgetId, eBudgetCategoryType.Saving).ToList();

                var budgetCategoryIds = spendingBudgetCategoryIds.Union(incomeBudgetCategoryIds).Union(savingBudgetCategoryIds);

                var balances = budgetCategoryIds
                               .Select(x => _balanceService.GetTotalCategoryBalance(x))
                               .ToList();


                var spendingBalances = balances.Where(x => spendingBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList();
                var incomeBalances   = balances.Where(x => incomeBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList();
                var savingBalances   = balances.Where(x => savingBudgetCategoryIds.Contains(x.BudgetCategoryId)).ToList();


                var spendingSummary = new BudgetedAmountSummaryDto
                {
                    CurrentBudgetedAmount  = spendingBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b),
                    TotalBudgetedAmount    = spendingBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b),
                    ThisYearBudgetedAmount = spendingBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b),
                };
                var incomeSummary = new BudgetedAmountSummaryDto
                {
                    CurrentBudgetedAmount  = incomeBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b),
                    TotalBudgetedAmount    = incomeBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b),
                    ThisYearBudgetedAmount = incomeBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b),
                };
                var savingSummary = new BudgetedAmountSummaryDto
                {
                    CurrentBudgetedAmount  = savingBalances.Select(x => x.ThisMonthBudgetedAmount).Aggregate((a, b) => a + b),
                    TotalBudgetedAmount    = savingBalances.Select(x => x.TotalBudgetedAmount).Aggregate((a, b) => a + b),
                    ThisYearBudgetedAmount = savingBalances.Select(x => x.ThisYearBudgetedAmount).Aggregate((a, b) => a + b),
                };

                var totalSummary = new BudgetedAmountSummaryDto
                {
                    CurrentBudgetedAmount  = incomeSummary.CurrentBudgetedAmount - spendingSummary.CurrentBudgetedAmount - savingSummary.CurrentBudgetedAmount,
                    TotalBudgetedAmount    = incomeSummary.TotalBudgetedAmount - spendingSummary.TotalBudgetedAmount - savingSummary.TotalBudgetedAmount,
                    ThisYearBudgetedAmount = incomeSummary.ThisYearBudgetedAmount - spendingSummary.ThisYearBudgetedAmount - savingSummary.ThisYearBudgetedAmount,
                };

                return(new Result()
                {
                    Data = new SummaryDto()
                    {
                        SpendingSummary = spendingSummary,
                        IncomeSummary = incomeSummary,
                        SavingSummary = savingSummary,
                        TotalSummary = totalSummary
                    }
                });
            }