From d42b34ac3ba7c64cca726467a064502d9b1cc7d5 Mon Sep 17 00:00:00 2001 From: Abe Haskins Date: Sat, 30 Sep 2017 13:04:37 -0700 Subject: [PATCH] Adds uppercase-firestore --- quickstarts/uppercase-firestore/README.md | 30 +++++++++ quickstarts/uppercase-firestore/firebase.json | 1 + .../uppercase-firestore/functions/index.js | 66 +++++++++++++++++++ .../functions/package.json | 18 +++++ 4 files changed, 115 insertions(+) create mode 100644 quickstarts/uppercase-firestore/README.md create mode 100644 quickstarts/uppercase-firestore/firebase.json create mode 100644 quickstarts/uppercase-firestore/functions/index.js create mode 100644 quickstarts/uppercase-firestore/functions/package.json diff --git a/quickstarts/uppercase-firestore/README.md b/quickstarts/uppercase-firestore/README.md new file mode 100644 index 0000000000..a5445d68f9 --- /dev/null +++ b/quickstarts/uppercase-firestore/README.md @@ -0,0 +1,30 @@ +# Firebase SDK for Cloud Functions Quickstart - Cloud Firestore + +This quickstart demonstrates using **Firebase SDK for Cloud Functions** setup with a **Cloud Firestore**. + + +## Introduction + +This sample app does two things: + - Create messages in Cloud firestore using a simple HTTPS request which is handled by an HTTPS Firebase Function. Writing to Cloud Firestore is done using the Firebase Admin SDK. + - When a message gets added in the Cloud Firestore, a Firebase Function triggers and automatically makes these messages all uppercase. + +## Deploy and test + +To deploy and test the sample: + + - Create a Firebase project on the [Firebase Console](https://console.firebase.google.com) + - Install the required dependencies by running `npm install` in the `functions` directory + - Deploy your project's code using `firebase deploy` + - Create a message by opening the following URL in your browser: https://us-central1-[MY_PROJECT].cloudfunctions.net/addMessage?text=uppercaseme (Replace [MY_PROJECT] by your project ID and you can change the message "uppercaseme"). + +You should see your text value displayed in the console and uppercase. + +## Contributing + +We'd love that you contribute to the project. Before doing so please read our [Contributor guide](../../CONTRIBUTING.md). + + +## License + +© Google, 2016. Licensed under an [Apache-2](../../LICENSE) license. diff --git a/quickstarts/uppercase-firestore/firebase.json b/quickstarts/uppercase-firestore/firebase.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/quickstarts/uppercase-firestore/firebase.json @@ -0,0 +1 @@ +{} diff --git a/quickstarts/uppercase-firestore/functions/index.js b/quickstarts/uppercase-firestore/functions/index.js new file mode 100644 index 0000000000..5dfab6921d --- /dev/null +++ b/quickstarts/uppercase-firestore/functions/index.js @@ -0,0 +1,66 @@ +/** + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +// [START all] +// [START import] +// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers. +const functions = require('firebase-functions'); + +// The Firebase Admin SDK to access the Firebase Realtime Database. +const admin = require('firebase-admin'); +admin.initializeApp(functions.config().firebase); +// [END import] + +// [START addMessage] +// Take the text parameter passed to this HTTP endpoint and insert it into the +// Realtime Database under the path /messages/:documentId/original +// [START addMessageTrigger] +exports.addMessage = functions.https.onRequest((req, res) => { +// [END addMessageTrigger] + // Grab the text parameter. + const original = req.query.text; + // [START adminSdkAdd] + // Push the new message into the Realtime Database using the Firebase Admin SDK. + admin.firestore().collection('messages').add({original: original}).then(writeResult => { + // Send back a message that we've succesfully written the message + res.json({result: `Message with ID: ${writeResult.id} added.`}); + }); + // [END adminSdkAdd] +}); +// [END addMessage] + +// [START makeUppercase] +// Listens for new messages added to /messages/:documentId/original and creates an +// uppercase version of the message to /messages/:documentId/uppercase +// [START makeUppercaseTrigger] +exports.makeUppercase = functions.firestore.document('/messages/{documentId}') + .onCreate(event => { +// [END makeUppercaseTrigger] + // [START makeUppercaseBody] + + // Grab the current value of what was written to the Realtime Database. + const original = event.data.data().original; + console.log('Uppercasing', event.params.documentId, original); + const uppercase = original.toUpperCase(); + // You must return a Promise when performing asynchronous tasks inside a Functions such as + // writing to the Firebase Realtime Database. + // Setting an "uppercase" sibling in the Realtime Database returns a Promise. + return event.data.ref.set({uppercase}, {merge: true}); + // [END makeUppercaseBody] + }); +// [END makeUppercase] +// [END all] diff --git a/quickstarts/uppercase-firestore/functions/package.json b/quickstarts/uppercase-firestore/functions/package.json new file mode 100644 index 0000000000..ad19ba7929 --- /dev/null +++ b/quickstarts/uppercase-firestore/functions/package.json @@ -0,0 +1,18 @@ +{ + "name": "uppercase-firestore-quickstart-functions", + "description": "Uppercaser Firebase Functions Quickstart sample for Cloud Firestore", + "dependencies": { + "@google-cloud/firestore": "^0.7.0", + "firebase-admin": "^5.0.0", + "firebase-functions": "^0.7.0" + }, + "devDependencies": { + "chai": "^3.5.0", + "chai-as-promised": "^6.0.0", + "mocha": "^3.2.0", + "sinon": "^1.17.7" + }, + "scripts": { + "test": "./node_modules/.bin/mocha --reporter spec" + } +}