Skip to content

Commit

Permalink
Adds uppercase-firestore
Browse files Browse the repository at this point in the history
  • Loading branch information
abeisgoat committed Sep 30, 2017
1 parent 41db7bc commit d42b34a
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
30 changes: 30 additions & 0 deletions quickstarts/uppercase-firestore/README.md
Original file line number Diff line number Diff line change
@@ -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.
1 change: 1 addition & 0 deletions quickstarts/uppercase-firestore/firebase.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
66 changes: 66 additions & 0 deletions quickstarts/uppercase-firestore/functions/index.js
Original file line number Diff line number Diff line change
@@ -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]
18 changes: 18 additions & 0 deletions quickstarts/uppercase-firestore/functions/package.json
Original file line number Diff line number Diff line change
@@ -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"
}
}

0 comments on commit d42b34a

Please sign in to comment.