path('', include('social.api.urls2')),
path('', include('bookmarks.api.urls')),
path('', include('search.api.urls')),
+ path('', include('push.api.urls')),
]
--- /dev/null
+from django.urls import path
+from . import views
+
+
+urlpatterns = [
+ path('deviceTokens/', views.DeviceTokensView.as_view()),
+ path('deviceTokens/<int:pk>/', views.DeviceTokenView.as_view(), name='push_api_device_token'),
+]
--- /dev/null
+from rest_framework import serializers
+from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView
+from rest_framework.permissions import IsAuthenticated
+from api.utils import never_cache
+from api.fields import AbsoluteURLField
+from push import models
+
+
+class DeviceTokenSerializer(serializers.ModelSerializer):
+ href = AbsoluteURLField(
+ view_name='push_api_device_token',
+ view_args=('pk',)
+ )
+
+ class Meta:
+ model = models.DeviceToken
+ fields = ['token', 'created_at', 'updated_at', 'href']
+ read_only_fields = ['created_at', 'updated_at']
+
+ def create(self, validated_data):
+ return models.DeviceToken.objects.create(
+ user=self.context['request'].user,
+ **validated_data
+ )
+
+
+@never_cache
+class DeviceTokensView(ListCreateAPIView):
+ permission_classes = [IsAuthenticated]
+ serializer_class = DeviceTokenSerializer
+
+ def get_queryset(self):
+ return models.DeviceToken.objects.filter(user=self.request.user)
+
+
+@never_cache
+class DeviceTokenView(RetrieveUpdateDestroyAPIView):
+ permission_classes = [IsAuthenticated]
+ serializer_class = DeviceTokenSerializer
+
+ def get_queryset(self):
+ return models.DeviceToken.objects.filter(user=self.request.user)
--- /dev/null
+# Generated by Django 4.0.8 on 2025-08-26 07:47
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('push', '0004_alter_notification_body_alter_notification_image_and_more'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='DeviceToken',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('token', models.CharField(max_length=1024)),
+ ('created_at', models.DateTimeField(auto_now_add=True)),
+ ('updated_at', models.DateTimeField(auto_now=True)),
+ ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+ ],
+ ),
+ ]
def __str__(self):
return '%s: %s' % (self.timestamp, self.title)
+
+
+class DeviceToken(models.Model):
+ user = models.ForeignKey('auth.User', models.CASCADE)
+ token = models.CharField(max_length=1024)
+ created_at = models.DateTimeField(auto_now_add=True)
+ updated_at = models.DateTimeField(auto_now=True)
+
+ class Meta:
+ ordering = ('-updated_at',)