diff options
Diffstat (limited to 'app/client/api/crud.fetch.js')
| -rw-r--r-- | app/client/api/crud.fetch.js | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/app/client/api/crud.fetch.js b/app/client/api/crud.fetch.js new file mode 100644 index 0000000..fadd2b6 --- /dev/null +++ b/app/client/api/crud.fetch.js @@ -0,0 +1,100 @@ +import fetch from 'node-fetch' + +export function crud_fetch(type, tag) { + const uri = '/' + type + 's/' + (tag || '') + return { + index: q => { + return fetch(_get_url(uri, q), _get_headers()) + .then(req => req.json()) + .catch(error) + }, + + show: id => { + return fetch(uri + id) + .then(req => req.json()) + .catch(error) + }, + + create: data => { + return fetch(uri, post(data)) + .then(req => req.json()) + .catch(error) + }, + + update: data => { + return fetch(uri + data.id, put(data)) + .then(req => req.json()) + .catch(error) + }, + + destroy: data => { + return fetch(uri + data.id, destroy(data)) + .then(req => req.json()) + .catch(error) + }, + + upload: data => { + return fetch(uri, postBody(data)) + .then(req => req.json()) + .catch(error) + }, + } +} + +function _get_url(_url, data) { + const url = new URL(window.location.origin + _url) + if (data) { + Object.keys(data).forEach(key => url.searchParams.append(key, data[key])) + } + return url +} +function _get_headers() { + return { + method: 'GET', + headers: { + 'Accept': 'application/json', + }, + } +} +function post(data) { + return { + method: 'POST', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + } +} +export function postBody(data) { + return { + method: 'POST', + body: data, + headers: { + 'Accept': 'application/json', + }, + } +} +function put(data) { + return { + method: 'PUT', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + } +} +function destroy(data) { + return { + method: 'DELETE', + body: JSON.stringify(data), + headers: { + 'Accept': 'application/json', + 'Content-Type': 'application/json' + }, + } +} +function error(err) { + console.warn(err) +} |
