Je comprends tout à fait la confusion avec le passage à Firestore mais c'est presque exactement la même chose dans ce cas.
En temps réel, vous avez l'instantané :
exports.doStuff = functions.database.ref('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const ref = snapshot.ref;
const userRef = ref.parent.parent;
userRef.once('value').then(parentSnap => {
const user = parentSnap.val();
const lastSeen = user.last_seen;
});
});
Dans Firestore :
exports.doStuff = functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const ref = snapshot.ref;
const userRef = ref.parent.parent;
userRef.get().then(parentSnap => {
const user = parentSnap.data();
const lastSeen = user.last_seen;
});
});
Une autre chose à considérer est que vous passez le userId
dans vos paramètres afin que vous puissiez simplement construire votre propre DocumentReference (en supposant que vous utilisez également firebaseAdmin).
functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate((snapshot, context) => {
const userId = context.params.userId;
const userRef = firebaseAdmin.firestore().collection('users').doc(userId);
userRef.get().then(parentSnap => {
const user = parentSnap.data();
const lastSeen = user.last_seen;
});
});
Il vous permet également de découpler votre logique pour les fonctions que vous utilisez souvent, considérez-le comme une méthode "d'aide" : (NOTE, j'ai changé pour async/await par accident, c'est un peu plus propre)
functions.firestore.document.onCreate('/users/{userId}/forms/{formId}')
.onCreate(async (snapshot, context) => {
const userId = context.params.userId;
const lastSeen = await getLastSeen(userId);
});
// == Helper Functions ==-------------------
export async getLastSeen(userId) {
if (!userId) return Promise.reject('no userId');
// User Ref
const userSnap = await firebaseAdmin.firestore().collection('users').doc(userId).get();
return userSnap.data().last_seen;
}
Vous pouvez maintenant utiliser getLastSeen()
chaque fois que vous en avez besoin, et si vous apportez un changement, vous ne devez régler que cette seule fonction. Si ce n'est pas quelque chose que vous appelez souvent, alors ne vous inquiétez pas, mais j'envisagerais peut-être une getUser()
aide...