GET /num-accepted-votes: Subtract invalidated vote count from num_votes

This commit is contained in:
David Ernst
2023-07-13 17:10:27 -07:00
parent 55df04242f
commit a3bb551940
3 changed files with 12 additions and 15 deletions

View File

@@ -20,6 +20,7 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
creator: jwt.email,
election_manager: jwt.name,
election_title,
num_invalidated_votes: 0,
num_voters: 0,
num_votes: 0,
})

View File

@@ -1,4 +1,5 @@
import { firebase, sendEmail } from 'api/_services'
import { firestore } from 'firebase-admin'
import { NextApiRequest, NextApiResponse } from 'next'
import { checkJwtOwnsElection } from '../../../validate-admin-jwt'
@@ -15,13 +16,9 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
await Promise.all(
voters_to_invalidate.map(async (voter) => {
const db = firebase.firestore()
const voterRef = db.collection('elections').doc(election_id).collection('voters').doc(voter.email)
const votes = await db
.collection('elections')
.doc(election_id)
.collection('votes')
.where('auth', '==', voter.auth_token)
.get()
const electionDoc = db.collection('elections').doc(election_id)
const voterRef = electionDoc.collection('voters').doc(voter.email)
const votes = await electionDoc.collection('votes').where('auth', '==', voter.auth_token).get()
// Do all in parallel
return Promise.all([
@@ -33,13 +30,9 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
await Promise.all(
votes.docs.map(async (vote) => {
const invalidatedVote = { ...vote.data(), invalidated_at: new Date() }
await db
.collection('elections')
.doc(election_id)
.collection('invalidated_votes')
.doc(vote.id)
.set(invalidatedVote)
await electionDoc.collection('invalidated_votes').doc(vote.id).set(invalidatedVote)
await vote.ref.delete()
await electionDoc.update({ num_invalidated_votes: firestore.FieldValue.increment(1) })
}),
)
})(),

View File

@@ -14,7 +14,10 @@ export default async (req: NextApiRequest, res: NextApiResponse) => {
// Is election_id in DB?
if (!electionDoc.exists) return res.status(400).json({ error: 'Unknown Election ID.' })
const { num_votes } = { ...electionDoc.data() } as { num_votes: number }
const { num_invalidated_votes = 0, num_votes } = { ...electionDoc.data() } as {
num_invalidated_votes?: number
num_votes: number
}
return res.status(200).json(num_votes)
return res.status(200).json(num_votes - num_invalidated_votes)
}