fix(audit): wire reminder defaults into createInterest; doc branding gap (R2-H15/H16)
R2-H16: /admin/reminders persisted defaultEnabled + defaultDays to system_settings but createInterest ignored them — every new interest defaulted to reminderEnabled=false regardless. The validator now treats reminderEnabled / reminderDays as optional (no default false), and createInterest falls back to getPortReminderConfig(portId) when the caller omits them. Explicit false / null still opts out. R2-H15: branding admin (/admin/branding) saves 5 settings that no code reads — the email templates and BrandedAuthShell hardcode Port Nimara branding. Wiring it end-to-end is a multi-template refactor; documented the gap inline above getPortBrandingConfig with a step-by-step wire-up plan so future devs don't think it's done. The reminder-digest scheduler (digestEnabled/digestTime/digestTimezone) remains unimplemented — needs a new BullMQ recurring job that batches pending reminders into per-user/per-port digest emails. Out of scope for this audit pass. 1175/1175 vitest passing. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -35,7 +35,10 @@ export const createInterestSchema = z.object({
|
||||
source: z.string().optional(),
|
||||
notes: z.string().optional(),
|
||||
tagIds: z.array(z.string()).optional().default([]),
|
||||
reminderEnabled: z.boolean().optional().default(false),
|
||||
// Omitting reminderEnabled / reminderDays falls back to the per-port
|
||||
// defaults configured at /admin/reminders (resolved in
|
||||
// createInterest). To opt out explicitly pass false / null.
|
||||
reminderEnabled: z.boolean().optional(),
|
||||
reminderDays: z.number().int().min(1).optional(),
|
||||
desiredLengthFt: optionalDesiredDimSchema,
|
||||
desiredWidthFt: optionalDesiredDimSchema,
|
||||
|
||||
Reference in New Issue
Block a user