From 8e42173a9799d150889c2fba7bb82696334ae2ac Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Thu, 23 Jan 2025 19:00:04 -0500 Subject: [PATCH 1/6] LF-4692 Update integrating partners model to new names --- .../api/src/controllers/sensorController.js | 18 +++-------- .../api/src/models/PartnerReadingTypeModel.js | 6 ++-- ...egratingPartnersModel.js => addonModel.js} | 31 +++++++++---------- .../models/farmExternalIntegrationsModel.js | 6 ++-- packages/api/src/util/ensemble.js | 10 +++--- 5 files changed, 29 insertions(+), 42 deletions(-) rename packages/api/src/models/{integratingPartnersModel.js => addonModel.js} (68%) diff --git a/packages/api/src/controllers/sensorController.js b/packages/api/src/controllers/sensorController.js index 4d4e8a8271..c51902a02b 100644 --- a/packages/api/src/controllers/sensorController.js +++ b/packages/api/src/controllers/sensorController.js @@ -17,7 +17,7 @@ import baseController from '../controllers/baseController.js'; import SensorModel from '../models/sensorModel.js'; import SensorReadingModel from '../models/sensorReadingModel.js'; -import IntegratingPartnersModel from '../models/integratingPartnersModel.js'; +import AddonModel from '../models/addonModel.js'; import NotificationUser from '../models/notificationUserModel.js'; import FarmExternalIntegrationsModel from '../models/farmExternalIntegrationsModel.js'; import LocationModel from '../models/locationModel.js'; @@ -100,7 +100,7 @@ const sensorController = { async getBrandName(req, res) { try { const { partner_id } = req.params; - const brand_name_response = await IntegratingPartnersModel.getBrandName(partner_id); + const brand_name_response = await AddonModel.getBrandName(partner_id); res.status(200).send(brand_name_response.partner_name); } catch (error) { res.status(404).send('Partner not found'); @@ -118,9 +118,7 @@ const sensorController = { const { farm_id } = req.headers; const { user_id } = req.auth; try { - const { access_token } = await IntegratingPartnersModel.getAccessAndRefreshTokens( - 'Ensemble Scientific', - ); + const { access_token } = await AddonModel.getAccessAndRefreshTokens('Ensemble Scientific'); //TODO: LF-4443 - Sensor should not use User language (unrestricted string), accept as body param or farm level detail const [{ language_preference }] = await baseController.getIndividual(UserModel, user_id); @@ -621,17 +619,11 @@ const sensorController = { const sensor = await baseController.getByFieldId(SensorModel, 'location_id', location_id); const { external_id, partner_id } = sensor[0]; - const brand = await baseController.getByFieldId( - IntegratingPartnersModel, - 'partner_id', - partner_id, - ); + const brand = await baseController.getByFieldId(AddonModel, 'id', partner_id); const { partner_name } = brand[0]; const user_id = req.auth.user_id; - const { access_token } = await IntegratingPartnersModel.getAccessAndRefreshTokens( - 'Ensemble Scientific', - ); + const { access_token } = await AddonModel.getAccessAndRefreshTokens('Ensemble Scientific'); let unclaimResponse; if (partner_name != 'No Integrating Partner' && external_id != '') { const external_integrations_response = await FarmExternalIntegrationsModel.getOrganizationId( diff --git a/packages/api/src/models/PartnerReadingTypeModel.js b/packages/api/src/models/PartnerReadingTypeModel.js index 1e6af8a305..78921a266f 100644 --- a/packages/api/src/models/PartnerReadingTypeModel.js +++ b/packages/api/src/models/PartnerReadingTypeModel.js @@ -16,7 +16,7 @@ import BaseModel from './baseModel.js'; import Model from './baseFormatModel.js'; -import IntegratingPartners from './integratingPartnersModel.js'; +import Addon from './addonModel.js'; class PartnerReadingTypeModel extends BaseModel { /** @@ -62,11 +62,11 @@ class PartnerReadingTypeModel extends BaseModel { static get relationMappings() { return { partner: { - modelClass: IntegratingPartners, + modelClass: Addon, relation: Model.HasOneRelation, join: { from: 'partner_reading_type.partner_id', - to: 'integrating_partner.partner_id', + to: 'addon.id', }, }, }; diff --git a/packages/api/src/models/integratingPartnersModel.js b/packages/api/src/models/addonModel.js similarity index 68% rename from packages/api/src/models/integratingPartnersModel.js rename to packages/api/src/models/addonModel.js index 3e31e1ed18..d6c38d49dc 100644 --- a/packages/api/src/models/integratingPartnersModel.js +++ b/packages/api/src/models/addonModel.js @@ -15,14 +15,14 @@ import Model from './baseFormatModel.js'; -class IntegratingPartners extends Model { +class Addon extends Model { /** * Identifies the database table for this Model. * @static * @returns {string} Names of the database table. */ static get tableName() { - return 'integrating_partner'; + return 'addon'; } /** @@ -31,7 +31,7 @@ class IntegratingPartners extends Model { * @returns {string} Names of the primary key fields. */ static get idColumn() { - return 'partner_id'; + return 'id'; } /** @@ -43,8 +43,8 @@ class IntegratingPartners extends Model { return { type: 'object', properties: { - partner_id: { type: 'integer' }, - partner_name: { type: 'string' }, + id: { type: 'integer' }, + name: { type: 'string' }, access_token: { type: 'string' }, refresh_token: { type: 'string' }, root_url: { type: 'string' }, @@ -54,24 +54,21 @@ class IntegratingPartners extends Model { }; } - static async getAccessAndRefreshTokens(partner_name) { - return await IntegratingPartners.query() + static async getAccessAndRefreshTokens(name) { + return await Addon.query() .select('access_token', 'refresh_token') - .where({ partner_name, deactivated: false }) + .where({ name, deactivated: false }) .first(); } - static async patchAccessAndRefreshTokens(partner_name, access_token, refresh_token) { - return await IntegratingPartners.query() + static async patchAccessAndRefreshTokens(name, access_token, refresh_token) { + return await Addon.query() .patch({ access_token, refresh_token }) - .where({ partner_name, deactivated: false }); + .where({ name, deactivated: false }); } - static async getBrandName(partner_id) { - return await IntegratingPartners.query() - .select('partner_name') - .where('partner_id', partner_id) - .first(); + static async getBrandName(id) { + return await Addon.query().select('name').where('id', id).first(); } } -export default IntegratingPartners; +export default Addon; diff --git a/packages/api/src/models/farmExternalIntegrationsModel.js b/packages/api/src/models/farmExternalIntegrationsModel.js index c88814f1e5..754d41de90 100644 --- a/packages/api/src/models/farmExternalIntegrationsModel.js +++ b/packages/api/src/models/farmExternalIntegrationsModel.js @@ -15,7 +15,7 @@ import Model from './baseFormatModel.js'; -import IntegratingPartners from './integratingPartnersModel.js'; +import Addon from './addonModel.js'; import Farm from './farmModel.js'; class FarmExternalIntegrations extends Model { @@ -71,11 +71,11 @@ class FarmExternalIntegrations extends Model { }, }, partner: { - modelClass: IntegratingPartners, + modelClass: Addon, relation: Model.HasOneRelation, join: { from: 'farm_external_integration.partner_id', - to: 'integrating_partner.partner_id', + to: 'addon.id', }, }, }; diff --git a/packages/api/src/util/ensemble.js b/packages/api/src/util/ensemble.js index b982f28943..51da264fc4 100644 --- a/packages/api/src/util/ensemble.js +++ b/packages/api/src/util/ensemble.js @@ -24,7 +24,7 @@ dotenv.config({ path: path.resolve(dir, '..', '..', '.env') }); import FarmModel from '../models/farmModel.js'; import FarmExternalIntegrationsModel from '../models/farmExternalIntegrationsModel.js'; -import IntegratingPartners from '../models/integratingPartnersModel.js'; +import Addon from '../models/addonModel.js'; import endPoints from '../endPoints.js'; import { fileURLToPath } from 'url'; const { ensembleAPI } = endPoints; @@ -250,11 +250,9 @@ function isAuthError(error) { */ async function refreshTokens() { try { - const { refresh_token } = await IntegratingPartners.getAccessAndRefreshTokens( - 'Ensemble Scientific', - ); + const { refresh_token } = await Addon.getAccessAndRefreshTokens('Ensemble Scientific'); const response = await axios.post(ensembleAPI + '/token/refresh/', { refresh: refresh_token }); - await IntegratingPartners.patchAccessAndRefreshTokens( + await Addon.patchAccessAndRefreshTokens( 'Ensemble Scientific', response.data?.access, response.data?.access, @@ -280,7 +278,7 @@ async function authenticateToGetTokens() { const username = process.env.ENSEMBLE_USERNAME; const password = process.env.ENSEMBLE_PASSWORD; const response = await axios.post(ensembleAPI + '/token/', { username, password }); - await IntegratingPartners.patchAccessAndRefreshTokens( + await Addon.patchAccessAndRefreshTokens( 'Ensemble Scientific', response.data?.access, response.data?.access, From 3258de1c3fe016a1941e87fab398b9998bc60784 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Thu, 23 Jan 2025 19:20:36 -0500 Subject: [PATCH 2/6] LF-4692 Update FarmAddon model --- .../api/src/controllers/sensorController.js | 4 +-- ...IntegrationsModel.js => farmAddonModel.js} | 28 +++++++++---------- packages/api/src/util/ensemble.js | 20 ++++++------- 3 files changed, 25 insertions(+), 27 deletions(-) rename packages/api/src/models/{farmExternalIntegrationsModel.js => farmAddonModel.js} (77%) diff --git a/packages/api/src/controllers/sensorController.js b/packages/api/src/controllers/sensorController.js index c51902a02b..13c85d0574 100644 --- a/packages/api/src/controllers/sensorController.js +++ b/packages/api/src/controllers/sensorController.js @@ -19,7 +19,7 @@ import SensorModel from '../models/sensorModel.js'; import SensorReadingModel from '../models/sensorReadingModel.js'; import AddonModel from '../models/addonModel.js'; import NotificationUser from '../models/notificationUserModel.js'; -import FarmExternalIntegrationsModel from '../models/farmExternalIntegrationsModel.js'; +import FarmAddonModel from '../models/farmAddonModel.js'; import LocationModel from '../models/locationModel.js'; import PointModel from '../models/pointModel.js'; import FigureModel from '../models/figureModel.js'; @@ -626,7 +626,7 @@ const sensorController = { const { access_token } = await AddonModel.getAccessAndRefreshTokens('Ensemble Scientific'); let unclaimResponse; if (partner_name != 'No Integrating Partner' && external_id != '') { - const external_integrations_response = await FarmExternalIntegrationsModel.getOrganizationId( + const external_integrations_response = await FarmAddonModel.getOrganizationId( farm_id, partner_id, ); diff --git a/packages/api/src/models/farmExternalIntegrationsModel.js b/packages/api/src/models/farmAddonModel.js similarity index 77% rename from packages/api/src/models/farmExternalIntegrationsModel.js rename to packages/api/src/models/farmAddonModel.js index 754d41de90..e51e64c6f9 100644 --- a/packages/api/src/models/farmExternalIntegrationsModel.js +++ b/packages/api/src/models/farmAddonModel.js @@ -18,14 +18,14 @@ import Model from './baseFormatModel.js'; import Addon from './addonModel.js'; import Farm from './farmModel.js'; -class FarmExternalIntegrations extends Model { +class FarmAddon extends Model { /** * Identifies the database table for this Model. * @static * @returns {string} Names of the database table. */ static get tableName() { - return 'farm_external_integration'; + return 'farm_addon'; } /** @@ -34,7 +34,7 @@ class FarmExternalIntegrations extends Model { * @returns {string[]} Names of the primary key fields. */ static get idColumn() { - return ['farm_id', 'partner_id']; + return ['farm_id', 'addon_id']; } /** @@ -47,9 +47,9 @@ class FarmExternalIntegrations extends Model { type: 'object', properties: { farm_id: { type: 'string' }, - partner_id: { type: 'integer' }, - organization_uuid: { type: 'string' }, - webhook_id: { type: 'integer' }, + addon_id: { type: 'integer' }, + org_uuid: { type: 'string' }, + org_pk: { type: 'integer' }, }, additionalProperties: false, }; @@ -70,11 +70,11 @@ class FarmExternalIntegrations extends Model { to: 'farm.farm_id', }, }, - partner: { + addon: { modelClass: Addon, relation: Model.HasOneRelation, join: { - from: 'farm_external_integration.partner_id', + from: 'farm_addon.addon_id', to: 'addon.id', }, }, @@ -88,18 +88,16 @@ class FarmExternalIntegrations extends Model { * @return {Promise<*>} */ static async updateWebhookId(farmId, webhookId) { - return FarmExternalIntegrations.query() - .patch({ webhook_id: webhookId }) - .where('farm_id', farmId); + return FarmAddon.query().patch({ webhook_id: webhookId }).where('farm_id', farmId); } - static async getOrganizationId(farmId, partnerId) { - return FarmExternalIntegrations.query() + static async getOrganizationId(farmId, addonId) { + return FarmAddon.query() .select('organization_uuid') .where('farm_id', farmId) - .where('partner_id', partnerId) + .where('addon_id', addonId) .first(); } } -export default FarmExternalIntegrations; +export default FarmAddon; diff --git a/packages/api/src/util/ensemble.js b/packages/api/src/util/ensemble.js index 51da264fc4..98d0d3dcc5 100644 --- a/packages/api/src/util/ensemble.js +++ b/packages/api/src/util/ensemble.js @@ -23,7 +23,7 @@ const dir = path.dirname(fileURLToPath(import.meta.url)); dotenv.config({ path: path.resolve(dir, '..', '..', '.env') }); import FarmModel from '../models/farmModel.js'; -import FarmExternalIntegrationsModel from '../models/farmExternalIntegrationsModel.js'; +import FarmAddonModel from '../models/farmAddonModel.js'; import Addon from '../models/addonModel.js'; import endPoints from '../endPoints.js'; import { fileURLToPath } from 'url'; @@ -107,8 +107,8 @@ async function bulkSensorClaim(accessToken, organizationId, esids) { async function registerOrganizationWebhook(farmId, organizationId, accessToken) { const authHeader = `${farmId}${process.env.SENSOR_SECRET}`; - const existingIntegration = await FarmExternalIntegrationsModel.query() - .where({ farm_id: farmId, partner_id: 1 }) + const existingIntegration = await FarmAddonModel.query() + .where({ farm_id: farmId, addon_id: 1 }) .first(); if (existingIntegration?.webhook_id) { return existingIntegration.webhook_id; @@ -127,7 +127,7 @@ async function registerOrganizationWebhook(farmId, organizationId, accessToken) throw new Error('Failed to register webhook with ESCI'); }; const onResponse = async (response) => { - await FarmExternalIntegrationsModel.updateWebhookId(farmId, response.data.id); + await FarmAddonModel.updateWebhookId(farmId, response.data.id); return { ...response.data, status: response.status }; }; return await ensembleAPICall(accessToken, axiosObject, onError, onResponse); @@ -139,13 +139,13 @@ async function registerOrganizationWebhook(farmId, organizationId, accessToken) * @param farmId * @param accessToken * @async - * @return {Promise<{details: string, status: number}|FarmExternalIntegrations>} + * @return {Promise<{details: string, status: number}|FarmAddon>} */ async function createOrganization(farmId, accessToken) { try { const data = await FarmModel.getFarmById(farmId); - const existingIntegration = await FarmExternalIntegrationsModel.query() - .where({ farm_id: farmId, partner_id: 1 }) + const existingIntegration = await FarmAddonModel.query() + .where({ farm_id: farmId, addon_id: 1 }) .first(); if (!existingIntegration) { const axiosObject = { @@ -162,10 +162,10 @@ async function createOrganization(farmId, accessToken) { const response = await ensembleAPICall(accessToken, axiosObject, onError); - return await FarmExternalIntegrationsModel.query().insert({ + return await FarmAddonModel.query().insert({ farm_id: farmId, - partner_id: 1, - organization_uuid: response.data.uuid, + addon_id: 1, + org_uuid: response.data.uuid, }); } else { return existingIntegration; From 094261619dcfcfafe639fcaa230f445738e7f789 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Thu, 23 Jan 2025 19:27:29 -0500 Subject: [PATCH 3/6] LF-4692 missed a few old references --- packages/api/src/controllers/sensorController.js | 12 ++++++------ packages/api/src/models/farmAddonModel.js | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/api/src/controllers/sensorController.js b/packages/api/src/controllers/sensorController.js index 13c85d0574..c4816614fc 100644 --- a/packages/api/src/controllers/sensorController.js +++ b/packages/api/src/controllers/sensorController.js @@ -101,7 +101,7 @@ const sensorController = { try { const { partner_id } = req.params; const brand_name_response = await AddonModel.getBrandName(partner_id); - res.status(200).send(brand_name_response.partner_name); + res.status(200).send(brand_name_response.name); } catch (error) { res.status(404).send('Partner not found'); } @@ -185,12 +185,12 @@ const sensorController = { const organization = await createOrganization(farm_id, access_token); // register webhook for sensor readings - await registerOrganizationWebhook(farm_id, organization.organization_uuid, access_token); + await registerOrganizationWebhook(farm_id, organization.org_uuid, access_token); // Register sensors with Ensemble ({ success, already_owned, does_not_exist, occupied } = await bulkSensorClaim( access_token, - organization.organization_uuid, + organization.org_uuid, esids, )); } @@ -620,17 +620,17 @@ const sensorController = { const { external_id, partner_id } = sensor[0]; const brand = await baseController.getByFieldId(AddonModel, 'id', partner_id); - const { partner_name } = brand[0]; + const { name } = brand[0]; const user_id = req.auth.user_id; const { access_token } = await AddonModel.getAccessAndRefreshTokens('Ensemble Scientific'); let unclaimResponse; - if (partner_name != 'No Integrating Partner' && external_id != '') { + if (name != 'No Integrating Partner' && external_id != '') { const external_integrations_response = await FarmAddonModel.getOrganizationId( farm_id, partner_id, ); - const org_id = external_integrations_response.organization_uuid; + const org_id = external_integrations_response.org_uuid; unclaimResponse = await unclaimSensor(org_id, external_id, access_token); if (unclaimResponse?.status != 200) { diff --git a/packages/api/src/models/farmAddonModel.js b/packages/api/src/models/farmAddonModel.js index e51e64c6f9..4b02c7c42b 100644 --- a/packages/api/src/models/farmAddonModel.js +++ b/packages/api/src/models/farmAddonModel.js @@ -93,7 +93,7 @@ class FarmAddon extends Model { static async getOrganizationId(farmId, addonId) { return FarmAddon.query() - .select('organization_uuid') + .select('org_uuid') .where('farm_id', farmId) .where('addon_id', addonId) .first(); From 21ce08fde3c3ab366418caec769ff41615d976d0 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Tue, 28 Jan 2025 15:27:42 -0500 Subject: [PATCH 4/6] LF-4692 Rename Addon to AddonPartner --- .../api/src/models/PartnerReadingTypeModel.js | 6 +++--- .../{addonModel.js => addonPartnerModel.js} | 12 ++++++------ packages/api/src/models/farmAddonModel.js | 16 ++++++++-------- 3 files changed, 17 insertions(+), 17 deletions(-) rename packages/api/src/models/{addonModel.js => addonPartnerModel.js} (88%) diff --git a/packages/api/src/models/PartnerReadingTypeModel.js b/packages/api/src/models/PartnerReadingTypeModel.js index 78921a266f..d0975d60b7 100644 --- a/packages/api/src/models/PartnerReadingTypeModel.js +++ b/packages/api/src/models/PartnerReadingTypeModel.js @@ -16,7 +16,7 @@ import BaseModel from './baseModel.js'; import Model from './baseFormatModel.js'; -import Addon from './addonModel.js'; +import AddonPartner from './addonPartnerModel.js'; class PartnerReadingTypeModel extends BaseModel { /** @@ -62,11 +62,11 @@ class PartnerReadingTypeModel extends BaseModel { static get relationMappings() { return { partner: { - modelClass: Addon, + modelClass: AddonPartner, relation: Model.HasOneRelation, join: { from: 'partner_reading_type.partner_id', - to: 'addon.id', + to: 'addon_partner.id', }, }, }; diff --git a/packages/api/src/models/addonModel.js b/packages/api/src/models/addonPartnerModel.js similarity index 88% rename from packages/api/src/models/addonModel.js rename to packages/api/src/models/addonPartnerModel.js index d6c38d49dc..de5f1ee838 100644 --- a/packages/api/src/models/addonModel.js +++ b/packages/api/src/models/addonPartnerModel.js @@ -15,14 +15,14 @@ import Model from './baseFormatModel.js'; -class Addon extends Model { +class AddonPartner extends Model { /** * Identifies the database table for this Model. * @static * @returns {string} Names of the database table. */ static get tableName() { - return 'addon'; + return 'addon_partner'; } /** @@ -55,20 +55,20 @@ class Addon extends Model { } static async getAccessAndRefreshTokens(name) { - return await Addon.query() + return await AddonPartner.query() .select('access_token', 'refresh_token') .where({ name, deactivated: false }) .first(); } static async patchAccessAndRefreshTokens(name, access_token, refresh_token) { - return await Addon.query() + return await AddonPartner.query() .patch({ access_token, refresh_token }) .where({ name, deactivated: false }); } static async getBrandName(id) { - return await Addon.query().select('name').where('id', id).first(); + return await AddonPartner.query().select('name').where('id', id).first(); } } -export default Addon; +export default AddonPartner; diff --git a/packages/api/src/models/farmAddonModel.js b/packages/api/src/models/farmAddonModel.js index 4b02c7c42b..40d72a5191 100644 --- a/packages/api/src/models/farmAddonModel.js +++ b/packages/api/src/models/farmAddonModel.js @@ -15,7 +15,7 @@ import Model from './baseFormatModel.js'; -import Addon from './addonModel.js'; +import AddonPartner from './addonPartnerModel.js'; import Farm from './farmModel.js'; class FarmAddon extends Model { @@ -34,7 +34,7 @@ class FarmAddon extends Model { * @returns {string[]} Names of the primary key fields. */ static get idColumn() { - return ['farm_id', 'addon_id']; + return ['farm_id', 'addon_partner_id']; } /** @@ -47,7 +47,7 @@ class FarmAddon extends Model { type: 'object', properties: { farm_id: { type: 'string' }, - addon_id: { type: 'integer' }, + addon_partner_id: { type: 'integer' }, org_uuid: { type: 'string' }, org_pk: { type: 'integer' }, }, @@ -71,11 +71,11 @@ class FarmAddon extends Model { }, }, addon: { - modelClass: Addon, + modelClass: AddonPartner, relation: Model.HasOneRelation, join: { - from: 'farm_addon.addon_id', - to: 'addon.id', + from: 'farm_addon.addon_partner_id', + to: 'addon_partner.id', }, }, }; @@ -91,11 +91,11 @@ class FarmAddon extends Model { return FarmAddon.query().patch({ webhook_id: webhookId }).where('farm_id', farmId); } - static async getOrganizationId(farmId, addonId) { + static async getOrganizationId(farmId, addonPartnerId) { return FarmAddon.query() .select('org_uuid') .where('farm_id', farmId) - .where('addon_id', addonId) + .where('addon_partner_id', addonPartnerId) .first(); } } From 47136681faae305a51e26a281adfb1043dcbb482 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Tue, 28 Jan 2025 15:28:17 -0500 Subject: [PATCH 5/6] LF-4692 Rename Addon to AddonPartner --- packages/api/src/controllers/sensorController.js | 10 +++++----- packages/api/src/util/ensemble.js | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/api/src/controllers/sensorController.js b/packages/api/src/controllers/sensorController.js index 55f4e91b41..7a68db3df6 100644 --- a/packages/api/src/controllers/sensorController.js +++ b/packages/api/src/controllers/sensorController.js @@ -17,7 +17,7 @@ import baseController from '../controllers/baseController.js'; import SensorModel from '../models/sensorModel.js'; import SensorReadingModel from '../models/sensorReadingModel.js'; -import AddonModel from '../models/addonModel.js'; +import AddonPartnerModel from '../models/addonPartnerModel.js'; import NotificationUser from '../models/notificationUserModel.js'; import FarmAddonModel from '../models/farmAddonModel.js'; import LocationModel from '../models/locationModel.js'; @@ -100,7 +100,7 @@ const sensorController = { async getBrandName(req, res) { try { const { partner_id } = req.params; - const brand_name_response = await AddonModel.getBrandName(partner_id); + const brand_name_response = await AddonPartnerModel.getBrandName(partner_id); res.status(200).send(brand_name_response.name); } catch (error) { res.status(404).send('Partner not found'); @@ -118,7 +118,7 @@ const sensorController = { const { farm_id } = req.headers; const { user_id } = req.auth; try { - const { access_token } = await AddonModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND); + const { access_token } = await AddonPartnerModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND); //TODO: LF-4443 - Sensor should not use User language (unrestricted string), accept as body param or farm level detail const [{ language_preference }] = await baseController.getIndividual(UserModel, user_id); @@ -613,11 +613,11 @@ const sensorController = { const sensor = await baseController.getByFieldId(SensorModel, 'location_id', location_id); const { external_id, partner_id } = sensor[0]; - const brand = await baseController.getByFieldId(AddonModel, 'id', partner_id); + const brand = await baseController.getByFieldId(AddonPartnerModel, 'id', partner_id); const { name } = brand[0]; const user_id = req.auth.user_id; - const { access_token } = await AddonModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND); + const { access_token } = await AddonPartnerModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND); let unclaimResponse; if (name != 'No Integrating Partner' && external_id != '') { const external_integrations_response = await FarmAddonModel.getOrganizationId( diff --git a/packages/api/src/util/ensemble.js b/packages/api/src/util/ensemble.js index 2df1e0fde9..c5a4cae832 100644 --- a/packages/api/src/util/ensemble.js +++ b/packages/api/src/util/ensemble.js @@ -24,7 +24,7 @@ dotenv.config({ path: path.resolve(dir, '..', '..', '.env') }); import FarmModel from '../models/farmModel.js'; import FarmAddonModel from '../models/farmAddonModel.js'; -import Addon from '../models/addonModel.js'; +import AddonPartner from '../models/addonPartnerModel.js'; import endPoints from '../endPoints.js'; import { fileURLToPath } from 'url'; const { ensembleAPI } = endPoints; @@ -130,7 +130,7 @@ async function bulkSensorClaim(accessToken, organizationId, esids) { async function registerOrganizationWebhook(farmId, organizationId, accessToken) { const authHeader = `${farmId}${process.env.SENSOR_SECRET}`; const existingIntegration = await FarmAddonModel.query() - .where({ farm_id: farmId, addon_id: 1 }) + .where({ farm_id: farmId, addon_partner_id: 1 }) .first(); if (existingIntegration?.webhook_id) { return; @@ -167,7 +167,7 @@ async function createOrganization(farmId, accessToken) { try { const data = await FarmModel.getFarmById(farmId); const existingIntegration = await FarmAddonModel.query() - .where({ farm_id: farmId, addon_id: 1 }) + .where({ farm_id: farmId, addon_partner_id: 1 }) .first(); if (!existingIntegration) { const axiosObject = { @@ -186,7 +186,7 @@ async function createOrganization(farmId, accessToken) { return await FarmAddonModel.query().insert({ farm_id: farmId, - addon_id: 1, + addon_partner_id: 1, org_uuid: response.data.uuid, }); } else { @@ -272,9 +272,9 @@ function isAuthError(error) { */ async function refreshTokens() { try { - const { refresh_token } = await Addon.getAccessAndRefreshTokens(ENSEMBLE_BRAND); + const { refresh_token } = await AddonPartner.getAccessAndRefreshTokens(ENSEMBLE_BRAND); const response = await axios.post(ensembleAPI + '/token/refresh/', { refresh: refresh_token }); - await Addon.patchAccessAndRefreshTokens( + await AddonPartner.patchAccessAndRefreshTokens( ENSEMBLE_BRAND, response.data?.access, response.data?.access, @@ -300,7 +300,7 @@ async function authenticateToGetTokens() { const username = process.env.ENSEMBLE_USERNAME; const password = process.env.ENSEMBLE_PASSWORD; const response = await axios.post(ensembleAPI + '/token/', { username, password }); - await Addon.patchAccessAndRefreshTokens( + await AddonPartner.patchAccessAndRefreshTokens( ENSEMBLE_BRAND, response.data?.access, response.data?.access, From 411d437e1bea29348859044d605daaaa3c5dfb23 Mon Sep 17 00:00:00 2001 From: Duncan-Brain Date: Tue, 28 Jan 2025 15:33:12 -0500 Subject: [PATCH 6/6] LF-4692 Update org_uuid --- packages/api/src/util/ensemble.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/api/src/util/ensemble.js b/packages/api/src/util/ensemble.js index c5a4cae832..85e467b2e6 100644 --- a/packages/api/src/util/ensemble.js +++ b/packages/api/src/util/ensemble.js @@ -75,10 +75,10 @@ async function registerFarmAndClaimSensors(farm_id, access_token, esids) { const organization = await createOrganization(farm_id, access_token); // Create a webhook for the organization - await registerOrganizationWebhook(farm_id, organization.organization_uuid, access_token); + await registerOrganizationWebhook(farm_id, organization.org_uuid, access_token); // Register sensors with Ensemble and return Ensemble API results - return await bulkSensorClaim(access_token, organization.organization_uuid, esids); + return await bulkSensorClaim(access_token, organization.org_uuid, esids); } /**