From ff47add17eef65a972e70121222bfdee64b595a4 Mon Sep 17 00:00:00 2001 From: Jim O'Donnell Date: Fri, 19 Mar 2021 14:31:02 +0000 Subject: [PATCH] Split up helper files Split out the subject set data fetching into `helpers/fetchSubjectSets`. --- .../fetchSubjectSets/fetchSubjectSets.js | 65 +++++++++++++++++++ .../src/helpers/fetchSubjectSets/index.js | 1 + .../fetchWorkflowsHelper.js | 59 +---------------- 3 files changed, 68 insertions(+), 57 deletions(-) create mode 100644 packages/app-project/src/helpers/fetchSubjectSets/fetchSubjectSets.js create mode 100644 packages/app-project/src/helpers/fetchSubjectSets/index.js diff --git a/packages/app-project/src/helpers/fetchSubjectSets/fetchSubjectSets.js b/packages/app-project/src/helpers/fetchSubjectSets/fetchSubjectSets.js new file mode 100644 index 0000000000..2097ca6358 --- /dev/null +++ b/packages/app-project/src/helpers/fetchSubjectSets/fetchSubjectSets.js @@ -0,0 +1,65 @@ +import { panoptes } from '@zooniverse/panoptes-js' +import fetch from 'node-fetch' + +import { logToSentry } from '@helpers/logger' + +async function fetchSubjectSetData(subjectSetIDs, env) { + let subject_sets = [] + try { + const query = { + env, + id: subjectSetIDs.join(',') + } + const response = await panoptes.get('/subject_sets', query) + subject_sets = response.body.subject_sets + await Promise.allSettled(subject_sets.map(subjectSet => fetchPreviewImage(subjectSet, env))) + } catch (error) { + console.error(error) + logToSentry(error) + } + return subject_sets +} + +async function fetchWorkflowCellectStatus(workflow) { + let groups = {} + if (workflow.grouped) { + try { + const workflowURL = `https://cellect.zooniverse.org/workflows/${workflow.id}/status` + const response = await fetch(workflowURL) + const body = await response.json() + groups = body.groups ?? {} + } catch (error) { + console.error(error) + logToSentry(error) + } + } + return groups +} + +async function fetchPreviewImage (subjectSet, env) { + try { + const response = await panoptes + .get('/set_member_subjects', { + env, + subject_set_id: subjectSet.id, + include: 'subject', + page_size: 1 + }) + const { linked } = response.body + subjectSet.subjects = linked.subjects + } catch (error) { + console.error(error) + logToSentry(error) + } +} + +export default async function workflowSubjectSets(workflow, env) { + const subjectSetCounts = await fetchWorkflowCellectStatus(workflow) + const subjectSetIDs = Object.keys(subjectSetCounts) + const subjectSets = await fetchSubjectSetData(subjectSetIDs, env) + subjectSets.forEach(subjectSet => { + subjectSet.availableSubjects = subjectSetCounts[subjectSet.id] + }) + return subjectSets +} + diff --git a/packages/app-project/src/helpers/fetchSubjectSets/index.js b/packages/app-project/src/helpers/fetchSubjectSets/index.js new file mode 100644 index 0000000000..61b7ffdfd1 --- /dev/null +++ b/packages/app-project/src/helpers/fetchSubjectSets/index.js @@ -0,0 +1 @@ +export { default } from './fetchSubjectSets' diff --git a/packages/app-project/src/helpers/fetchWorkflowsHelper/fetchWorkflowsHelper.js b/packages/app-project/src/helpers/fetchWorkflowsHelper/fetchWorkflowsHelper.js index af23a351a2..283cc98781 100644 --- a/packages/app-project/src/helpers/fetchWorkflowsHelper/fetchWorkflowsHelper.js +++ b/packages/app-project/src/helpers/fetchWorkflowsHelper/fetchWorkflowsHelper.js @@ -2,6 +2,7 @@ import { panoptes } from '@zooniverse/panoptes-js' import fetch from 'node-fetch' import { logToSentry } from '@helpers/logger' +import fetchSubjectSets from '@helpers/fetchSubjectSets' async function fetchWorkflowData (activeWorkflows, env) { try { @@ -18,24 +19,6 @@ async function fetchWorkflowData (activeWorkflows, env) { throw error } } - -async function fetchSubjectSetData(subjectSetIDs, env) { - let subject_sets = [] - try { - const query = { - env, - id: subjectSetIDs.join(',') - } - const response = await panoptes.get('/subject_sets', query) - subject_sets = response.body.subject_sets - await Promise.allSettled(subject_sets.map(subjectSet => fetchPreviewImage(subjectSet, env))) - } catch (error) { - console.error(error) - logToSentry(error) - } - return subject_sets -} - async function fetchDisplayNames (language, activeWorkflows, env) { let displayNames = {} try { @@ -55,44 +38,6 @@ async function fetchDisplayNames (language, activeWorkflows, env) { return displayNames } -async function fetchWorkflowCellectStatus(workflow) { - let groups = {} - if (workflow.grouped) { - try { - const workflowURL = `https://cellect.zooniverse.org/workflows/${workflow.id}/status` - const response = await fetch(workflowURL) - const body = await response.json() - groups = body.groups ?? {} - } catch (error) { - console.error(error) - logToSentry(error) - } - } - return groups -} - -async function fetchPreviewImage (subjectSet, env) { - const response = await panoptes - .get('/set_member_subjects', { - env, - subject_set_id: subjectSet.id, - include: 'subject', - page_size: 1 - }) - const { linked } = response.body - subjectSet.subjects = linked.subjects -} - -async function workflowSubjectSets(workflow, env) { - const subjectSetCounts = await fetchWorkflowCellectStatus(workflow) - const subjectSetIDs = Object.keys(subjectSetCounts) - const subjectSets = await fetchSubjectSetData(subjectSetIDs, env) - subjectSets.forEach(subjectSet => { - subjectSet.availableSubjects = subjectSetCounts[subjectSet.id] - }) - return subjectSets -} - async function buildWorkflow(workflow, displayName, isDefault, env) { const workflowData = { completeness: workflow.completeness || 0, @@ -103,7 +48,7 @@ async function buildWorkflow(workflow, displayName, isDefault, env) { subjectSets: [] } if (workflow.grouped) { - workflowData.subjectSets = await workflowSubjectSets(workflow, env) + workflowData.subjectSets = await fetchSubjectSets(workflow, env) } return workflowData