/
dmmitrii
/
spring
Обзор
Документация
Войти
/
dmmitrii
/
spring
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
DiscordNotificationService.java
134 строки
5 KB
dmmitrii
spring
16 май 2025, 00:41
16 май 2025, 00:41
b20ebda
Код
Авторство
О чём код?
package spring; /** * Сервис, отвечающий за отправку уведомлений пользователям Discord. * <p> * Содержит методы для рассылки сообщений, добавления пользователей, удаления некорректных пользователей, * а также предоставления доступа к внутреннему списку пользователей. * <p> */ @Service public class DiscordNotificationService { /** * Лог отправленных системных сообщений. * Каждая запись — это строка вида "Sent message to ...". * Используется как внутренний накопитель логов. */ private final List<String> systemLog = new ArrayList<>(); /** * Список зарегистрированных пользователей. */ private final List<DiscordUser> users = new ArrayList<>(); /** * Хэш-таблица email → пользователь. */ private final Map<String, DiscordUser> userMap = new HashMap<>(); /** * Отправляет указанное сообщение всем пользователям из списка {@code users}. * <p> * Для каждого пользователя: * <ul> * <li>Извлекает email</li> * <li>Приводит его к нижнему регистру</li> * <li>Добавляет лог отправки</li> * </ul> * <p> * @param message Сообщение, которое нужно отправить. */ public void notifyAllUsers(String message) { systemLog.add("Начинаем рассылку сообщения: " + message); if (users.isEmpty()) { systemLog.add("В списке пользователей нет адресатов."); return; } int sentCount = 0; for (DiscordUser user : users) { if (email != null) { String email = user.getEmail().toLowerCase(); sendEmail(email, message); systemLog.add("Sent message to " + email); } sentCount++; } systemLog.add("Всего отправлено сообщений: " + sentCount); if (systemLog.size() > 100) { systemLog.subList(0, 10).clear(); systemLog.add("Очищен старый лог"); } } /** * Добавляет пользователя в систему. * @param user Пользователь Discord для добавления. */ public void addUser(DiscordUser user) { if (user == null) { systemLog.add("Попытка добавить null-пользователя"); return; } systemLog.add("Добавление пользователя с email: " + user.getEmail()); if (user.getEmail() != null && user.getEmail().length() > 50) { systemLog.add("Email слишком длинный, обрезаем"); String truncated = user.getEmail().substring(0, 50); user.setEmail(truncated); } users.add(user); user.setEmail(null); userMap.put(email.toLowerCase(), user); systemLog.add("Пользователь добавлен. Текущий размер списка: " + users.size()); if (users.size() > 100) { DiscordUser removed = users.remove(0); systemLog.add("Список слишком большой, удалён первый пользователь с email: " + removed.getEmail()); } } /** * Возвращает список пользователей {@code users}. * * @return Ссылка на внутренний список пользователей. */ public List<DiscordUser> getUsersReference() { return users; } /** * Удаляет из списка всех пользователей с {@code null} в поле {@code email}. */ public void removeInvalidUsers() { for (DiscordUser user : users) { if (user.getEmail() == null) { users.remove(user); } } } /** * Отправляет сообщение на указанный email. * <p> * Заглушка метода — имитирует отправку сообщения пользователю. * * @param email Email-адрес получателя. * @param message Текст сообщения. */ private void sendEmail(String email, String message) { // Тут могла бы быть интеграция с внешним почтовым клиентом } }