From c12cea204bd96f6cabe74b7a7db928802d45452a Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Tue, 2 Jul 2024 18:14:32 +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=D1=81=D1=85=D0=B5=D0=BC=D1=8B=20=D0=BC=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/schemas.py | 20 ++++++- server/proj/audio/serializers.py | 2 + server/proj/audio/services/service.py | 4 +- server/proj/audio/views.py | 53 ++++++++++-------- .../__pycache__/__init__.cpython-310.pyc | Bin 196 -> 196 bytes .../settings/__pycache__/base.cpython-310.pyc | Bin 3458 -> 3448 bytes server/proj/conf/settings/base.py | 5 +- 7 files changed, 52 insertions(+), 32 deletions(-) diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py index 7c723a2..b733a5d 100644 --- a/server/proj/audio/schemas.py +++ b/server/proj/audio/schemas.py @@ -56,7 +56,8 @@ class DeleteSongSchema(AutoSchema): class PlayListSchema(AutoSchema): def get_serializer_fields(self, path, method): - return [ + if path.endswith('/create_playlist/'): + return [ coreapi.Field( name='name', location='form', @@ -69,6 +70,18 @@ class PlayListSchema(AutoSchema): required=False, schema=coreschema.Integer(description='Обложка плейлиста') ), + ] + if path.endswith('/update_playlist/') or path.endswith('/delete_song_with_playlist/'): + return [ + coreapi.Field( + name='azura_id', + location='form', + required=False, + schema=coreschema.String(description='ID трека с Азуры') + ), + ] + if path.endswith('/add_to_playlist/'): + return [ coreapi.Field( name='azura_id', location='form', @@ -105,4 +118,7 @@ class PlayListSchema(AutoSchema): required=False, schema=coreschema.String(description='Изображение трека') ), - ] \ No newline at end of file + ] + return [] + + \ No newline at end of file diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index 5c5295a..b711e4d 100644 --- a/server/proj/audio/serializers.py +++ b/server/proj/audio/serializers.py @@ -8,6 +8,7 @@ class SongSerializer(serializers.ModelSerializer): class PlayListSerializer(serializers.ModelSerializer): def validate(self, attrs): + if PlayList.objects.filter( name=attrs.get('name'), user=attrs.get('user') @@ -17,6 +18,7 @@ class PlayListSerializer(serializers.ModelSerializer): 'playlist': ['Данный плейлист уже существует'] }) return super().validate(attrs) + class Meta: model = PlayList fields = ('id', 'name', 'song', 'user', 'playlist_art') diff --git a/server/proj/audio/services/service.py b/server/proj/audio/services/service.py index c54ac0c..c4ce086 100644 --- a/server/proj/audio/services/service.py +++ b/server/proj/audio/services/service.py @@ -16,8 +16,8 @@ class AzuraCast: data.append(i) return data - def add_to_playlist(self, azura_id, data): - response = self.azura_requests.get_song(azura_id) + def add_to_playlist(self, data): + response = self.azura_requests.get_song(data['azura_id']) file_play = response.json()['unique_id'] data.update(unique_id=file_play) return data diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index cada5e2..007252f 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -26,9 +26,8 @@ class PodkastViewSet(GenericViewSet): serializer = self.get_serializer(queryset) return Response(serializer.data, status=status.HTTP_200_OK) except ObjectDoesNotExist: - return Response( - {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, - status=status.HTTP_404_NOT_FOUND) + return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, + status=status.HTTP_404_NOT_FOUND) class PlayListViewSet(GenericViewSet): @@ -48,9 +47,8 @@ class PlayListViewSet(GenericViewSet): serializer = self.get_serializer(queryset) return Response(serializer.data, status=status.HTTP_200_OK) except ObjectDoesNotExist: - return Response( - {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, - status=status.HTTP_404_NOT_FOUND) + return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, + status=status.HTTP_404_NOT_FOUND) @action(detail=False, methods=['post'], schema=PlayListSchema()) def create_playlist(self, request): @@ -77,11 +75,12 @@ class PlayListViewSet(GenericViewSet): def update_playlist(self, request, *args, **kwargs): instance = self.get_object() serializer = self.get_serializer(data=request.data, partial=True, instance=instance) - serializer.is_valid(raise_exception=True) - serializer.save() - return Response(serializer.data) + if serializer.is_valid(raise_exception=True): + serializer.save() + return Response(serializer.data) + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) - @action(detail=True, methods=['post']) + @action(detail=True, methods=['delete']) def delete_playlist(self, request, *args, **kwargs): item = self.get_object() item.delete() @@ -95,25 +94,30 @@ class PlayListViewSet(GenericViewSet): item.song.remove(song) return Response({'detail': 'Объект удалён'}, status=status.HTTP_200_OK) except ObjectDoesNotExist: - return Response( - {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, - status=status.HTTP_404_NOT_FOUND) - + return Response({'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, + status=status.HTTP_404_NOT_FOUND) + @action(detail=True, methods=['post'], schema=PlayListSchema()) def add_to_playlist(self, request, *args, **kwargs): + instance = self.get_object() + song = None try: + song = Song.objects.get(azura_id=request.data.get('azura_id')).pk except ObjectDoesNotExist: - data = self.azura.add_to_playlist(request.data['azura_id'], request.data) + data = self.azura.add_to_playlist(request.data) song_serializer = SongSerializer(data=data) if song_serializer.is_valid(): song_serializer.save() song = song_serializer.data['id'] - instance = self.get_object() + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) instance.song.add(song) serializer = self.get_serializer(instance) return Response(serializer.data) + + class FavoriteSongViewSet(GenericViewSet): azura = AzuraCast() @@ -152,13 +156,15 @@ class FavoriteSongViewSet(GenericViewSet): serializer = SongSerializer(data=data) if serializer.is_valid(): serializer.save() - data = { - "song": serializer.data['id'], - "user": request.user.pk - } + data = { + "song": serializer.data['id'], + "user": request.user.pk + } + else: + return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) serializer = self.get_serializer(data=data) - if serializer.validate(data): + if serializer.is_valid(data): serializer.save() return Response(serializer.data, status=status.HTTP_201_CREATED) else: @@ -172,9 +178,8 @@ class FavoriteSongViewSet(GenericViewSet): queryset.delete() return Response(status=status.HTTP_202_ACCEPTED) except ObjectDoesNotExist: - return Response( - {'detail': 'Объекта не существует', 'error': {'Song': 'Объекта не существует'}}, - status=status.HTTP_404_NOT_FOUND) + return Response({'detail': 'Объекта не существует', 'error': {'Song': 'Объекта не существует'}}, + status=status.HTTP_404_NOT_FOUND) class SongViewSet(GenericViewSet): diff --git a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc index 10a15ecee7db715d15edf9b3448c21d05eb1c716..b3a44346197ff75bf6fbd2340c967fbccca00aaa 100644 GIT binary patch delta 21 bcmX@Yc!ZHRpO=@50SIDVG^dG7dGUvHfmcj8XKkV2P4}*7FH%Emj5iwEI=L$697*;9&Z2u diff --git a/server/proj/conf/settings/base.py b/server/proj/conf/settings/base.py index f94e04c..b928a6a 100644 --- a/server/proj/conf/settings/base.py +++ b/server/proj/conf/settings/base.py @@ -142,6 +142,7 @@ REST_FRAMEWORK = { 'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.coreapi.AutoSchema' } +CORS_ALLOW_CREDENTIALS = True CORS_ALLOWED_ORIGINS = [ 'http://localhost:5173', # Adjust the port if your Vue app is served on a different one 'http://127.0.0.1:5173', @@ -154,10 +155,6 @@ SIMPLE_JWT = { 'REFRESH_TOKEN_LIFETIME': timedelta(days=30), } -CORS_ALLOW_CREDENTIALS = True -CORS_ALLOWED_ORIGINS = [ - 'http://localhost:5173', -] MIN_LEN_PASSWORD = 8 ###AZURACAST CONFIG###