From f31cba303038e2fd1f6c7891dd3a3a144c4258cc Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Tue, 2 Jul 2024 15:04:36 +0500 Subject: [PATCH] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83=20+=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20=D0=B2=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B4=D0=B0=D1=86=D0=B8=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/admin.py | 2 +- server/proj/audio/models.py | 1 - server/proj/audio/serializers.py | 29 +++++++++++++++--- server/proj/audio/views.py | 27 ++++++++-------- server/proj/news/migrations/0001_initial.py | 2 +- .../__pycache__/0001_initial.cpython-310.pyc | Bin 903 -> 903 bytes .../proj/rubricks/migrations/0001_initial.py | 2 +- .../__pycache__/0001_initial.cpython-310.pyc | Bin 1092 -> 1092 bytes 8 files changed, 42 insertions(+), 21 deletions(-) diff --git a/server/proj/audio/admin.py b/server/proj/audio/admin.py index 1130bbd..e89d730 100644 --- a/server/proj/audio/admin.py +++ b/server/proj/audio/admin.py @@ -5,7 +5,7 @@ from .models import Song, FavoriteSong, PlayList, Podkast class SongAdmin(admin.ModelAdmin): list_display = ('slug', 'title', 'artist', 'genre', 'album') exclude = ('azura_id',) - readonly_fields = ['slug'] + readonly_fields = ['slug', 'unique_id'] @admin.register(FavoriteSong) diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 05ef07d..6abb6b3 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -54,7 +54,6 @@ class PlayList(models.Model): class Meta: verbose_name = 'Плейлисты' - unique_together = ('name', 'user') verbose_name_plural = 'Плейлисты' class Podkast(models.Model): diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index df70d14..5c5295a 100644 --- a/server/proj/audio/serializers.py +++ b/server/proj/audio/serializers.py @@ -7,6 +7,16 @@ class SongSerializer(serializers.ModelSerializer): fields = ('id', 'unique_id', 'azura_id', 'title', 'artist', 'album', 'genre', 'art') class PlayListSerializer(serializers.ModelSerializer): + def validate(self, attrs): + if PlayList.objects.filter( + name=attrs.get('name'), + user=attrs.get('user') + ).exists(): + raise serializers.ValidationError( + { + 'playlist': ['Данный плейлист уже существует'] + }) + return super().validate(attrs) class Meta: model = PlayList fields = ('id', 'name', 'song', 'user', 'playlist_art') @@ -18,22 +28,31 @@ class PlayListSerializer(serializers.ModelSerializer): return rep class FavoriteSongSerializer(serializers.ModelSerializer): - def __init__(self, *args, **kwargs): - self.request_user = kwargs.pop('request_user', None) - super().__init__(*args, **kwargs) + def validate(self, attrs): + if FavoriteSong.objects.filter( + song=attrs.get('song'), + user=attrs.get('user') + ).exists(): + raise serializers.ValidationError( + { + 'song': ['Данный трек уже добавлен в избранное'] + }) + return super().validate(attrs) + class Meta: model = FavoriteSong - fields = ('id', 'song',) + fields = ('id', 'song', 'user') def to_representation(self, instance): rep = super().to_representation(instance) rep["song"] = SongSerializer( instance.song).data - return rep + return rep class PodkastSerializer(serializers.ModelSerializer): class Meta: model = Podkast fields = '__all__' + \ No newline at end of file diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 4bef52d..87900dc 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -58,18 +58,20 @@ class PlayListViewSet(GenericViewSet): data = request.data data.update(user=request.user.pk) serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - serializer.save() - return Response(serializer.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) else: - playlist_pk = self.get_queryset().objects.filter(user=request.user.pk) + playlist_pk = self.get_queryset().filter(user=request.user.pk) name = f"Плейлист № {len(playlist_pk)+1}" data = request.data data.update(user=request.user.pk, name=name) serializer = self.get_serializer(data=request.data) - serializer.is_valid(raise_exception=True) - serializer.save() - return Response(serializer.data) + if serializer.is_valid(): + serializer.save() + return Response(serializer.data) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) @action(detail=True, methods=['post'], schema=PlayListSchema()) def update_playlist(self, request, *args, **kwargs): @@ -107,7 +109,7 @@ class PlayListViewSet(GenericViewSet): song_serializer = SongSerializer(data=data) if song_serializer.is_valid(): song_serializer.save() - song = song_serializer.data['id'] + song = song_serializer.data['id'] instance = self.get_object() instance.song.add(song) serializer = self.get_serializer(instance) @@ -117,8 +119,9 @@ class FavoriteSongViewSet(GenericViewSet): azura = AzuraCast() queryset = FavoriteSong.objects.all() serializer_class = FavoriteSongSerializer - permission_classes = (IsAuthenticated, ) + #permission_classes = (IsAuthenticated, ) lookup_field = 'azura_id' + def list(self, request): queryset = self.get_queryset() serializer = self.get_serializer(queryset, many=True, request_user=request.user) @@ -138,7 +141,6 @@ class FavoriteSongViewSet(GenericViewSet): data = None try: song = Song.objects.get(azura_id=request.data.get('azura_id')) - data = { 'song': song.pk, 'user': request.user.pk @@ -154,8 +156,9 @@ class FavoriteSongViewSet(GenericViewSet): "song": serializer.data['id'], "user": request.user.pk } + serializer = self.get_serializer(data=data) - if serializer.is_valid(): + if serializer.validate(data): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) else: @@ -164,7 +167,7 @@ class FavoriteSongViewSet(GenericViewSet): @action(detail=True, methods=['delete']) def delete_song(self, request, *args, **kwargs): try: - song = Song.objects.get(azura_id = kwargs.get('azura_id')) + song = Song.objects.get(azura_id=kwargs.get('azura_id')) queryset = self.get_queryset().get(user=request.user, song=song.pk) queryset.delete() return Response(status=status.HTTP_202_ACCEPTED) diff --git a/server/proj/news/migrations/0001_initial.py b/server/proj/news/migrations/0001_initial.py index d578486..83718e9 100644 --- a/server/proj/news/migrations/0001_initial.py +++ b/server/proj/news/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.6 on 2024-07-01 09:51 +# Generated by Django 5.0.6 on 2024-07-02 05:18 import django.utils.timezone from django.db import migrations, models diff --git a/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc index 1d6ae7a53b6c58f0675e9b484991f24c2a8e32e1..ba7c72bb7dd3f22c8622ea12a0d7d7dd7d383604 100644 GIT binary patch delta 20 ZcmZo?Z)fMu=jG*M0D@_~%^SIEm;o#K1e^c> delta 20 ZcmZo?Z)fMu=jG*M00OC+rj6V+%m64V1P%ZI diff --git a/server/proj/rubricks/migrations/0001_initial.py b/server/proj/rubricks/migrations/0001_initial.py index 7ead87e..1008158 100644 --- a/server/proj/rubricks/migrations/0001_initial.py +++ b/server/proj/rubricks/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 5.0.6 on 2024-07-01 09:51 +# Generated by Django 5.0.6 on 2024-07-02 05:18 from django.db import migrations, models diff --git a/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc index 5ea1771e77fde45197980c40e2e987c51be4ce37..5b45805159b31b9405c6ba0aa8767fa1da13596e 100644 GIT binary patch delta 20 acmX@YafE|ApO=@50SKn`HgDv%WB~v)rUcdi delta 20 acmX@YafE|ApO=@50SKgOnl^G