/// <summary>
        /// Method to update existing budget breakdown by user id
        /// </summary>
        /// <param name="budgetBreakdownModel"></param>
        /// <returns>Completed task</returns>
        public async Task UpdateBudgetBreakdownByUserId(BudgetBreakdownModel budgetBreakdownModel)
        {
            //validate inputs
            if (budgetBreakdownModel == null)
            {
                throw new ArgumentException("Budget Breakdown not found");
            }

            //validate inputs don't exceed 100
            if (budgetBreakdownModel.SavingsBreakdown + budgetBreakdownModel.ExpensesBreakdown > 100)
            {
                throw new Exception("Breakdown percents cannot exceed 100%");
            }

            //pull existing budget breakdown record
            var dbBudgetBreakdown = await _budgetBreakdownRepository.GetBudgetBreakdownByUserId(budgetBreakdownModel.UserId);

            //validate that the correct breakdown was pulled
            if (budgetBreakdownModel.Id != dbBudgetBreakdown.Id)
            {
                throw new Exception("Budget Breakdown records do not match");
            }

            //throw exception if not valid
            if (dbBudgetBreakdown == null)
            {
                throw new Exception("Budget Breakdown not found");
            }


            //map core model to db entity
            var dbBudgetBreakdownEntity = AdoBudgetBreakdownMapper.ExistingCoreModelToDbEntity(budgetBreakdownModel);

            await _budgetBreakdownRepository.UpdateBudgetBreakdownByUserId(dbBudgetBreakdownEntity);
        }
        /// <summary>
        /// Method to add new budget breakdown by user
        /// </summary>
        /// <param name="budgetBreakdownModel"></param>
        /// <returns>Completed task </returns>
        public async Task AddNewBudgetBreakdownByUserId(BudgetBreakdownModel budgetBreakdownModel)
        {
            if (budgetBreakdownModel == null)
            {
                throw new ArgumentException("Budget Breakdown not found");
            }
            if (budgetBreakdownModel.SavingsBreakdown + budgetBreakdownModel.ExpensesBreakdown > 100)
            {
                throw new Exception("Breakdown percents cannot exceed 100%");
            }

            var dbBreakdown = AdoBudgetBreakdownMapper.NewCoreModelToDbEntity(budgetBreakdownModel);
            await _budgetBreakdownRepository.AddNewBudgetBreakdownByUserId(dbBreakdown);
        }
        /// <summary>
        /// Method to pull budget breakdown record by user id
        /// </summary>
        /// <param name="userId"></param>
        /// <returns>Budget Breakdown model </returns>
        public async Task <BudgetBreakdownModel> GetBudgetBreakdownByUser(long userId)
        {
            if (userId == 0)
            {
                throw new ArgumentException("User not found");
            }

            var dbBudgetBreakdown = await _budgetBreakdownRepository.GetBudgetBreakdownByUserId(userId);

            if (dbBudgetBreakdown == null)
            {
                return(null);
            }

            var coreBreakdown = AdoBudgetBreakdownMapper.DbEntityToCoreModel(dbBudgetBreakdown);

            return(coreBreakdown);
        }