Skip to content

Instantly share code, notes, and snippets.

@loucou
loucou / firestore.rules
Created April 3, 2021 21:04
second gist for https://medium.com/firebase-tips-tricks/how-to-secure-many-to-many-relationships-in-firestore-d19f972fd4d3 because naming for security rules has to be firestore.rules exactly to have syntax coloring
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /junction_student_course/{junctionId} {
allow read:
if request.auth != null
&& request.auth.uid == resource.data.studentId;
allow create:
if request.auth != null
async function attendCourse(studentId, courseId) {
const attendingRef = db.doc(`students/${studentId}/attending/${courseId}`);
const attendeeRef = db.doc(`courses/${courseId}/attendees/${studentId}`);
const batch = db.batch();
batch.set(attendingRef, {});
batch.set(attendeeRef, {});
await batch.commit();
}
function countListener(onCountChange: (count: number) => void) {
const query = firebase.firestore().collection("fruits");
let count = 0;
return query.onSnapshot(snapshot => {
snapshot.docChanges().forEach(change => {
if (change.type === "added") onCountChange(++count);
if (change.type === "removed") onCountChange(--count);
});
});
}
@loucou
loucou / admin.js
Last active February 2, 2021 22:03
const admin = require("firebase-admin");
process.env["FIRESTORE_EMULATOR_HOST"] = "localhost:8080";
const serviceAccountKey = require("./serviceAccountKey.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccountKey),
databaseURL: `https://${serviceAccountKey.project_id}.firebaseio.com`,
});