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 axios = require('axios');
const BASE_URL = "https://api.ebird.org/v2" module.exports = function (EBIRD_API_KEY) {
const API_KEY = process.env.EBIRD_API_KEY; const BASE_URL = "https://api.ebird.org/v2"
let key = EBIRD_API_KEY;
function query(endpoint, params) { function query(endpoint, params) {
let data = undefined; let data = undefined;
axios.get(`${BASE_URL}/${endpoint}`, { axios.get(`${BASE_URL}/${endpoint}`, {
headers: { headers: {
'X-eBirdApiToken': API_KEY 'X-eBirdApiToken': key
}, },
params: { params: {
...params ...params
} }
}).then((response) => { }).then((response) => {
console.log('GET response'); console.log('GET response');
data = response.data; data = response.data;
}).catch((error) => { }).catch((error) => {
console.error(error); console.error(error);
}); });
return data; return data;
}
function get(endpoint) {
return params => {
query(endpoint, params);
} }
}
const ebird = { function get(endpoint) {
data: { return params => {
obs: { query(endpoint, params);
recent: { }
in: (regionCode) => get(`data/obs/${regionCode}/recent`), }
const api = {
data: {
obs: {
recent: { 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) => { in: (regionCode) => {
return { 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: { product: {
in: get(`data/obs/geo/recent`), lists: {
species: (speciesCode) => get(`data/obs/geo/recent/${speciesCode}`), get: (regionCode) => get(`product/lists/${regionCode}`),
},
},
historic: {
in: (regionCode) => { in: (regionCode) => {
return { return {
on: (year, month, day) => get(`data/${regionCode}/historic/${year}/${month}/${day}`) on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
} }
}, },
}, },
}, top100: {
nearest: { in: (regionCode) => {
geo: { return {
recent: { on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`),
species: (speciesCode) => get(`data/nearest/geo/recent/${speciesCode}`), }
}, },
}, },
}, stats: {
}, in: (regionCode) => {
product: { return {
lists: { on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`)
get: (regionCode) => get(`product/lists/${regionCode}`), }
in: (regionCode) => {
return {
on: (year, month, day) => get(`product/lists/${regionCode}/${year}/${month}/${day}`)
} }
}, },
}, spplist: {
top100: { in: (regionCode) => get(`product/spplist/${regionCode}`),
in: (regionCode) => { },
return { checklist: {
on: (year, month, day) => get(`product/top100/${regionCode}/${year}/${month}/${day}`), view: (subId) => get(`product/checklist/view/${subId}`),
}
}, },
}, },
stats: { ref: {
in: (regionCode) => { geo: {
return { adjacent: {
on: (year, month, day) => get(`product/stats/${regionCode}/${year}/${month}/${day}`) of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`),
} },
} },
}, hotspot: {
spplist: { in: (regionCode) => get(`ref/hotspot/${regionCode}`),
in: (regionCode) => get(`product/spplist/${regionCode}`), geo: get(`ref/hostspot/geo`),
}, info: (locId) => get(`ref/hotspot/info/${locId}`),
checklist: { },
view: (subId) => get(`product/checklist/view/${subId}`), taxonomy: {
}, ebird: get(`ref/taxonomy/ebird`),
}, versions: get(`ref/taxonomy/versions`),
ref: { },
geo: { taxon: {
adjacent: { forms: (speciesCode) => get(`ref/taxon/${speciesCode}`),
of: (regionCode) => get(`ref/geo/adjacent/${regionCode}`), },
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; require('dotenv').config;
test('/data/obs/${regionCode}/recent for location France', () => { test('/data/obs/${regionCode}/recent for location France', () => {
let data = ebird.obs.recent.in('FR'); let data = ebird.data.obs.recent.in('FR')();
expect(data.length).toBeGreaterThan(1); console.log(data);
}); });