summaryrefslogtreecommitdiff
path: root/app/client/api/crud.fetch.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/client/api/crud.fetch.js')
-rw-r--r--app/client/api/crud.fetch.js100
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)
+}