aboutsummaryrefslogtreecommitdiff
path: root/src/api.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/api.js')
-rw-r--r--src/api.js201
1 files changed, 201 insertions, 0 deletions
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,
+}