КРИТИЧНЫЕ УЛУЧШЕНИЯ: ✅ Убран хардкод 'EUSRR' → универсальное 'My Site' ✅ Созданы email шаблоны внутри модуля (4 файла) ✅ Централизованная конфигурация в config.py ✅ API перемещен в notifications/api/ Новые файлы: - config.py - централизованные настройки с fallback значениями - templates/notifications/email/*.html/*.txt - HTML и текстовые шаблоны - api/__init__.py, api/views.py, api/urls.py - REST API внутри модуля Изменения в существующих файлах: - senders/email.py: использует config.site_name() и config.from_email() - tasks/email.py: rate_limit, max_retries, retry_delay из config - tasks/push.py: rate_limit, max_retries, retry_delay из config - tasks/websocket.py: max_retries, retry_delay из config - api/v1/notifications/urls.py: реэкспорт из notifications.api (обратная совместимость) Структура шаблонов: 📁 notifications/templates/notifications/email/ ├── notification.html - красивый HTML для обычных уведомлений ├── notification.txt - текстовая версия ├── digest.html - HTML дайджест (daily/weekly) └── digest.txt - текстовая версия дайджеста Конфигурация (config.py): - DEFAULT_CONFIG с fallback значениями для всех параметров - get_config() - объединяет с settings.NOTIFICATIONS_CONFIG - Удобные функции: email_rate_limit(), push_max_retries(), site_name() - Полностью настраиваемо через settings проекта API внутри модуля: - notifications/api/views.py - все endpoint'ы - notifications/api/urls.py - URL patterns - Относительные импорты (from ..models) - Обратная совместимость через api/v1/notifications/urls.py УНИВЕРСАЛЬНОСТЬ: ✅ Нет хардкода проекта ✅ Все шаблоны внутри модуля ✅ API внутри модуля ✅ Конфигурация через settings ✅ Можно скопировать в любой проект Django 5.2+
33 lines
1.2 KiB
Python
33 lines
1.2 KiB
Python
"""
|
||
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('delete-all-read/', views.delete_all_read, name='delete_all_read'),
|
||
|
||
# Настройки каналов
|
||
path('preferences/', views.channel_preferences, name='preferences'),
|
||
|
||
# Web Push интеграция
|
||
path('push/subscribe/', views.subscribe_push, name='push_subscribe'),
|
||
path('push/unsubscribe/', views.unsubscribe_push, name='push_unsubscribe'),
|
||
]
|