Способы разработки дайджеста по электронной почте? - PullRequest
0 голосов
/ 11 декабря 2018

Я ищу мысли о том, как создать функцию дайджеста электронной почты.Я не обеспокоен фактическим бизнес-кодом;вместо этого я хотел бы сосредоточиться на сути этого.

Давайте разберемся с этим на известном примере: статьях.Вот общий обзор некоторых важных функций:

  1. Пользователь может выбрать дайджест частота (например, ежедневно или еженедельно);
  2. Дайджест * только 1012 * содержит новые статьи;
  3. "Новые статьи" должны рассматриваться как относительно предыдущего дайджеста , который был отправленконкретный пользователь;

Я думал о следующем:

  • Ввести отслеживание для пользователей статей, ранее включенных в дайджест, и отфильтровать их?
    • Требуется новая таблица базы данных;
    • Может стать дорогостоящим, если таблица содержит миллионы строк;
    • Что делать в случае включения в дайджест моделей нескольких типов?Несколько таблиц отслеживания?Полиморфный стол?...?
  • Использовать даты создания статьи, чтобы включить статьи между текущей датой и выбранной периодичностью дайджеста?
    • Использует текущую дату и информацию, уже присутствующую в базе данных, поэтому новые таблицы не требуются;
    • Что происходит, когда пользователь переключается с ежедневных на еженедельные электронные письма?Он мог получить ту же статью снова в еженедельном дайджесте.Следует ли рассматривать этот крайний случай?Если да, то как это исправить?
    • По какой-то причине дата создания статьи обновляется до сегодняшнего дня, что снова вызывает положительный результат сравнения дат.Следует ли рассматривать этот крайний случай?Если да, как смягчить?

Или вы можете подумать о других способах реализации этой функции?

Мне не терпится узнать ваши идеи.

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете создать дополнительную таблицу, которая будет содержать информацию о подписке на дайджесты каждого пользователя.Этот способ дает возможность сделать дизайн базы данных более чистым и универсальным, поскольку рассылка является отдельным логическим модулем.Кроме того, дополнительная таблица дает возможность легко расширять хранимые данные о подписке на дайджест в будущем.Например:

enter image description here

С помощью этой таблицы вы легко сможете управлять данными.Например, вы можете выбрать всех получателей ежедневного дайджеста:

SELECT *
FROM digest_subscription
WHERE interval_type = 'daily'
  AND last_date_distribution <= NOW()

или выбрать всех получателей еженедельного дайджеста

SELECT *
FROM digest_subscription
WHERE interval_type = 'weekly'
  AND last_date_distribution <= NOW() - INTERVAL 7 DAY

Условие по типу интервала и сравнить распределение последних дат по правилу«равно или меньше» дают возможность избежать проблем несвоевременной отправки электронных писем (например, технические сбои на сервере и т. д.)

Кроме того, вы можете составить правильный список статей с помощью информации о последнем распространении данных,Использование последнего распределения данных дает возможность избежать проблем изменения интервала.Например:

SELECT *
FROM articles
WHERE created_at >= <the last date distribution of the user>

Конечно, вы не избежите проблем с обновленной датой создания.Но вы должны минимизировать причины этого.Например, ваш код может обновлять дату модификации, но ваш код не должен изменять дату создания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...