notifications/apps/push_notifications
Ali Asadi 707407bb52 FEAT(notifications): admin-managed code -> URL mapping for click actions
The click_url a producer sends had to be built in that producer's own
Python code (utils/deep_links.py in advertising), so changing the URL
scheme meant a code deploy. Adds NotificationLink: an admin-editable
(code, url_template, is_active) row per notification type, with
url_template supporting a {object_id} placeholder.

PushMessage gains `code` and `click_object_id` — a producer can send either
a raw click_url (unchanged, still wins if both are given) or a code + the
referenced object's id, and resolve_click_url() looks up the template at
send time. An unset or not-yet-configured/inactive code resolves to no
click action rather than an error, consistent with "not every notification
is clickable." Wired through both the single-push API (serializer) and the
bulk Excel path (two new optional columns).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-22 14:35:55 +03:30
..
migrations FEAT(notifications): admin-managed code -> URL mapping for click actions 2026-08-22 14:35:55 +03:30
__init__.py send message api 2025-07-15 13:59:42 +03:30
admin.py FEAT(notifications): admin-managed code -> URL mapping for click actions 2026-08-22 14:35:55 +03:30
application_urls.py send message api 2025-07-15 13:59:42 +03:30
apps.py send message api 2025-07-15 13:59:42 +03:30
models.py FEAT(notifications): admin-managed code -> URL mapping for click actions 2026-08-22 14:35:55 +03:30
serializers.py FEAT(notifications): admin-managed code -> URL mapping for click actions 2026-08-22 14:35:55 +03:30
tasks.py FEAT(notifications): add optional click_url for notification tap actions 2026-08-22 09:36:06 +03:30
tests.py send message api 2025-07-15 13:59:42 +03:30
user_urls.py send message api 2025-07-15 13:59:42 +03:30
views.py add celery 2025-07-17 12:15:32 +03:30