From 1428bf8ffa93b6bf52e6ce26de8c4489515d4ea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C4=B1dvan=20Akca?= Date: Thu, 18 Jan 2024 17:31:53 +0300 Subject: [PATCH] feat(ynab): add category overspent trigger --- .../triggers/category-overspent/index.js | 35 +++++++++++++++++++ .../apps/you-need-a-budget/triggers/index.js | 3 +- .../pages/apps/you-need-a-budget/triggers.md | 2 ++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 packages/backend/src/apps/you-need-a-budget/triggers/category-overspent/index.js diff --git a/packages/backend/src/apps/you-need-a-budget/triggers/category-overspent/index.js b/packages/backend/src/apps/you-need-a-budget/triggers/category-overspent/index.js new file mode 100644 index 00000000..9d4df8f7 --- /dev/null +++ b/packages/backend/src/apps/you-need-a-budget/triggers/category-overspent/index.js @@ -0,0 +1,35 @@ +import defineTrigger from '../../../../helpers/define-trigger.js'; + +export default defineTrigger({ + name: 'Category overspent', + key: 'categoryOverspent', + pollInterval: 15, + description: + 'Triggers when a category exceeds its budget, resulting in a negative balance.', + + async run($) { + const categoryWithNegativeBalance = []; + + const response = await $.http.get('/budgets/last-used/categories'); + const categoryGroups = response.data.data.category_groups; + + categoryGroups.forEach((group) => { + group.categories.forEach((category) => { + if (category.balance < 0) { + categoryWithNegativeBalance.push(category); + } + }); + }); + + if (categoryWithNegativeBalance?.length) { + for (const category of categoryWithNegativeBalance) { + $.pushTriggerItem({ + raw: category, + meta: { + internalId: category.id, + }, + }); + } + } + }, +}); diff --git a/packages/backend/src/apps/you-need-a-budget/triggers/index.js b/packages/backend/src/apps/you-need-a-budget/triggers/index.js index 2da56b9a..ff64d17c 100644 --- a/packages/backend/src/apps/you-need-a-budget/triggers/index.js +++ b/packages/backend/src/apps/you-need-a-budget/triggers/index.js @@ -1,3 +1,4 @@ +import categoryOverspent from './category-overspent/index.js'; import lowAccountBalance from './low-account-balance/index.js'; -export default [lowAccountBalance]; +export default [categoryOverspent, lowAccountBalance]; diff --git a/packages/docs/pages/apps/you-need-a-budget/triggers.md b/packages/docs/pages/apps/you-need-a-budget/triggers.md index be7d5712..31313794 100644 --- a/packages/docs/pages/apps/you-need-a-budget/triggers.md +++ b/packages/docs/pages/apps/you-need-a-budget/triggers.md @@ -1,6 +1,8 @@ --- favicon: /favicons/you-need-a-budget.svg items: + - name: Category overspent + desc: Triggers when a category exceeds its budget, resulting in a negative balance. - name: Low account balance desc: Triggers when the balance of a Checking or Savings account falls below a specified amount within a given month. ---