Notifications setting.
authorRadek Czajka <rczajka@rczajka.pl>
Fri, 22 Aug 2025 13:32:51 +0000 (15:32 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Fri, 22 Aug 2025 13:32:51 +0000 (15:32 +0200)
src/social/api/urls2.py
src/social/api/views.py
src/social/migrations/0026_userprofile.py [new file with mode: 0644]
src/social/models.py

index 1a6d97e..3863ec6 100644 (file)
@@ -7,6 +7,8 @@ from . import views
 
 
 urlpatterns = [
+    path('settings/', views.SettingsView.as_view()),
+    
     path('like/<slug:slug>/',
         piwik_track_view(views.LikeView2.as_view()),
         name='social_api_like'),
index cad07df..91d882d 100644 (file)
@@ -23,6 +23,20 @@ import bookmarks.models
 from bookmarks.api.views import BookmarkSerializer
 
 
+class SettingsSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = models.UserProfile
+        fields = ['notifications']
+
+
+class SettingsView(RetrieveUpdateAPIView):
+    permission_classes = [IsAuthenticated]
+    serializer_class = SettingsSerializer
+
+    def get_object(self):
+        return models.UserProfile.get_for(self.request.user)
+
+
 @never_cache
 class LikeView(APIView):
     permission_classes = [IsAuthenticated]
diff --git a/src/social/migrations/0026_userprofile.py b/src/social/migrations/0026_userprofile.py
new file mode 100644 (file)
index 0000000..d5e8c5a
--- /dev/null
@@ -0,0 +1,24 @@
+# Generated by Django 4.0.8 on 2025-08-22 13:18
+
+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),
+        ('social', '0025_progress_reported_timestamp_alter_userlistitem_uuid'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='UserProfile',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('notifications', models.BooleanField(default=False)),
+                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
+            ],
+        ),
+    ]
index b0f2f7f..e50ff07 100644 (file)
@@ -181,6 +181,16 @@ class CarouselItem(models.Model):
         return self.banner or self.banner_group.get_banner()
 
 
+class UserProfile(models.Model):
+    user = models.OneToOneField(User, models.CASCADE)
+    notifications = models.BooleanField(default=False)
+
+    @classmethod
+    def get_for(cls, user):
+        obj, created = cls.objects.get_or_create(user=user)
+        return obj
+
+
 class UserConfirmation(models.Model):
     user = models.ForeignKey(User, models.CASCADE)
     created_at = models.DateTimeField(auto_now_add=True)