Also handle denormalizing answer avatar URLs

This commit is contained in:
Marshall Polaris 2022-05-03 22:19:26 -07:00
parent d385bbd90e
commit e79e0c2d30

View File

@ -60,12 +60,31 @@ async function getCommentsByUserId(
return results
}
async function getAnswersByUserId(
transaction: Transaction
): Promise<Map<string, DocumentSnapshot[]>> {
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([
let [usersById, contractsByUserId, commentsByUserId, answersByUserId] =
await Promise.all([
getUsersById(transaction),
getContractsByUserId(transaction),
getCommentsByUserId(transaction),
getAnswersByUserId(transaction),
])
let usersContracts = Array.from(
@ -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)
})
})
}