Last active
May 18, 2021 14:25
-
-
Save RebeccaBakels/27a142bc9e6e940e405cd59c539cc097 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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