├── .gitignore ├── package.json ├── README.md └── index.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "functions", 3 | "description": "Cloud Functions for Firebase", 4 | "scripts": { 5 | "serve": "firebase serve --only functions", 6 | "shell": "firebase functions:shell", 7 | "start": "npm run shell", 8 | "deploy": "firebase deploy --only functions", 9 | "logs": "firebase functions:log" 10 | }, 11 | "dependencies": { 12 | "cors": "^2.8.4", 13 | "firebase-admin": "~5.12.0", 14 | "firebase-functions": "^1.0.1" 15 | }, 16 | "private": true 17 | } 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Shop-List-Server 2 | Serverless firebase Cloud function 3 | 4 | ### Get items 5 | [https://us-central1-shop-list-b60aa.cloudfunctions.net/getItems](https://us-central1-shop-list-b60aa.cloudfunctions.net/getItems) 6 | 7 | ### Post items 8 | [https://us-central1-shop-list-b60aa.cloudfunctions.net/addItem](https://us-central1-shop-list-b60aa.cloudfunctions.net/addItem) 9 | 10 | ### Delete items 11 | [https://us-central1-shop-list-b60aa.cloudfunctions.net/delete](https://us-central1-shop-list-b60aa.cloudfunctions.net/addItem) 12 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const functions = require("firebase-functions"); 2 | const cors = require('cors')({ origin: true }); 3 | const admin = require('firebase-admin'); 4 | 5 | admin.initializeApp(); 6 | 7 | const database = admin.database().ref('/items'); 8 | 9 | exports.helloWorld = functions.https.onRequest((request, response) => { 10 | response.send("Hello from a Severless Database!"); 11 | }); 12 | 13 | const getItemsFromDatabase = (res) => { 14 | let items = []; 15 | 16 | return database.on('value', (snapshot) => { 17 | snapshot.forEach((item) => { 18 | items.push({ 19 | id: item.key, 20 | item: item.val().item 21 | }); 22 | }); 23 | res.status(200).json(items); 24 | }, (error) => { 25 | res.status(500).json({ 26 | message: `Something went wrong. ${error}` 27 | }) 28 | }) 29 | }; 30 | 31 | exports.addItem = functions.https.onRequest((req, res) => { 32 | return cors(req, res, () => { 33 | if(req.method !== 'POST') { 34 | return res.status(500).json({ 35 | message: 'Not allowed' 36 | }) 37 | }; 38 | const item = req.body.item; 39 | database.push({ item }); 40 | getItemsFromDatabase(res) 41 | }); 42 | }); 43 | 44 | exports.getItems = functions.https.onRequest((req, res) => { 45 | return cors(req, res, () => { 46 | if(req.method !== 'GET') { 47 | return res.status(500).json({ 48 | message: 'Not allowed' 49 | }); 50 | }; 51 | getItemsFromDatabase(res) 52 | }); 53 | }); 54 | 55 | exports.deleteItem = functions.https.onRequest((req, res) => { 56 | return cors(req, res, () => { 57 | if(req.method !== 'DELETE') { 58 | return res.status(500).json({ 59 | message: 'Not allowed' 60 | }) 61 | } 62 | const id = req.query.id 63 | admin.database().ref(`/items/${id}`).remove() 64 | getItemsFromDatabase(res) 65 | }) 66 | }) 67 | --------------------------------------------------------------------------------