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>
29 lines
694 B
Python
29 lines
694 B
Python
from rest_framework import serializers
|
|
|
|
from .models import PushUser, PushMessage
|
|
|
|
|
|
class PushUserSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PushUser
|
|
fields = (
|
|
"user",
|
|
"client_token",
|
|
"application_token"
|
|
)
|
|
|
|
class PushMessageSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PushMessage
|
|
fields = (
|
|
"push_user",
|
|
"application",
|
|
"title",
|
|
"message",
|
|
"priority",
|
|
"extras",
|
|
"click_url",
|
|
"code",
|
|
"click_object_id",
|
|
)
|
|
read_only_fields = ("push_user","application")
|