2) С помощью метода UserNotificationRepository узнать, есть ли уже в БД для этого юзера уведомление с таким типом.
3) Если такого уведомления нет => создать его с помощью метода UserNotificationRepository
Зачем это проверять снаружи? Почему бы просто не сделать один метод для отправки уведомлений, который внутри проверит, не было ли оно отправлено раньше?