Skip to content

Instantly share code, notes, and snippets.

@RebeccaBakels
Last active May 18, 2021 14:25
Show Gist options
  • Save RebeccaBakels/27a142bc9e6e940e405cd59c539cc097 to your computer and use it in GitHub Desktop.
Save RebeccaBakels/27a142bc9e6e940e405cd59c539cc097 to your computer and use it in GitHub Desktop.
From base directory:
mkdir 'name'
cd into 'name'
firebase init with functions and hosting
take the defaults
cd into functions folder
npm i -- save express cors body-parser
cd..
code .
if needed go upgrade plan in firebase
//////////////////////////////////////////////
in index.js within functions:
const functions = require("firebase-functions");
const express = require("express")
const bodyParser = require("body-parser")
const cors = require("cors")
const app = express()
app.use(bodyParser.json())
app.use(cors())
app.get('/name', getItem)
app.post('/name', postItem)
app.delete('/name/:itemId', deleteItem)
app.patch('/name/:itemId', patchItem)
export.app = functions.https.onRequest(app)
///////////////////////////////////////////
Create src folder within functions
Create index.js (or 'name'.js)
const admin = require("firebase-admin");
const serviceAccount = require('../credentials.json')
let db
function dbAuth(){
if (!admin.app.length){
admin.initializeApp({
credentials: admin.credential.cert(serviceAccount)
})
db = admin.firestore()
}
}
exports.getItem = (req, res) => {
if(!req.params.userId) {
res.status(400).send('Invalid request')
}
dbAuth()
db.collection('items').where('userId', '==', req.params.userId).get()
.then(collection => {
const itemList = collection.docs.map(doc => {
let item = doc.data()
item.id = doc.id
return item
})
res.status(200).send(itemList)
})
.catch(err => res.status(500).send('get items failed:', err))
}
exports.postItem = (req, res) => {
if(!req.body || !req.body || req.body.userId) {
res.status(400).send('Invalid Post')
}
dbAuth()
const newItem = {
name: req.body.name,
totalDuration: 0,
userid: req.body.userId,
logs: [],
created: now,
updated: now,
}
db.collection('items').add(newItem)
.then(() => {
this.getItem(req, res)
})
.catch(err => res.status(500).send('post failed', err))
}
exports.patchItem = (req, res) => {
if(!req.body || !req.body.duration || !req.params.itemId ){ //|| !req.params.userId
res,status(400).send('invalid request')
}
authDB()
let now = admin.firestore.FieldValue.serverTimestamp()
db.collection('items').doc(req.params.itemId).update({
updated: now,
logs: admin.firestore.FieldValue.arrayUnion(req.body),
totalDuration: admin.firestore.FieldValue.increment(Number(req.body.duration))
})
.then(() => {
this.getItems(req, res)
})
.catch(err => res.status(500).send('error updating item:' + err))
}
exports.deleteItem = (req, res) => {
if(!req.params.userId || !req.params.itemId){
res.status(400).send('Invalid Request')
}
dbAuth()
db.collection('items').doc(req.params.itemId).delete()
.then(() => this.getItems(req, res))
.catch(err => res.status(500).send('delete failed:', err))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment