From 5b7f1caedbfc8e3607b5ff274f09e320fbdd1449 Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Fri, 21 Jun 2024 10:40:05 +0500 Subject: [PATCH 1/5] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=B5=D1=81=D0=BD=D0=B8=20=D0=B2=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=B9=D0=BB=D0=B8=D1=81=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/schemas.py | 32 +++++++++++++++++++++++++++++++- server/proj/audio/views.py | 25 ++++++++++++++++--------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py index 607ef1e..6442c1e 100644 --- a/server/proj/audio/schemas.py +++ b/server/proj/audio/schemas.py @@ -73,6 +73,36 @@ class PlayListSchema(AutoSchema): name='azura_id', location='form', required=False, - schema=coreschema.String(description='ID трека с азуры') + schema=coreschema.String(description='ID трека с Азуры') + ), + coreapi.Field( + name='title', + location='form', + required=False, + schema=coreschema.String(description='Название трека') + ), + coreapi.Field( + name='artist', + location='form', + required=False, + schema=coreschema.String(description='Исполнитель') + ), + coreapi.Field( + name='album', + location='form', + required=False, + schema=coreschema.String(description='Альбом трека') + ), + coreapi.Field( + name='genre', + location='form', + required=False, + schema=coreschema.String(description='Жанр трека') + ), + coreapi.Field( + name='art', + location='form', + required=False, + schema=coreschema.String(description='Изображение трека') ), ] \ No newline at end of file diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index c17aaa5..8d04bd2 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -72,13 +72,23 @@ class PlayListViewSet(GenericViewSet): @action(detail=False, methods=['post'], schema=PlayListSchema()) def add_to_playlist(self, request): + song = None try: - song = list(Song.objects.filter(azura_id=request.data.get('azura_id')).values_list('pk', flat=True)) + song = Song.objects.get(azura_id=request.data.get('azura_id')).pk except ObjectDoesNotExist: - return Response( - {'detail': 'Песни не существует', 'error': {'Song': 'Песни не существует'}}, - status=status.HTTP_404_NOT_FOUND) - + file_url = f"http://82.97.242.49:10084/api/station/it-radio/file/{request.data['azura_id']}" + API_KEY = "49226d3488aac3f5:18d88659c6c1c5e131a0ce0a94d55235" + headers = { + "Authorization": f"Bearer {API_KEY}" + } + response = requests.get(file_url, headers=headers) + data = request.data + file_play = f"http://82.97.242.49:10084/api/station/it-radio/file/{response.json()['unique_id']}/play" + data.update(unique_id=file_play) + song_serializer = SongSerializer(data=data) + if song_serializer.is_valid(): + song_serializer.save() + song = song_serializer.data.get('id') try: instance = PlayList.objects.get(pk=request.data.get('playlist_id')) except ObjectDoesNotExist: @@ -86,7 +96,7 @@ class PlayListViewSet(GenericViewSet): {'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}}, status=status.HTTP_404_NOT_FOUND) - songs = list(instance.song.all().values_list('pk', flat=True))+song + songs = list(instance.song.all().values_list('pk', flat=True)) + [song] data = { 'playlist_id': request.data.get('playlist_id'), 'song': songs @@ -204,9 +214,6 @@ class SongViewSet(GenericViewSet): for i in response.json(): i['azura_id'] = i.pop('song_id') data.append(i) - - - return Response(data, status=status.HTTP_200_OK) From e5b103151f212cf5f03c5662ffe39d36c248ca28 Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Fri, 21 Jun 2024 11:44:21 +0500 Subject: [PATCH 2/5] =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D0=B2=20=D1=81=20=D0=BF=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=D0=BB=D0=B8=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/views.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 8d04bd2..c5e7282 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -70,6 +70,19 @@ class PlayListViewSet(GenericViewSet): {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, status=status.HTTP_404_NOT_FOUND) + @action(detail=False, methods=['post'], schema=PlayListSchema()) + def delete_song_with_playlist(self, request): + try: + song = Song.objects.get(azura_id=request.data.get('azura_id')) + item = PlayList.objects.get(user=request.user, pk=request.data.get('playlist_id')) + 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) + + @action(detail=False, methods=['post'], schema=PlayListSchema()) def add_to_playlist(self, request): song = None From f165fbd16d9561bfb2971de8b87eff33047b43ae Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Fri, 21 Jun 2024 15:54:28 +0500 Subject: [PATCH 3/5] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D1=82=D1=8C=20?= =?UTF-8?q?=D0=BB=D0=BE=D0=B3=D0=BE?= 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 | 3 +-- server/proj/audio/schemas.py | 6 ++++++ server/proj/audio/serializers.py | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/server/proj/audio/admin.py b/server/proj/audio/admin.py index 3f670a5..77f564c 100644 --- a/server/proj/audio/admin.py +++ b/server/proj/audio/admin.py @@ -12,4 +12,4 @@ class FavoriteSongAdmin(admin.ModelAdmin): @admin.register(PlayList) class PlayListAdmin(admin.ModelAdmin): - list_display = ('id', 'name', 'user', 'art') + list_display = ('id', 'name', 'user', 'playlist_art') diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index b7ca203..35e7c17 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -43,9 +43,8 @@ class PlayList(models.Model): name = models.CharField('Название плейлиста', max_length=50, blank=True, null=True) song = models.ManyToManyField(Song, blank=True, null=True) user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE) - art = models.ImageField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/") + playlist_art = models.FileField('Изображение плейлиста', blank=True, null=True, upload_to="playlist_images/") - class Meta: verbose_name = 'Плейлисты' verbose_name_plural = 'Плейлисты' \ No newline at end of file diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py index 6442c1e..e47a7d5 100644 --- a/server/proj/audio/schemas.py +++ b/server/proj/audio/schemas.py @@ -69,6 +69,12 @@ class PlayListSchema(AutoSchema): required=False, schema=coreschema.Integer(description='ID плейлиста') ), + coreapi.Field( + name='playlist_art', + location='form', + required=False, + schema=coreschema.Integer(description='Обложка плейлиста') + ), coreapi.Field( name='azura_id', location='form', diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index 317777c..5377488 100644 --- a/server/proj/audio/serializers.py +++ b/server/proj/audio/serializers.py @@ -9,7 +9,7 @@ class SongSerializer(serializers.ModelSerializer): class PlayListSerializer(serializers.ModelSerializer): class Meta: model = PlayList - fields = ('id', 'name', 'song', 'user') + fields = ('id', 'name', 'song', 'user', 'playlist_art') def to_representation(self, instance): rep = super().to_representation(instance) From e6dfee655fdc2fdc42b3d7b7a5852988a0e065f7 Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Fri, 21 Jun 2024 16:20:42 +0500 Subject: [PATCH 4/5] =?UTF-8?q?=D0=BD=D0=B0=D0=BF=D0=B8=D1=81=D0=B0=D0=BB?= =?UTF-8?q?=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20update=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BF=D0=BB=D0=B5=D0=B9=D0=BB=D0=B8=D1=81=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/audio/views.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index c5e7282..56e2d12 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -59,6 +59,19 @@ class PlayListViewSet(GenericViewSet): serializer.save() return Response(serializer.data) + @action(detail=False, methods=['post'], schema=PlayListSchema()) + def update_playlist(self, request): + try: + instance = PlayList.objects.get(pk=request.data['playlist_id'], user=request.user.pk) + serializer = self.get_serializer(data=request.data, partial=True, instance=instance) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data) + except ObjectDoesNotExist: + return Response( + {'detail': 'Объекта не существует', 'error': {'PlayList': 'Объекта не существует'}}, + status=status.HTTP_404_NOT_FOUND) + @action(detail=False, methods=['post'], schema=PlayListSchema()) def delete_playlist(self, request): try: From 7e089fd43a6752349dd25257c4efffe1d3a6c92d Mon Sep 17 00:00:00 2001 From: Mike0001-droid Date: Fri, 21 Jun 2024 16:28:44 +0500 Subject: [PATCH 5/5] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B0=D0=B4=D1=80=D0=B5=D1=81=20=D0=BF=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B2=20=D0=B0=D0=BB=D0=BE=D0=B2=D0=B5=D0=B4=20=D1=85?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/proj/conf/settings/production.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/proj/conf/settings/production.py b/server/proj/conf/settings/production.py index a17a09c..7600045 100644 --- a/server/proj/conf/settings/production.py +++ b/server/proj/conf/settings/production.py @@ -2,7 +2,7 @@ import sys from .base import * DEBUG = False -ALLOWED_HOSTS = ['82.97.242.49'] +ALLOWED_HOSTS = ['82.97.242.49', 'itradio.team'] # Database # https://docs.djangoproject.com/en/3.2/ref/settings/#databases