Corp/backend/test_notification_debug.py
Игорь Надеин b38d2bc44b fix: автоматическое обновление JWT токенов
- ApiClient теперь обрабатывает 401 и 403 ошибки для обновления токена
- Добавлен JWTRefreshMiddleware для проактивного обновления токенов за 5 минут до истечения
- Добавлена настройка JWT_REFRESH_THRESHOLD_MINUTES (по умолчанию 5)
- Исправлена проблема с периодическими 403 ошибками после истечения access token
2025-11-20 18:52:29 +03:00

96 lines
3.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
"""
Скрипт для отладки уведомлений
"""
import os
import sys
import django
import logging
# Включаем подробное логирование
logging.basicConfig(level=logging.DEBUG)
# Настройка Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'eusrr_backend.settings')
django.setup()
from employees.models import Employee
from notifications.services import NotificationService
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
def main():
"""Создать тестовое уведомление с отладкой"""
print("=" * 60)
print("ТЕСТ СИСТЕМЫ УВЕДОМЛЕНИЙ")
print("=" * 60)
# Проверка Channel Layer
channel_layer = get_channel_layer()
print(f"\n1. Channel Layer: {type(channel_layer).__name__}")
# Получаем пользователя
user = Employee.objects.first()
if not user:
print("❌ Нет пользователей в системе!")
sys.exit(1)
print(f"\n2. Получатель: {user.last_name} {user.first_name} (ID={user.id})")
print(f" Email: {user.email}")
# Создаём уведомление
print("\n3. Создание уведомления...")
notification = NotificationService.create_notification(
recipient=user,
notification_type_code='system_announcement',
title='🔔 Тестовое уведомление',
message='Это тестовое сообщение для проверки WebSocket. Если вы видите это в браузере - система работает!',
action_url='/',
)
if not notification:
print("❌ Не удалось создать уведомление!")
sys.exit(1)
print(f"✅ Уведомление создано: ID={notification.id}")
print(f" Заголовок: {notification.title}")
print(f" Отправлено веб: {notification.sent_web}")
print(f" Дата отправки: {notification.sent_at}")
# Проверка отправки через WebSocket
print(f"\n4. WebSocket группа: notifications_{user.id}")
# Попробуем отправить напрямую
print("\n5. Отправка тестового сообщения через Channel Layer...")
try:
async_to_sync(channel_layer.group_send)(
f'notifications_{user.id}',
{
'type': 'notification_new',
'notification': {
'id': notification.id,
'title': '🧪 Прямое тестовое сообщение',
'message': 'Это сообщение отправлено напрямую через Channel Layer',
'category': 'system',
'icon': 'bi-gear',
'color': 'light',
'priority': 'high',
}
}
)
print("✅ Сообщение отправлено в Channel Layer")
except Exception as e:
print(f"❌ Ошибка отправки: {e}")
print("\n" + "=" * 60)
print("ПРОВЕРЬТЕ БРАУЗЕР!")
print("=" * 60)
print("Вы должны увидеть:")
print(" 1. Toast уведомление справа вверху")
print(" 2. Badge с цифрой в navbar")
print(" 3. В консоли: [Notifications] Received: ...")
print("=" * 60)
if __name__ == '__main__':
main()