src: Trying to implement module factory

This commit is contained in:
Samuel Ortion 2022-08-26 10:48:56 +02:00
parent 44b71c5296
commit da431878dd
2 changed files with 103 additions and 103 deletions

View File

@ -1,127 +1,127 @@
const axios = require('axios');
const BASE_URL = "https://api.ebird.org/v2"
const API_KEY = process.env.EBIRD_API_KEY;
module.exports = function (EBIRD_API_KEY) {
const BASE_URL = "https://api.ebird.org/v2"
let key = EBIRD_API_KEY;
function query(endpoint, params) {
let data = undefined;
axios.get(`${BASE_URL}/${endpoint}`, {
headers: {
'X-eBirdApiToken': API_KEY
},
params: {
...params
}
}).then((response) => {
console.log('GET response');
data = response.data;
}).catch((error) => {
console.error(error);
});
return data;
}
function get(endpoint) {
return params => {
query(endpoint, params);
function query(endpoint, params) {
let data = undefined;
axios.get(`${BASE_URL}/${endpoint}`, {
headers: {
'X-eBirdApiToken': key
},
params: {
...params
}
}).then((response) => {
console.log('GET response');
data = response.data;
}).catch((error) => {
console.error(error);
});
return data;
}
}
const ebird = {
data: {
obs: {
recent: {
in: (regionCode) => get(`data/obs/${regionCode}/recent`),
function get(endpoint) {
return params => {
query(endpoint, params);
}
}
const api = {
data: {
obs: {
recent: {
in: (regionCode) => get(`data/obs/${regionCode}/recent`),
recent: {
in: (regionCode) => {
return {
for: (speciesCode) => get(`data/obs/${regionCode}/recent/${speciesCode}`)
}
},
notable: {
in: (regionCode) => get(`data/obs/${regionCode}/recent/notable`),
},
},
},
geo: {
recent: {
in: get(`data/obs/geo/recent`),
species: (speciesCode) => get(`data/obs/geo/recent/${speciesCode}`),
},
},
historic: {
in: (regionCode) => {
return {
for: (speciesCode) => get(`data/obs/${regionCode}/recent/${speciesCode}`)
on: (year, month, day) => get(`data/${regionCode}/historic/${year}/${month}/${day}`)
}
},
notable: {
in: (regionCode) => get(`data/obs/${regionCode}/recent/notable`),
},
},
nearest: {
geo: {
recent: {
species: (speciesCode) => get(`data/nearest/geo/recent/${speciesCode}`),
},
},
},
geo: {
recent: {
in: get(`data/obs/geo/recent`),
species: (speciesCode) => get(`data/obs/geo/recent/${speciesCode}`),
},
},
historic: {
},
product: {
lists: {
get: (regionCode) => get(`product/lists/${regionCode}`),
in: (regionCode) => {
return {
on: (year, month, day) => get(`data/${regionCode}/historic/${year}/${month}/${day}`)
on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
}
},
},
},
nearest: {
geo: {
recent: {
species: (speciesCode) => get(`data/nearest/geo/recent/${speciesCode}`),
top100: {
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`),
}
},
},
},
},
product: {
lists: {
get: (regionCode) => get(`product/lists/${regionCode}`),
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
stats: {
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`)
}
}
},
},
top100: {
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`),
}
spplist: {
in: (regionCode) => get(`product/spplist/${regionCode}`),
},
checklist: {
view: (subId) => get(`product/checklist/view/${subId}`),
},
},
stats: {
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`)
}
}
},
spplist: {
in: (regionCode) => get(`product/spplist/${regionCode}`),
},
checklist: {
view: (subId) => get(`product/checklist/view/${subId}`),
},
},
ref: {
geo: {
adjacent: {
of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`),
ref: {
geo: {
adjacent: {
of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`),
},
},
hotspot: {
in: (regionCode) => get(`ref/hotspot/${regionCode}`),
geo: get(`ref/hostspot/geo`),
info: (locId) => get(`ref/hotspot/info/${locId}`),
},
taxonomy: {
ebird: get(`ref/taxonomy/ebird`),
versions: get(`ref/taxonomy/versions`),
},
taxon: {
forms: (speciesCode) => get(`ref/taxon/${speciesCode}`),
},
taxa_locales: {
ebird: get(`ref/taxa-locales/ebird`),
},
sppgroup: (speciesGrouping) => get(`ref/sppgroup/${speciesGrouping}`),
region: {
info: (regionCode) => get(`ref/region/${regionCode}`),
list: (regionType, parentRegionCode) => get(`ref/region/list/${regionType}/${parentRegionCode}`),
},
},
hotspot: {
in: (regionCode) => get(`ref/hotspot/${regionCode}`),
geo: get(`ref/hostspot/geo`),
info: (locId) => get(`ref/hotspot/info/${locId}`),
},
taxonomy: {
ebird: get(`ref/taxonomy/ebird`),
versions: get(`ref/taxonomy/versions`),
},
taxon: {
forms: (speciesCode) => get(`ref/taxon/${speciesCode}`),
},
taxa_locales: {
ebird: get(`ref/taxa-locales/ebird`),
},
sppgroup: (speciesGrouping) => get(`ref/sppgroup/${speciesGrouping}`),
region: {
info: (regionCode) => get(`ref/region/${regionCode}`),
list: (regionType, parentRegionCode) => get(`ref/region/list/${regionTypie}/${parentRegionCode}`),
},
},
}
module.exports = ebird;
}
};

View File

@ -2,8 +2,8 @@ const ebird = require('../src/index');
require('dotenv').config;
test('/data/obs/${regionCode}/recent for location France', () => {
let data = ebird.obs.recent.in('FR');
expect(data.length).toBeGreaterThan(1);
let data = ebird.data.obs.recent.in('FR')();
console.log(data);
});