urlpatterns = [
+ path('settings/', views.SettingsView.as_view()),
+
path('like/<slug:slug>/',
piwik_track_view(views.LikeView2.as_view()),
name='social_api_like'),
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]
--- /dev/null
+# 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)),
+ ],
+ ),
+ ]
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)