From e79e0c2d306b68c51bb9b0edab7f8b5d358be723 Mon Sep 17 00:00:00 2001 From: Marshall Polaris Date: Tue, 3 May 2022 22:19:26 -0700 Subject: [PATCH] Also handle denormalizing answer avatar URLs --- .../src/scripts/denormalize-avatar-urls.ts | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/functions/src/scripts/denormalize-avatar-urls.ts b/functions/src/scripts/denormalize-avatar-urls.ts index 148c836b..1c77a3f1 100644 --- a/functions/src/scripts/denormalize-avatar-urls.ts +++ b/functions/src/scripts/denormalize-avatar-urls.ts @@ -60,13 +60,32 @@ async function getCommentsByUserId( return results } +async function getAnswersByUserId( + transaction: Transaction +): Promise> { + let n = 0 + let results = new Map() + let answers = await transaction.get(firestore.collectionGroup('answers')) + answers.forEach((doc) => { + let userId = doc.get('userId') + let userAnswers = results.get(userId) || [] + userAnswers.push(doc) + results.set(userId, userAnswers) + n++ + }) + console.log(`Found ${n} answers from ${results.size} unique users.`) + return results +} + if (require.main === module) { admin.firestore().runTransaction(async (transaction) => { - let [usersById, contractsByUserId, commentsByUserId] = await Promise.all([ - getUsersById(transaction), - getContractsByUserId(transaction), - getCommentsByUserId(transaction), - ]) + let [usersById, contractsByUserId, commentsByUserId, answersByUserId] = + await Promise.all([ + getUsersById(transaction), + getContractsByUserId(transaction), + getCommentsByUserId(transaction), + getAnswersByUserId(transaction), + ]) let usersContracts = Array.from( usersById.entries(), @@ -97,5 +116,18 @@ if (require.main === module) { console.log(describeDiff(d)) applyDiff(transaction, d) }) + + let usersAnswers = Array.from( + usersById.entries(), + ([id, doc]): DocumentCorrespondence => { + return [doc, answersByUserId.get(id) || []] + } + ) + let answerDiffs = findDiffs(usersAnswers, 'avatarUrl', 'avatarUrl') + console.log(`Found ${answerDiffs.length} answers with mismatches.`) + answerDiffs.forEach((d) => { + console.log(describeDiff(d)) + applyDiff(transaction, d) + }) }) }