From e21550f80383f054f513395754a661380cfa5ef7 Mon Sep 17 00:00:00 2001 From: xfarrow Date: Wed, 27 Mar 2024 15:26:15 +0100 Subject: [PATCH] findByOrganizationId also returns tags --- .../apis/nodejs/src/models/job_offer_model.js | 22 ++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/backend/apis/nodejs/src/models/job_offer_model.js b/backend/apis/nodejs/src/models/job_offer_model.js index fc92c53..a45a62c 100644 --- a/backend/apis/nodejs/src/models/job_offer_model.js +++ b/backend/apis/nodejs/src/models/job_offer_model.js @@ -72,10 +72,26 @@ async function findById(jobOfferId) { }).select().first(); } -async function findByOrganizationId(organizationId){ +/** + * Get all job offers for a specific organization, including their tags + * @param {*} organizationId + * @returns + */ +async function findByOrganizationId(organizationId) { + // This is equal to + // + // select "JobOffer".*, json_agg("Tag".tag) as tags + // from "JobOffer" + // left join "JobOfferTag" on "JobOffer".id = "JobOfferTag".job_offer_id + // left join "Tag" on "JobOfferTag".tag_id = "Tag".id + // where "JobOffer".organization_id = organizationId + // GROUP BY "JobOffer".id const result = await knex('JobOffer') - .where({organization_id: organizationId}) - .select(); + .select('JobOffer.*', knex.raw('json_agg("Tag".tag) as tags')) + .leftJoin('JobOfferTag', 'JobOffer.id', 'JobOfferTag.job_offer_id') + .leftJoin('Tag', 'JobOfferTag.tag_id', 'Tag.id') + .where('JobOffer.organization_id', organizationId) + .groupBy('JobOffer.id'); return result; }