feat(admin): add pre-registrant alert detectors

This commit is contained in:
Jennie Robinson Faber 2026-04-08 11:09:39 +01:00
parent 824364d526
commit 4bae4b0ec3
2 changed files with 104 additions and 1 deletions

View file

@ -116,4 +116,49 @@ export async function detectSuspendedMembers() {
}
}
function preRegItem(preReg, sublabel) {
return {
id: String(preReg._id),
label: preReg.name || preReg.email,
sublabel,
href: '/admin/pre-registrants'
}
}
export async function detectPreRegistrantSelectedNotInvited() {
await connectDB()
const cutoff = daysAgo(ALERT_THRESHOLDS.PREREG_SELECTED_DAYS)
const preRegs = await PreRegistration
.find({
status: 'selected',
updatedAt: { $lte: cutoff }
})
.select('name email updatedAt')
.lean()
return {
type: 'preregistrant_selected_not_invited',
severity: 'attention',
title: 'Pre-registrants selected but not invited',
items: preRegs.map((p) =>
preRegItem(p, `${p.email}${daysSince(p.updatedAt)} days selected`)
)
}
}
export async function detectPreRegistrantExpired() {
await connectDB()
const preRegs = await PreRegistration
.find({ status: 'expired' })
.select('name email updatedAt')
.lean()
return {
type: 'preregistrant_expired',
severity: 'attention',
title: 'Expired pre-registrant invitations',
items: preRegs.map((p) =>
preRegItem(p, `${p.email} — expired ${daysSince(p.updatedAt)} days ago`)
)
}
}
// Aggregator lands in task 8.