added functions
This commit is contained in:
parent
262502bff8
commit
2bae6e9269
6 changed files with 191 additions and 0 deletions
33
functions/todos-delete-batch.js
Normal file
33
functions/todos-delete-batch.js
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* code from functions/todos-delete-batch.js */
|
||||||
|
/* Import faunaDB sdk */
|
||||||
|
const faunadb = require('faunadb')
|
||||||
|
|
||||||
|
const q = faunadb.query
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET
|
||||||
|
})
|
||||||
|
|
||||||
|
exports.handler = async (event, context) => {
|
||||||
|
const data = JSON.parse(event.body)
|
||||||
|
console.log('data', data)
|
||||||
|
console.log('Function `todo-delete-batch` invoked', data.ids)
|
||||||
|
// construct batch query from IDs
|
||||||
|
const deleteAllCompletedTodoQuery = data.ids.map((id) => {
|
||||||
|
return q.Delete(q.Ref(`classes/todos/${id}`))
|
||||||
|
})
|
||||||
|
// Hit fauna with the query to delete the completed items
|
||||||
|
return client.query(deleteAllCompletedTodoQuery)
|
||||||
|
.then((response) => {
|
||||||
|
console.log('success', response)
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify(response)
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
28
functions/todos-delete.js
Normal file
28
functions/todos-delete.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* code from functions/todos-update.js */
|
||||||
|
const faunadb = require('faunadb')
|
||||||
|
const getId = require('./utils/getId')
|
||||||
|
|
||||||
|
const q = faunadb.query
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET
|
||||||
|
})
|
||||||
|
|
||||||
|
exports.handler = (event, context) => {
|
||||||
|
const data = JSON.parse(event.body)
|
||||||
|
const id = getId(event.path)
|
||||||
|
console.log(`Function 'todo-update' invoked. update id: ${id}`)
|
||||||
|
return client.query(q.Update(q.Ref(`classes/todos/${id}`), { data }))
|
||||||
|
.then((response) => {
|
||||||
|
console.log('success', response)
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify(response)
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
35
functions/todos-read-all.js
Normal file
35
functions/todos-read-all.js
Normal file
|
|
@ -0,0 +1,35 @@
|
||||||
|
/* code from functions/todos-read-all.js */
|
||||||
|
/* Import faunaDB sdk */
|
||||||
|
const faunadb = require('faunadb')
|
||||||
|
|
||||||
|
const q = faunadb.query
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET
|
||||||
|
})
|
||||||
|
|
||||||
|
exports.handler = (event, context) => {
|
||||||
|
console.log('Function `todo-read-all` invoked')
|
||||||
|
return client.query(q.Paginate(q.Match(q.Ref('indexes/all_todos'))))
|
||||||
|
.then((response) => {
|
||||||
|
const todoRefs = response.data
|
||||||
|
console.log('Todo refs', todoRefs)
|
||||||
|
console.log(`${todoRefs.length} todos found`)
|
||||||
|
// create new query out of todo refs. http://bit.ly/2LG3MLg
|
||||||
|
const getAllTodoDataQuery = todoRefs.map((ref) => {
|
||||||
|
return q.Get(ref)
|
||||||
|
})
|
||||||
|
// then query the refs
|
||||||
|
return client.query(getAllTodoDataQuery).then((ret) => {
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify(ret)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
28
functions/todos-read.js
Normal file
28
functions/todos-read.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* code from functions/todos-read.js */
|
||||||
|
/* Import faunaDB sdk */
|
||||||
|
const faunadb = require('faunadb')
|
||||||
|
const getId = require('./utils/getId')
|
||||||
|
|
||||||
|
const q = faunadb.query
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET
|
||||||
|
})
|
||||||
|
|
||||||
|
exports.handler = (event, context) => {
|
||||||
|
const id = getId(event.path)
|
||||||
|
console.log(`Function 'todo-read' invoked. Read id: ${id}`)
|
||||||
|
return client.query(q.Get(q.Ref(`classes/todos/${id}`)))
|
||||||
|
.then((response) => {
|
||||||
|
console.log('success', response)
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify(response)
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
28
functions/todos-update.js
Normal file
28
functions/todos-update.js
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
/* code from functions/todos-update.js */
|
||||||
|
const faunadb = require('faunadb')
|
||||||
|
const getId = require('./utils/getId')
|
||||||
|
|
||||||
|
const q = faunadb.query
|
||||||
|
const client = new faunadb.Client({
|
||||||
|
secret: process.env.FAUNADB_SERVER_SECRET
|
||||||
|
})
|
||||||
|
|
||||||
|
exports.handler = (event, context) => {
|
||||||
|
const data = JSON.parse(event.body)
|
||||||
|
const id = getId(event.path)
|
||||||
|
console.log(`Function 'todo-update' invoked. update id: ${id}`)
|
||||||
|
return client.query(q.Update(q.Ref(`classes/todos/${id}`), { data }))
|
||||||
|
.then((response) => {
|
||||||
|
console.log('success', response)
|
||||||
|
return {
|
||||||
|
statusCode: 200,
|
||||||
|
body: JSON.stringify(response)
|
||||||
|
}
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('error', error)
|
||||||
|
return {
|
||||||
|
statusCode: 400,
|
||||||
|
body: JSON.stringify(error)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
39
src/pages/todo.js
Normal file
39
src/pages/todo.js
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
import React from "react"
|
||||||
|
import { Link } from "gatsby"
|
||||||
|
|
||||||
|
import Layout from "../components/layout"
|
||||||
|
import Image from "../components/image"
|
||||||
|
import SEO from "../components/seo"
|
||||||
|
|
||||||
|
function createTodo(data) {
|
||||||
|
return fetch('/.netlify/functions/todos-create', {
|
||||||
|
body: JSON.stringify(data),
|
||||||
|
method: 'POST'
|
||||||
|
}).then(response => {
|
||||||
|
return response.json()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Todo data
|
||||||
|
const myTodo = {
|
||||||
|
title: 'My todo title',
|
||||||
|
completed: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
// create it!
|
||||||
|
createTodo(myTodo).then((response) => {
|
||||||
|
console.log('API response', response)
|
||||||
|
// set app state
|
||||||
|
}).catch((error) => {
|
||||||
|
console.log('API error', error)
|
||||||
|
})
|
||||||
|
|
||||||
|
const IndexPage = () => (
|
||||||
|
<Layout>
|
||||||
|
<SEO title="Home" />
|
||||||
|
<button onClick={createTodo} >create</button>
|
||||||
|
<Link to="/page-2/">Go to page 2</Link>
|
||||||
|
</Layout>
|
||||||
|
)
|
||||||
|
|
||||||
|
export default IndexPage
|
||||||
Loading…
Add table
Add a link
Reference in a new issue