/notifications/",
toggle_chat_notifications,
name="toggle_chat_notifications"
),
```
### Шаг 3: Обновить JavaScript
**Файл:** `backend/static/js/components/chatMenuActions.js`
Заменить функцию `handleNotificationsAction`:
```javascript
async function handleNotificationsAction(chatId, chatName) {
try {
// Получаем текущее состояние (можно хранить в data-атрибуте)
const chatRow = document.querySelector(`[data-chat-id="${chatId}"]`);
const currentlyEnabled = chatRow?.dataset.notificationsEnabled !== 'false';
// Переключаем состояние
const newState = !currentlyEnabled;
const response = await fetch(`/api/v1/communications/chats/${chatId}/notifications/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': getCsrfToken()
},
body: JSON.stringify({ enabled: newState })
});
const data = await response.json();
if (data.ok) {
// Обновляем data-атрибут
if (chatRow) {
chatRow.dataset.notificationsEnabled = newState.toString();
}
// Показываем toast с результатом
showSuccessMessage(data.message || `Уведомления ${newState ? 'включены' : 'отключены'}`);
// Можно добавить визуальный индикатор (иконка колокольчика с перечеркиванием)
updateNotificationsIcon(chatRow, newState);
} else {
showErrorMessage(data.error || 'Ошибка при изменении настроек');
}
} catch (error) {
console.error('Notifications toggle error:', error);
showErrorMessage('Ошибка при изменении настроек уведомлений');
}
}
```
### Шаг 4: Обновить сигналы
**Файл:** `backend/communications/notification_signals.py`
В функции `create_message_notifications` после получения списка участников добавить проверку:
```python
# Фильтруем получателей с учетом их настроек уведомлений
filtered_recipients = []
for recipient in recipients_for_new_message:
# Проверяем настройки уведомлений для этого чата
chat_settings = ChatUserSettings.objects.filter(
chat=chat,
user=recipient
).first()
# Если настройки не найдены - по умолчанию уведомления включены
# Если найдены - проверяем флаг
if not chat_settings or chat_settings.notifications_enabled:
filtered_recipients.append(recipient)
# Отправляем уведомления только отфильтрованным получателям
for recipient in filtered_recipients:
NotificationService.create_notification(...)
```
### Шаг 5: Добавить индикатор в UI (опционально)
В `templates/includes/components/chat_card.html` добавить визуальный индикатор:
```html
{# ... существующий код ... #}
{# Индикатор отключенных уведомлений #}
{% if not chat_settings.notifications_enabled %}
{% endif %}
```
---
## 📝 Приоритет реализации
**Оценка работы:** 2-3 часа
**Сложность:** 🟡 Средняя
**Приоритет:** 🟡 Средний (не критично, но желательно)
**Зависимости:** Нет
**Блокирует:** Ничего
---
## ✅ Чек-лист реализации
- [ ] Создать функцию `toggle_chat_notifications()` в `views.py`
- [ ] Добавить маршрут в `urls.py`
- [ ] Импортировать функцию в начале `urls.py`
- [ ] Обновить JavaScript в `chatMenuActions.js`
- [ ] Добавить проверку в `notification_signals.py`
- [ ] Протестировать включение/выключение уведомлений
- [ ] Убедиться, что уведомления не приходят при отключенных настройках
- [ ] Добавить индикатор в UI (опционально)
- [ ] Создать миграцию если изменяли модель (не требуется)
---
## 🎯 Результат после реализации
После реализации пользователи смогут:
1. ✅ Кликнуть на "Уведомления" в меню чата
2. ✅ Увидеть toggle для включения/выключения
3. ✅ Сохранить свой выбор
4. ✅ Перестать получать уведомления от выбранного чата
5. ✅ Увидеть визуальный индикатор (иконка колокольчика)
**Уведомления будут приходить только от тех чатов, где они включены!**