added functions

This commit is contained in:
WaylonWalker 2019-11-10 09:48:15 -06:00
parent 262502bff8
commit 2bae6e9269
6 changed files with 191 additions and 0 deletions

View 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
View 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)
}
})
}

View 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
View 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
View 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
View 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