summaryrefslogtreecommitdiff
path: root/app/api/crud.js
diff options
context:
space:
mode:
Diffstat (limited to 'app/api/crud.js')
-rw-r--r--app/api/crud.js98
1 files changed, 98 insertions, 0 deletions
diff --git a/app/api/crud.js b/app/api/crud.js
new file mode 100644
index 0000000..1d7b305
--- /dev/null
+++ b/app/api/crud.js
@@ -0,0 +1,98 @@
+import fetch from 'node-fetch'
+
+export function crud(type_s, tag) {
+ const type = '/' + type_s + 's/' + (tag || '')
+ return {
+ index: (data) => {
+ return fetch(_get_url(type, data), _get_headers())
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ show: (id) => {
+ return fetch(type + id)
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ create: (data) => {
+ return fetch(type, post(data))
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ update: (data) => {
+ return fetch(type + data.id, put(data))
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ destroy: (data) => {
+ return fetch(type + data.id, destroy(data))
+ .then(req => req.json())
+ .catch(error)
+ },
+
+ under: function(tag){
+ return crud(type_s, tag)
+ },
+ }
+}
+
+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)
+}