From 0e742a485f3fa7d35d26b05980a293b5760e8418 Mon Sep 17 00:00:00 2001 From: Mark Powers Date: Sun, 14 Jul 2024 16:17:59 -0500 Subject: Initial commit --- src/api.js | 201 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 src/api.js (limited to 'src/api.js') diff --git a/src/api.js b/src/api.js new file mode 100644 index 0000000..ecd999d --- /dev/null +++ b/src/api.js @@ -0,0 +1,201 @@ +import { Notify } from 'quasar' + +var config = { + //"api_root": "http://localhost:3000", + "api_root": "https://postgrest.marks.kitchen", + "username": "mark", + "password": "bon@ppetit", +} + +function get_headers(){ + let headers = new Headers(); + headers.set('Authorization', 'Basic ' + btoa(config.username + ":" + config.password)); + headers.set('Content-Type', 'application/json'); + return headers +} + +async function get_forms(){ + let res = await fetch(`${config.api_root}/form?order=id.asc`, + { headers: get_headers(), } + ) + return await res.json() +} + +async function get_books(completed=false){ + if(completed){ + let res = await fetch(`${config.api_root}/book?order=completed.desc`, + { headers: get_headers(), } + ) + return await res.json() + } else { + let res = await fetch(`${config.api_root}/book?completed=eq.false`, + { headers: get_headers(), } + ) + return await res.json() + } +} + +async function insert(datatype, key, value){ + let data = { + "datatype": datatype, + "key": key, + "value": value, + "created": new Date().toISOString(), + } + const response = await fetch(`${config.api_root}/datapoint`, { + method: "POST", + headers: get_headers(), + body: JSON.stringify(data), + }) + if(!response.ok){ + Notify.create({ + "type": "negative", + "message": `Issue submitting ${datatype}` + }) + } +} + +async function submit_data(forms, form_data){ + console.log(Notify) + forms.forEach(form => { + if(form_data[form.prompt_id]?.length || form.type === "range"){ + if(form.type === "multiple_select"){ + // One row per item selected + form_data[form.prompt_id].forEach(o => { + insert(form.prompt_id, o, true) + }) + } else { + // No key for numeric or text inputs + insert(form.prompt_id, undefined, form_data[form.prompt_id]) + } + } + }) + Notify.create({ + "type": "positive", + "message": `Submitted sucessfully.` + }) +} + +async function edit_book(book_data){ + let data = { + "title": book_data.title, + "in_library": book_data.in_library, + "lcc": book_data.lcc + } + const response = await fetch(`${config.api_root}/book?id=eq.${book_data.id}`, { + method: "PATCH", + headers: get_headers(), + body: JSON.stringify(data), + }) + Notify.create({ + "type": "positive", + "message": `Submitted sucessfully.` + }) +} + +async function submit_book_data(book_form_data){ + Object.keys(book_form_data).forEach( key => { + let obj = book_form_data[key] + if(obj.completed){ + complete_book(key) + } + if(obj.progress.length > 0){ + create_book_datapoint(key, obj.progress) + } + }) + Notify.create({ + "type": "positive", + "message": `Submitted books sucessfully.` + }) +} + +async function create_option(form, value){ + let data = { + "extra": form.extra.map( (o) => {return { + "id": o.id, "display": o.display, + }}) + } + data["extra"].push({ + "id": value, "display": value, + }) + const response = await fetch( + `${config.api_root}/form?id=eq.${form.id}`, { + method: "PATCH", + headers: get_headers(), + body: JSON.stringify(data), + }) +} + +async function create_book_datapoint(book_id, pages){ + const response = await fetch( + `${config.api_root}/book_datapoint`, { + method: "POST", + headers: get_headers(), + body: JSON.stringify({ + "created": new Date().toISOString(), + "book_id": book_id, + "pages": pages, + }), + }) +} + +async function complete_book(book_id){ + const response = await fetch( + `${config.api_root}/book?id=eq.${book_id}`, { + method: "PATCH", + headers: get_headers(), + body: JSON.stringify({ + "completed": true, + }), + }) +} + +async function create_book(name){ + const response = await fetch( + `${config.api_root}/book`, { + method: "POST", + headers: get_headers(), + body: JSON.stringify({ + "title": name, + "completed": false + }), + }) + Notify.create({ + "type": "positive", + "message": `Created book.` + }) +} + +async function get_book_datapoint(){ + let res = await fetch(`${config.api_root}/book_datapoint`, + { headers: get_headers(), } + ) + return await res.json() +} + +async function create_form(data){ + const response = await fetch( + `${config.api_root}/form`, { + method: "POST", + headers: get_headers(), + body: JSON.stringify(data), + }) + Notify.create({ + "type": "positive", + "message": `Created form.` + }) +} + +export { + get_forms, + submit_data, + submit_book_data, + create_option, + get_books, + get_book_datapoint, + complete_book, + create_book_datapoint, + create_book, + create_form, + edit_book, +} -- cgit v1.2.3