Skip to content

Instantly share code, notes, and snippets.

View gregfenton's full-sized avatar

Greg Fenton gregfenton

View GitHub Profile
@gregfenton
gregfenton / FirestoreBackup.js
Last active December 7, 2022 22:57
Backup your Firestore db to a Firebase Storage bucket -- to be called from a Firebase Cloud Function (JavaScript/node)
const functions = require('firebase-functions');
const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();
//
// Add config values with CLI command:
// firebase functions:config:set my_app_name='{"fsBackupBucket":"gs://my-fs-backup-bucket"}'
//
const config = functions.config();
@gregfenton
gregfenton / fetch-user-records-from-google-sheets.js
Last active December 7, 2022 23:00
Downloads data from a Google Sheets worksheet and stores in a local JSON file -- command-line JavaScript/node
/**
* A script that:
* 1. loads Google Sheets API keys and spreadsheet IDs (see GOOGLE_API_KEY)
* 2. connects to the identifed Google Sheet
* 3. grabs the data from a named Worksheet (see SHEET_TO_GET)
* 4. iterates over each row (see processUserRows())
* 5. puts them into a JSON structure
* 6. and writes that out to a file (see FILE_NAME)
*
* To run this script, I have this in my package.json:
@gregfenton
gregfenton / get_firestore_collection_as_json.js
Last active May 16, 2023 17:38
Downloads all docs in a Firestore collection and stores as a JSON file -- command-line JavaScript/node
/**
* get_firestore_collection_as_json.js
*
* This code is a "node script" used to fetch all documents from a Firestore collection,
* either in "the cloud" or the emulator, and write them to a file as JSON.
*
* The script is a "client app", so it logs in with Firebase Auth using email/password from the variable USER1.
* This USER1 user (the.admin.guy@test.com) must exist in your Firebase project and have read access
* to the collection(s) you are populating. You can create that account via
* Firebase Console >> Authentication.
@gregfenton
gregfenton / create_firebase_project.bash
Last active June 16, 2023 23:04
Shell script for creating a Firebase project
#!/bin/bash
red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 6)
yellow=$(tput setaf 3)
reset=$(tput sgr0)
ROOT=$(pwd)
echo ""
@gregfenton
gregfenton / cleanup_firestore.js
Last active September 10, 2023 02:18
Deletes all records from a Firestore collection that match some criteria -- command-line JavaScript/node
/**
* cleanup_firestore.js
*
* This code is a "node script" used to delete all documents from a Firestore
* collection that are older than a given date. This script can run against
* "the cloud" or the emulator.
*
* The jump point for the script is this line in main():
*
* await deleteDocs('orders', 'closedDate', '<', new Date('2021/08/31'))
@gregfenton
gregfenton / load_json_to_firstore.js
Last active December 4, 2023 16:24
Loads JSON data into a Firestore database (cloud or local emulator) -- command-line JavaScript/node
/**
* load_json_to_firstore.js
*
* This code is a "node script" used to load data into your Firestore database, either in "the cloud" or the emulator.
*
* The script is a "client app", so it logs in with Firebase Auth using email/password from the variable USER1.
*
* The USER1 user (the.admin.guy@test.com) must exist in your Firebase project and have write access
* to the collection(s) you are populating. You can create that account via Firebase Console >> Authentication.
*
@gregfenton
gregfenton / firestore_add_field_to_all_docs_in_collection.js
Last active December 7, 2023 15:33
Updates all docs in a Firestore collection with the given values -- command-line JavaScript/node
/**
* firestore_add_field_to_all_docs_in_collection.js
*
* This script is assumed to live in an existing Javascript project that has its own package.json.
* I store this script in <PROJECT_ROOT>/tools/cleanup/.
*
* To use:
* 1. Import the 'firebase' and 'esm' NPM modules to your project (Run the command: `npm install firebase esm`)
* 2. Edit the data for USER1 and FIREBASE_CONFIG, then adjust parameters in `main` for the call to `visitDocs`.
*