feat(final-docs): manual admin document-reminder blast
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
resetOrCreatePendingConfirmation,
|
||||
confirmAttendanceInTx,
|
||||
} from '../services/finalist-enrollment'
|
||||
import { sendManualFinalDocReminders } from '../services/final-documents'
|
||||
|
||||
export const finalistRouter = router({
|
||||
/** List all per-category finalist slot quotas for a program. */
|
||||
@@ -1660,4 +1661,24 @@ export const finalistRouter = router({
|
||||
|
||||
return { ok: true }
|
||||
}),
|
||||
|
||||
/** Manually remind finalist teams to upload their Grand Final documents. */
|
||||
sendDocumentReminders: adminProcedure
|
||||
.input(z.object({ programId: z.string(), projectIds: z.array(z.string()).optional() }))
|
||||
.mutation(async ({ ctx, input }) => {
|
||||
const result = await sendManualFinalDocReminders(ctx.prisma, {
|
||||
programId: input.programId,
|
||||
projectIds: input.projectIds,
|
||||
actorId: ctx.user.id,
|
||||
})
|
||||
await logAudit({
|
||||
prisma: ctx.prisma,
|
||||
userId: ctx.user.id,
|
||||
action: 'FINALIST_DOCS_REMINDER_SENT',
|
||||
entityType: 'Program',
|
||||
entityId: input.programId,
|
||||
detailsJson: { sent: result.sent, projectIds: input.projectIds ?? 'all-missing' },
|
||||
})
|
||||
return result
|
||||
}),
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user