Skip to content

Commit

Permalink
Merge pull request #3672 from LiteFarmOrg/LF-4625a-update-controller-…
Browse files Browse the repository at this point in the history
…for-sensor-addition

LF-4695 Create GET endpoint to fetch list of Ensemble devices (integration base)
  • Loading branch information
kathyavini authored Jan 30, 2025
2 parents fb0f3e3 + b965fb7 commit bd5a678
Show file tree
Hide file tree
Showing 17 changed files with 457 additions and 108 deletions.
16 changes: 5 additions & 11 deletions packages/api/src/controllers/farmAddonController.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,32 +13,26 @@
* GNU General Public License for more details, see <https://www.gnu.org/licenses/>.
*/

import AddonPartnerModel from '../models/addonPartnerModel.js';
import FarmAddonModel from '../models/farmAddonModel.js';

import { ENSEMBLE_BRAND, getEnsembleOrganizations } from '../util/ensemble.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;

try {
const { access_token } = await AddonPartnerModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND);

const allRegisteredOrganizations = await getEnsembleOrganizations(access_token);

const organization = allRegisteredOrganizations.find(({ uuid }) => uuid === org_uuid);
const organisation = await getValidEnsembleOrg(org_uuid);

if (!organization) {
return res.status(404).send('Organization not found');
if (!organisation) {
return res.status(404).send('Organisation not found');
}

await FarmAddonModel.upsertFarmAddon({
farm_id,
addon_partner_id,
org_uuid,
org_pk: organization.pk,
org_pk: organisation.pk,
});

return res.status(200).send();
Expand Down
40 changes: 19 additions & 21 deletions packages/api/src/controllers/sensorController.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import {
registerFarmAndClaimSensors,
unclaimSensor,
ENSEMBLE_UNITS_MAPPING,
getEnsembleSensors,
} from '../util/ensemble.js';
import { databaseUnit } from '../util/unit.js';
import { sensorErrors, parseSensorCsv } from '../../../shared/validation/sensorCSV.js';
Expand Down Expand Up @@ -106,6 +107,22 @@ const sensorController = {
res.status(404).send('Partner not found');
}
},
async getSensors(req, res) {
const { farm_id } = req.headers;
try {
const { sensors, sensor_arrays } = await getEnsembleSensors(farm_id);

return res.status(200).send({
sensors,
sensor_arrays,
});
} catch (error) {
console.log(error);
return res.status(400).json({
error,
});
}
},
async addSensors(req, res) {
let timeLimit = 5000;
const testTimerOverride = Number(req.query?.sensorUploadTimer);
Expand All @@ -118,8 +135,6 @@ const sensorController = {
const { farm_id } = req.headers;
const { user_id } = req.auth;
try {
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);

Expand Down Expand Up @@ -182,7 +197,6 @@ const sensorController = {
if (esids.length > 0) {
({ success, already_owned, does_not_exist, occupied } = await registerFarmAndClaimSensors(
farm_id,
access_token,
esids,
));
}
Expand Down Expand Up @@ -412,21 +426,6 @@ const sensorController = {
}
},

async getSensorsByFarmId(req, res) {
try {
const { farm_id } = req.params;
if (!farm_id) {
return res.status(400).send('No farm selected');
}
const data = await baseController.getByFieldId(SensorModel, 'farm_id', farm_id);
res.status(200).send(data);
} catch (error) {
res.status(400).json({
error,
});
}
},

// Note : API is called at the ensemble backend. the ensemble backend sends the same status code when we add sensors to the farm (register sensor API).
// when we register some sensors, the add readings API is called and the same status code is passed in the response of register sensors (i.e 200).
// For example, if we make that as 400 then the registered sensor API of the ensemble will send back 400 and the add sensor API will fail.
Expand Down Expand Up @@ -617,15 +616,14 @@ const sensorController = {
const { name } = brand[0];

const user_id = req.auth.user_id;
const { access_token } = await AddonPartnerModel.getAccessAndRefreshTokens(ENSEMBLE_BRAND);
let unclaimResponse;
if (name != 'No Integrating Partner' && external_id != '') {
const external_integrations_response = await FarmAddonModel.getOrganizationId(
const external_integrations_response = await FarmAddonModel.getOrganisationIds(
farm_id,
partner_id,
);
const org_id = external_integrations_response.org_uuid;
unclaimResponse = await unclaimSensor(org_id, external_id, access_token);
unclaimResponse = await unclaimSensor(org_id, external_id);

if (unclaimResponse?.status != 200) {
await trx.rollback();
Expand Down
4 changes: 2 additions & 2 deletions packages/api/src/models/farmAddonModel.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,9 @@ class FarmAddon extends Model {
return FarmAddon.query().patch({ webhook_id: webhookId }).where('farm_id', farmId);
}

static async getOrganizationId(farmId, addonPartnerId) {
static async getOrganisationIds(farmId, addonPartnerId) {
return FarmAddon.query()
.select('org_uuid')
.select('org_uuid', 'org_pk')
.where('farm_id', farmId)
.where('addon_partner_id', addonPartnerId)
.first();
Expand Down
2 changes: 1 addition & 1 deletion packages/api/src/routes/sensorRoute.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ const upload = multer({ storage });

const router = express.Router();

router.get('/:farm_id', SensorController.getSensorsByFarmId);
router.get('/', checkScope(['get:sensors']), SensorController.getSensors);
router.post(
'/',
checkScope(['add:sensors']),
Expand Down
Loading

0 comments on commit bd5a678

Please sign in to comment.