feat: auto-create MemberLunchPick on attendee writes

Adds ensureLunchPickForAttendingMember helper called from confirm,
adminConfirm, and editAttendees attendee-creation paths. No-ops when
the program has no LunchEvent.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Matt
2026-04-29 02:28:51 +02:00
parent cdb18cc3d1
commit 1a0afd8c6e
3 changed files with 154 additions and 0 deletions

View File

@@ -13,6 +13,7 @@ import {
} from '../services/in-app-notification'
import { sendFinalistConfirmationEmail } from '@/lib/email'
import { verifyFinalistToken } from '@/lib/finalist-token'
import { ensureLunchPickForAttendingMember } from '../services/lunch-pick-sync'
export const finalistRouter = router({
/** List all per-category finalist slot quotas for a program. */
@@ -351,6 +352,13 @@ export const finalistRouter = router({
data: created.map((m) => ({ attendingMemberId: m.id, status: 'REQUESTED' })),
})
}
const allMembers = await tx.attendingMember.findMany({
where: { confirmationId: confirmation.id, userId: { in: input.attendingUserIds } },
select: { id: true },
})
for (const m of allMembers) {
await ensureLunchPickForAttendingMember(tx, m.id)
}
})
await logAudit({
prisma: ctx.prisma,
@@ -505,6 +513,13 @@ export const finalistRouter = router({
data: created.map((m) => ({ attendingMemberId: m.id, status: 'REQUESTED' })),
})
}
const allMembers = await tx.attendingMember.findMany({
where: { confirmationId: confirmation.id, userId: { in: input.attendingUserIds } },
select: { id: true },
})
for (const m of allMembers) {
await ensureLunchPickForAttendingMember(tx, m.id)
}
})
await logAudit({
prisma: ctx.prisma,
@@ -1071,6 +1086,13 @@ export const finalistRouter = router({
data: created.map((m) => ({ attendingMemberId: m.id, status: 'REQUESTED' })),
})
}
const newMembers = await tx.attendingMember.findMany({
where: { confirmationId: confirmation.id, userId: { in: toCreate } },
select: { id: true },
})
for (const m of newMembers) {
await ensureLunchPickForAttendingMember(tx, m.id)
}
}
})