From d3fafee1f4a6c3a4e7ab8c38b5e98cffd85aa45a Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Mon, 27 Jan 2025 14:04:46 -0500 Subject: [PATCH 1/5] LF-4694 Add basic endpoint without auth --- .../src/controllers/farmAddonController.js | 24 +++++++++++++++++++ packages/api/src/routes/farmAddonRoute.js | 8 +++++++ 2 files changed, 32 insertions(+) create mode 100644 packages/api/src/controllers/farmAddonController.js create mode 100644 packages/api/src/routes/farmAddonRoute.js diff --git a/packages/api/src/controllers/farmAddonController.js b/packages/api/src/controllers/farmAddonController.js new file mode 100644 index 0000000000..9b1648b0df --- /dev/null +++ b/packages/api/src/controllers/farmAddonController.js @@ -0,0 +1,24 @@ +import FarmAddonModel from '../models/farmAddonModel.js'; + +const farmAddonController = { + getFarmAddon() { + return async (req, res) => { + try { + const { farm_id } = req.headers; + const { addon_id } = req.query; + const rows = await FarmAddonModel.query().where({ farm_id, addon_id }); + if (!rows.length) { + return res.sendStatus(404); + } + return res.sendStatus(200); + } catch (error) { + console.error(error); + return res.status(500).json({ + error, + }); + } + }; + }, +}; + +export default farmAddonController; diff --git a/packages/api/src/routes/farmAddonRoute.js b/packages/api/src/routes/farmAddonRoute.js new file mode 100644 index 0000000000..ae08b02ade --- /dev/null +++ b/packages/api/src/routes/farmAddonRoute.js @@ -0,0 +1,8 @@ +import express from 'express'; +import farmAddonController from '../controllers/farmAddonController.js'; + +const router = express.Router(); + +router.get('/', farmAddonController.getFarmAddon()); + +export default router; From ac2715e95f348a3cfad5efbecf94e67692c4104d Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Mon, 27 Jan 2025 18:18:25 -0500 Subject: [PATCH 2/5] LF-4694 Add scope check --- packages/api/src/routes/farmAddonRoute.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/api/src/routes/farmAddonRoute.js b/packages/api/src/routes/farmAddonRoute.js index ae08b02ade..4d91be323d 100644 --- a/packages/api/src/routes/farmAddonRoute.js +++ b/packages/api/src/routes/farmAddonRoute.js @@ -1,8 +1,9 @@ import express from 'express'; +import checkScope from '../middleware/acl/checkScope.js'; import farmAddonController from '../controllers/farmAddonController.js'; const router = express.Router(); -router.get('/', farmAddonController.getFarmAddon()); +router.get('/', checkScope(['get:addon']), farmAddonController.getFarmAddon()); export default router; From b244a246da37f7b2027ca51ac65591bd60e0419e Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Fri, 31 Jan 2025 10:09:31 -0500 Subject: [PATCH 3/5] LF-4694 Allow addon_partner_id to not be specified --- packages/api/src/controllers/farmAddonController.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/api/src/controllers/farmAddonController.js b/packages/api/src/controllers/farmAddonController.js index 1cba6162ae..691e977166 100644 --- a/packages/api/src/controllers/farmAddonController.js +++ b/packages/api/src/controllers/farmAddonController.js @@ -48,7 +48,9 @@ const farmAddonController = { try { const { farm_id } = req.headers; const { addon_partner_id } = req.query; - const rows = await FarmAddonModel.query().where({ farm_id, addon_partner_id }); + const rows = await FarmAddonModel.query() + .where({ farm_id, addon_partner_id }) + .skipUndefined(); if (!rows.length) { return res.sendStatus(404); } From eb191cdce93ecd294362c4b4f05742bb931becf5 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Fri, 31 Jan 2025 13:03:52 -0500 Subject: [PATCH 4/5] LF-4694 Update add farm addon to higher order function to match other --- .../src/controllers/farmAddonController.js | 44 ++++++++++--------- packages/api/src/routes/farmAddonRoute.js | 2 +- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/packages/api/src/controllers/farmAddonController.js b/packages/api/src/controllers/farmAddonController.js index 691e977166..0bb2d1326a 100644 --- a/packages/api/src/controllers/farmAddonController.js +++ b/packages/api/src/controllers/farmAddonController.js @@ -17,31 +17,33 @@ import FarmAddonModel from '../models/farmAddonModel.js'; import { getValidEnsembleOrg } from '../util/ensemble.js'; const farmAddonController = { - async addFarmAddon(req, res) { - const { farm_id } = req.headers; - const { addon_partner_id, org_uuid } = req.body; + addFarmAddon() { + return async (req, res) => { + const { farm_id } = req.headers; + const { addon_partner_id, org_uuid } = req.body; - try { - const organisation = await getValidEnsembleOrg(org_uuid); + try { + const organisation = await getValidEnsembleOrg(org_uuid); - if (!organisation) { - return res.status(404).send('Organisation not found'); - } + if (!organisation) { + return res.status(404).send('Organisation not found'); + } - await FarmAddonModel.upsertFarmAddon({ - farm_id, - addon_partner_id, - org_uuid, - org_pk: organisation.pk, - }); + await FarmAddonModel.upsertFarmAddon({ + farm_id, + addon_partner_id, + org_uuid, + org_pk: organisation.pk, + }); - return res.status(200).send(); - } catch (error) { - console.log(error); - return res.status(400).json({ - error, - }); - } + return res.status(200).send(); + } catch (error) { + console.log(error); + return res.status(400).json({ + error, + }); + } + }; }, getFarmAddon() { return async (req, res) => { diff --git a/packages/api/src/routes/farmAddonRoute.js b/packages/api/src/routes/farmAddonRoute.js index f2037c7527..4010d8798e 100644 --- a/packages/api/src/routes/farmAddonRoute.js +++ b/packages/api/src/routes/farmAddonRoute.js @@ -24,7 +24,7 @@ router.post( '/', checkScope(['add:farm_addon']), checkFarmAddon(), - FarmAddonController.addFarmAddon, + FarmAddonController.addFarmAddon(), ); router.get('/', checkScope(['get:farm_addon']), FarmAddonController.getFarmAddon()); From f8771a4cba0b289c03af8752239c71e87206d7bb Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Wed, 5 Feb 2025 11:00:42 -0500 Subject: [PATCH 5/5] LF-4694 Return plain rows --- packages/api/src/controllers/farmAddonController.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/api/src/controllers/farmAddonController.js b/packages/api/src/controllers/farmAddonController.js index f0c428208c..6615f3535a 100644 --- a/packages/api/src/controllers/farmAddonController.js +++ b/packages/api/src/controllers/farmAddonController.js @@ -56,7 +56,10 @@ const farmAddonController = { if (!rows.length) { return res.sendStatus(404); } - return res.sendStatus(200); + const result = rows.map(({ addon_partner_id, org_uuid }) => { + return { addon_partner_id, org_uuid }; + }); + return res.status(200).send(result); } catch (error) { console.error(error); return res.status(500).json({