Photo by Rita Vicari on Unsplash

Community-driven data modifications using Cloud Functions

Kyle Welsby
Dec 18, 2019 · 4 min read

Prelude

Suggestions Collection

{ "path": "string", "key": "string", "value": "string", "createdAt": "datetime", "approvedAt": "datetime", "committedAt": "datetime" }

Suggestions Moderation

Handling Suggestions

exports.onSuggestionApproved = functions.firestore.document('suggestions/{documentId}')
.onUpdate((snap, context) => {
// ... do something when the document is updated
})
})

setting the value of the suggestion

let ref = db.doc(data.path)
ref.set({
[data.key]: data.value,
}, { merge: true })

Finishing the function

let promises = []
promises.push(
ref.set(/* ... */)
)
return Promise.all(promises)

Putting it all together

exports.onSuggestionApproved = functions.firestore.document('suggestions/{documentId}')
.onUpdate((snap, context) => {
const before = snap.before.data()
const data = snap.after.data()
let promises = []
/**
* @todo add approvedBy to ensure the changing document can be modified by a member of the account
*/
if (!before.approvedAt && data.approvedAt) {
let ref = db.doc(data.path)
promises.push(
ref.set({
[data.key]: data.value,
}, { merge: true })
)
promises.push(
snap.after.ref.set({
committedAt: new Date()
}, { merge: true })
)
}
return Promise.all(promises)
})

Notable Concerns

Conclusion

The Startup

Get smarter at building your thing. Join The Startup’s +787K followers.

Sign up for Top 10 Stories

By The Startup

Get smarter at building your thing. Subscribe to receive The Startup's top 10 most read stories — delivered straight into your inbox, once a week. Take a look.

By signing up, you will create a Medium account if you don’t already have one. Review our Privacy Policy for more information about our privacy practices.

Check your inbox
Medium sent you an email at to complete your subscription.

Kyle Welsby

Written by

Code Wrangler, Travel & Food Photographer, and Maker of http://soulectiontracklists.com . From Great Britain 🇬🇧

The Startup

Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers & +787K followers.

Kyle Welsby

Written by

Code Wrangler, Travel & Food Photographer, and Maker of http://soulectiontracklists.com . From Great Britain 🇬🇧

The Startup

Get smarter at building your thing. Follow to join The Startup’s +8 million monthly readers & +787K followers.

Medium is an open platform where 170 million readers come to find insightful and dynamic thinking. Here, expert and undiscovered voices alike dive into the heart of any topic and bring new ideas to the surface. Learn more

Follow the writers, publications, and topics that matter to you, and you’ll see them on your homepage and in your inbox. Explore

If you have a story to tell, knowledge to share, or a perspective to offer — welcome home. It’s easy and free to post your thinking on any topic. Write on Medium

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store