/// <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);
        }
        public async Task <IActionResult> AddNewBudgetBreakdown([FromBody] AddNewBudgetBreakdownRequest newBreakdownRequest)
        {
            /* validate inputs start */
            if (newBreakdownRequest == null)
            {
                return(StatusCode(400, "Budget Breakdown not provided"));
            }

            if (newBreakdownRequest.ExpensesBreakdown <= 0)
            {
                return(StatusCode(400, "Expense Breakdown not provided"));
            }

            if (newBreakdownRequest.SavingsBreakdown <= 0)
            {
                return(StatusCode(400, "Savings Breakdown not provided"));
            }

            /* validate inputs end*/
            try
            {
                BudgetBreakdownModel coreBreakdownModel = new BudgetBreakdownModel()
                {
                    UserId            = (long)newBreakdownRequest.UserId,
                    BudgetType        = newBreakdownRequest.BudgetType,
                    ExpensesBreakdown = newBreakdownRequest.ExpensesBreakdown,
                    SavingsBreakdown  = newBreakdownRequest.SavingsBreakdown
                };

                await _budgetBreakdownServices.AddNewBudgetBreakdownByUserId(coreBreakdownModel);

                return(StatusCode(201));
            }
            catch (ArgumentException ae)
            {
                return(StatusCode(400, ae.Message));
            }
            catch (Exception e)
            {
                return(StatusCode(500, e.Message));
            }
        }