From: Radek Czajka Date: Fri, 22 Aug 2025 13:32:51 +0000 (+0200) Subject: Notifications setting. X-Git-Url: https://git.mdrn.pl/wolnelektury.git/commitdiff_plain/9b46fa5812ae6d152cef155956b435b4ba034df8?hp=819c427b704a53b2e62794160fcf7b29e6772424 Notifications setting. --- diff --git a/src/social/api/urls2.py b/src/social/api/urls2.py index 1a6d97e2c..3863ec622 100644 --- a/src/social/api/urls2.py +++ b/src/social/api/urls2.py @@ -7,6 +7,8 @@ from . import views urlpatterns = [ + path('settings/', views.SettingsView.as_view()), + path('like//', piwik_track_view(views.LikeView2.as_view()), name='social_api_like'), diff --git a/src/social/api/views.py b/src/social/api/views.py index cad07df05..91d882da1 100644 --- a/src/social/api/views.py +++ b/src/social/api/views.py @@ -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 index 000000000..d5e8c5a22 --- /dev/null +++ b/src/social/migrations/0026_userprofile.py @@ -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)), + ], + ), + ] diff --git a/src/social/models.py b/src/social/models.py index b0f2f7fb7..e50ff0775 100644 --- a/src/social/models.py +++ b/src/social/models.py @@ -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)