#500 Система фильтрации уведомлений

Компании:
Яндекс
Темы:
System DesignВзаимодействие сервисовПрактика

Компания предоставляет сервис массовой рассылки уведомлений для других бизнесов. Product owner поставил задачу создать систему фильтрации уведомлений с учетом предпочтений пользователей.

Определения

Уведомление содержит:

  • id уведомления;
  • Тип уведомления: EMAIL, SMS, PUSH;
  • id получателя;
  • Текст сообщения.

Получатель может иметь настройки предпочтений:

  • разрешенные каналы уведомлений;
  • заблокированные отправители.

История отправленных уведомлений содержит список уведомлений, которые уже были отправлены пользователю.

Важно

Настройки пользователей и история уведомлений предоставляются другими компонентами системы. В рамках задачи нужно спроектировать контракты для получения этих данных. Реализацию хранения делать не нужно.

Задача

Необходимо написать систему фильтрации уведомлений, которая:

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

Если уведомление с таким же id уже было отправлено конкретному пользователю за последние 24 часа, оно не должно быть отправлено снова.

Отправка уведомлений не входит в задачу. Другая команда будет заниматься отправкой отфильтрованного списка.

Разбор вопроса

Ментор
Ответь как на реальном собеседовании. Я задам уточняющие вопросы, а затем сравню твой ответ с эталонным и покажу точность в %.
Войди, чтобы начать диалог Ментор ведёт диалог по текущему вопросу и учитывает предыдущие сообщения.
Войти