lizerk 6fe7eeb222 feat: добавлены realtime бэйджи с уведомлениями в боковую панель
- Исправлена логика подсчёта уведомлений по категориям (n.verb вместо n.category)
- Добавлена синхронизация между компонентами через CustomEvent API
- Реализована автоматическая отметка категории уведомлений при переходе в раздел
- Backend: универсальный endpoint /category/read/ принимающий список verbs
- Frontend: функция getVerbsByCategory() для маппинга категорий
- Счётчики обновляются в реальном времени через WebSocket
- Синхронизация работает между всеми вкладками браузера

Модуль уведомлений остался переиспользуемым - категории управляются на фронте
2026-03-11 08:48:26 +03:00

35 lines
1.4 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.

"""
URL routing для API v2 уведомлений.
Новая архитектура: verb-based notifications с channel preferences.
"""
from django.urls import path
from . import views
app_name = 'notifications_api_v1'
urlpatterns = [
# Список и счетчики
path('', views.get_notifications, name='list'),
path('count/', views.get_unread_count, name='count'),
path('verb-types/', views.get_verb_types, name='verb_types'),
# Операции с уведомлениями
path('<int:notification_id>/read/', views.mark_as_read, name='mark_read'),
path('<int:notification_id>/unread/', views.mark_as_unread, name='mark_unread'),
path('<int:notification_id>/', views.delete_notification, name='delete'),
# Массовые операции
path('read-all/', views.mark_all_as_read, name='mark_all_read'),
path('category/read/', views.mark_category_as_read, name='mark_category_read'),
path('delete-all-read/', views.delete_all_read, name='delete_all_read'),
# Настройки каналов
path('preferences/', views.channel_preferences, name='preferences'),
# Web Push интеграция
path('push/vapid-key/', views.get_vapid_public_key, name='vapid_key'),
path('push/subscribe/', views.subscribe_push, name='push_subscribe'),
path('push/unsubscribe/', views.unsubscribe_push, name='push_unsubscribe'),
]