in src/next-reminders/lib/db.ts [5:76]
export function getNextReminders(
pool: Pool,
now: Date = new Date(),
): Promise<QueryResult> {
const currentReminderPeriod = getCurrentReminderPeriod(now);
const query: QueryConfig = {
text: `
WITH one_offs AS (
SELECT
identity_id,
reminder_period::text,
reminder_created_at::text,
reminder_platform,
reminder_component,
reminder_stage,
'ONE_OFF' as reminder_type,
reminder_option,
reminder_code
FROM
one_off_reminder_signups
WHERE
reminder_cancelled_at IS NULL
AND reminder_period = $1
),
recurrings AS (
SELECT
identity_id,
DATE($1)::text AS reminder_period,
reminder_created_at::text,
reminder_platform,
reminder_component,
reminder_stage,
'RECURRING' as reminder_type,
reminder_option,
reminder_code
FROM
recurring_reminder_signups
WHERE
reminder_cancelled_at IS NULL
AND NOT (
DATE_PART('year', DATE($1)) = DATE_PART('year', DATE(reminder_created_at))
AND DATE_PART('month', DATE($1)) = DATE_PART('month', DATE(reminder_created_at))
)
AND CAST(
(DATE_PART('year', DATE($1)) - DATE_PART('year', DATE(reminder_created_at))) * 12 +
(DATE_PART('month', DATE($1)) - DATE_PART('month', DATE(reminder_created_at)))
AS INT) % reminder_frequency_months = 0
),
combined AS (
SELECT
*
FROM
recurrings
UNION SELECT
*
FROM
one_offs
ORDER BY
reminder_type DESC,
reminder_created_at ASC
)
SELECT DISTINCT ON (identity_id)
*
FROM
combined;
`,
values: [currentReminderPeriod],
};
return runWithLogging(query, pool);
}