ВопросSeniorЯндекс18 просмотров

/* Компания предоставляет сервис массовой рассылки уведомлений для других бизнесов. К вам обратился product owner с задачей создать систему фильтрации уведомлений с учетом предпочтений пользователей. ## Определения Уведомление: - id уведомления - тип уведомления (EMAIL, SMS, PUSH) - получатель (id пользователя) - текст сообщения Получатель может иметь настройки предпочтений: - разрешенные каналы уведомлений (список типов) - заблокированные отправители (список id отправителей) История отправленных уведомлений: - список уведомлений, отправленных пользователю ## Важно Настройки пользователей и история уведомлений предоставляются другими компонентами системы. Вам необходимо спроектировать контракты для получения этих данных. Реализацию хранения делать не нужно. ## Задача Написать систему фильтрации уведомлений, которая: - на вход получает список уведомлений для фильтрации и id отправителя - исключает уведомления, не соответствующие предпочтениям пользователя - реализует защиту от дубликатов сообщений, в том числе учитывая сообщения, отправленные за последние 24 часа. Дубликатами считаются сообщения с одинаковыми id, адресованные одному пользователю - возвращает отфильтрованный список уведомлений, готовых к отправке. Отправка уведомлений не входит в вашу задачу - другая команда займется отправкой отфильтрованного списка. Ваша задача - только фильтрация. */ class NotificationFilter { UserSettingsService userSettingsService; NotificationHistoryService notificationHistoryService; public ??? filter(??? senderId, List<???> msgs) { // TODO implement } } interface UserSettingsService { // TODO any functions } interface NotificationHistoryService { // TODO any functions }