diff --git a/packages/backend/src/apps/usda-economic-research/actions/agricultural-economic-data/index.js b/packages/backend/src/apps/usda-economic-research/actions/agricultural-economic-data/index.js new file mode 100644 index 0000000000..7cf72d0834 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/actions/agricultural-economic-data/index.js @@ -0,0 +1,88 @@ +import { URLSearchParams } from 'url'; +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Agricultural Economic Data', + key: 'agricultural-economic-data', + description: '', + arguments: [ + { + label: 'Category', + key: 'category', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listCategories', + }, + ], + }, + }, + { + label: 'Year', + key: 'year', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listYears', + }, + ], + }, + }, + { + label: 'State', + key: 'state', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listStates', + }, + ], + }, + }, + { + label: 'Report', + key: 'report', + type: 'dropdown', + required: true, + description: '', + variables: true, + source: { + type: 'query', + name: 'getDynamicData', + arguments: [ + { + name: 'key', + value: 'listReports', + }, + ], + }, + }, + ], + + async run($) { + const searchParams = new URLSearchParams($.step.parameters); + const response = await $.http.get(`/surveydata?${searchParams.toString()}`); + $.setActionItem({ raw: response.data }); + }, +}); diff --git a/packages/backend/src/apps/usda-economic-research/actions/index.js b/packages/backend/src/apps/usda-economic-research/actions/index.js new file mode 100644 index 0000000000..f2862c52ae --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/actions/index.js @@ -0,0 +1,3 @@ +import agriculturalEconomicData from './agricultural-economic-data/index.js'; + +export default [agriculturalEconomicData]; diff --git a/packages/backend/src/apps/usda-economic-research/assets/favicon.svg b/packages/backend/src/apps/usda-economic-research/assets/favicon.svg new file mode 100644 index 0000000000..21adce15c3 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/assets/favicon.svg @@ -0,0 +1,9 @@ + + +usda-symbol + + + + + + diff --git a/packages/backend/src/apps/usda-economic-research/auth/index.js b/packages/backend/src/apps/usda-economic-research/auth/index.js new file mode 100644 index 0000000000..1d7a37d813 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/auth/index.js @@ -0,0 +1,33 @@ +import verifyCredentials from './verify-credentials.js'; +import isStillVerified from './is-still-verified.js'; + +export default { + fields: [ + { + key: 'screenName', + label: 'Screen Name', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: + 'Screen name of your connection to be used on Automatisch UI.', + clickToCopy: false, + }, + { + key: 'apiKey', + label: 'API Key', + type: 'string', + required: true, + readOnly: false, + value: null, + placeholder: null, + description: 'API key of your account.', + clickToCopy: false, + }, + ], + + verifyCredentials, + isStillVerified, +}; diff --git a/packages/backend/src/apps/usda-economic-research/auth/is-still-verified.js b/packages/backend/src/apps/usda-economic-research/auth/is-still-verified.js new file mode 100644 index 0000000000..6663679aab --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/auth/is-still-verified.js @@ -0,0 +1,8 @@ +import verifyCredentials from './verify-credentials.js'; + +const isStillVerified = async ($) => { + await verifyCredentials($); + return true; +}; + +export default isStillVerified; diff --git a/packages/backend/src/apps/usda-economic-research/auth/verify-credentials.js b/packages/backend/src/apps/usda-economic-research/auth/verify-credentials.js new file mode 100644 index 0000000000..809b3c8906 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/auth/verify-credentials.js @@ -0,0 +1,10 @@ +const verifyCredentials = async ($) => { + await $.http.get('/state'); + + await $.auth.set({ + screenName: $.auth.data.screenName, + apiKey: $.auth.data.apiKey, + }); +}; + +export default verifyCredentials; diff --git a/packages/backend/src/apps/usda-economic-research/common/add-auth-header.js b/packages/backend/src/apps/usda-economic-research/common/add-auth-header.js new file mode 100644 index 0000000000..5f2309e229 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/common/add-auth-header.js @@ -0,0 +1,12 @@ +const addAuthHeader = ($, requestConfig) => { + if ($.auth.data?.apiKey) { + requestConfig.params = { + ...requestConfig.params, + api_key: $.auth.data.apiKey, + }; + } + + return requestConfig; +}; + +export default addAuthHeader; diff --git a/packages/backend/src/apps/usda-economic-research/dynamic-data/index.js b/packages/backend/src/apps/usda-economic-research/dynamic-data/index.js new file mode 100644 index 0000000000..0186f330ae --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/dynamic-data/index.js @@ -0,0 +1,6 @@ +import listCategories from './list-categories/index.js'; +import listYears from './list-years/index.js'; +import listStates from './list-states/index.js'; +import listReports from './list-reports/index.js'; + +export default [listCategories, listYears, listStates, listReports]; diff --git a/packages/backend/src/apps/usda-economic-research/dynamic-data/list-categories/index.js b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-categories/index.js new file mode 100644 index 0000000000..a52e49d342 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-categories/index.js @@ -0,0 +1,20 @@ +export default { + name: 'List Categories', + key: 'listCategories', + + async run($) { + const categories = { + data: [], + }; + const { data } = await $.http.get('/category'); + if (data) { + for (const category of data.data) { + categories.data.push({ + value: category.header, + name: category.header, + }); + } + } + return categories; + }, +}; diff --git a/packages/backend/src/apps/usda-economic-research/dynamic-data/list-reports/index.js b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-reports/index.js new file mode 100644 index 0000000000..359c7e6424 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-reports/index.js @@ -0,0 +1,20 @@ +export default { + name: 'List reports', + key: 'listReports', + + async run($) { + const reports = { + data: [], + }; + const { data } = await $.http.get('/report'); + if (data) { + for (const report of data.data) { + reports.data.push({ + value: report.header, + name: report.header, + }); + } + } + return reports; + }, +}; diff --git a/packages/backend/src/apps/usda-economic-research/dynamic-data/list-states/index.js b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-states/index.js new file mode 100644 index 0000000000..b96b50000b --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-states/index.js @@ -0,0 +1,20 @@ +export default { + name: 'List States', + key: 'listStates', + + async run($) { + const states = { + data: [], + }; + const { data } = await $.http.get('/state'); + if (data) { + for (const state of data.data) { + states.data.push({ + value: state.code, + name: state.name, + }); + } + } + return states; + }, +}; diff --git a/packages/backend/src/apps/usda-economic-research/dynamic-data/list-years/index.js b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-years/index.js new file mode 100644 index 0000000000..5ef32391a9 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/dynamic-data/list-years/index.js @@ -0,0 +1,20 @@ +export default { + name: 'List years', + key: 'listYears', + + async run($) { + const years = { + data: [], + }; + const { data } = await $.http.get('/year'); + if (data) { + for (const year of data.data) { + years.data.push({ + value: year.toString(), + name: year.toString(), + }); + } + } + return years; + }, +}; diff --git a/packages/backend/src/apps/usda-economic-research/index.js b/packages/backend/src/apps/usda-economic-research/index.js new file mode 100644 index 0000000000..cc29a40206 --- /dev/null +++ b/packages/backend/src/apps/usda-economic-research/index.js @@ -0,0 +1,20 @@ +import defineApp from '../../helpers/define-app.js'; +import addAuthHeader from './common/add-auth-header.js'; +import auth from './auth/index.js'; +import actions from './actions/index.js'; +import dynamicData from './dynamic-data/index.js'; + +export default defineApp({ + name: 'USDA Economic Research', + key: 'usda-economic-research', + iconUrl: '{BASE_URL}/apps/usda-economic-research/assets/favicon.svg', + authDocUrl: '', + supportsConnections: true, + baseUrl: 'https://api.ers.usda.gov/data/arms', + apiBaseUrl: 'https://api.ers.usda.gov/data/arms', + primaryColor: '#6f42c1', + beforeRequest: [addAuthHeader], + auth, + actions, + dynamicData, +});