feat(comms): logistics notification types, templates, and email settings

- Add 8 constants to NotificationTypes (FINALIST_CONFIRMED/DECLINED/EXPIRED/
  WAITLIST_PROMOTED/REMINDER/WITHDRAWN, TRAVEL_CONFIRMED, VISA_STATUS_UPDATE)
  with matching icons and priorities in NotificationIcons/NotificationPriorities
- Add 4 branded email templates: getFinalistReminderTemplate,
  getFinalistWithdrawnTemplate, getTravelConfirmedTemplate,
  getVisaStatusTemplate — registered in NOTIFICATION_EMAIL_TEMPLATES
  (admin-alert types use generic fallback)
- Add 8 logistics seed rows to seed-notification-settings.ts; upserted to
  dev DB (idempotent)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Matt
2026-06-04 16:06:10 +02:00
parent 0ea949309a
commit f529e79cd7
3 changed files with 379 additions and 0 deletions

View File

@@ -214,6 +214,64 @@ const NOTIFICATION_EMAIL_SETTINGS = [
sendEmail: true,
},
// Logistics notifications
{
notificationType: 'FINALIST_CONFIRMED',
category: 'logistics',
label: 'Finalist Confirmed',
description: 'Admin alert when a team confirms their grand-finale attendance',
sendEmail: true,
},
{
notificationType: 'FINALIST_DECLINED',
category: 'logistics',
label: 'Finalist Declined',
description: 'Admin alert when a team declines or an admin declines their finalist slot',
sendEmail: true,
},
{
notificationType: 'FINALIST_EXPIRED',
category: 'logistics',
label: 'Finalist Confirmation Expired',
description: 'Admin alert when a pending confirmation passes its deadline without a response',
sendEmail: true,
},
{
notificationType: 'FINALIST_WAITLIST_PROMOTED',
category: 'logistics',
label: 'Waitlist Promoted',
description: 'Admin alert when a waitlisted team is promoted to a confirmed finalist slot',
sendEmail: true,
},
{
notificationType: 'FINALIST_REMINDER',
category: 'logistics',
label: 'Confirmation Reminder',
description: 'Reminder email to the team lead when the confirmation deadline is approaching',
sendEmail: true,
},
{
notificationType: 'FINALIST_WITHDRAWN',
category: 'logistics',
label: 'Finalist Slot Withdrawn',
description: 'Notification to the team when their confirmed grand-finale slot is withdrawn by an admin',
sendEmail: true,
},
{
notificationType: 'TRAVEL_CONFIRMED',
category: 'logistics',
label: 'Travel Confirmed',
description: 'Email to the attendee when their flight and travel details are confirmed',
sendEmail: true,
},
{
notificationType: 'VISA_STATUS_UPDATE',
category: 'logistics',
label: 'Visa Status Update',
description: 'Email to the attendee when their visa application status changes',
sendEmail: true,
},
// Admin notifications (in-app only by default)
{
notificationType: 'FILTERING_COMPLETE',