diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 6cffd0f..a9f1794 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -41,7 +41,7 @@ class FavoriteSong(models.Model): class PlayList(models.Model): name = models.CharField('Название плейлиста', max_length=50) song = models.ManyToManyField(Song, blank=True, null=True) - user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE, 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/") diff --git a/server/proj/audio/schemas.py b/server/proj/audio/schemas.py index b879b6f..607ef1e 100644 --- a/server/proj/audio/schemas.py +++ b/server/proj/audio/schemas.py @@ -57,6 +57,12 @@ class DeleteSongSchema(AutoSchema): class PlayListSchema(AutoSchema): def get_serializer_fields(self, path, method): return [ + coreapi.Field( + name='name', + location='form', + required=False, + schema=coreschema.String(description='Название плейлиста') + ), coreapi.Field( name='playlist_id', location='form', diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index 5e75c38..317777c 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') + fields = ('id', 'name', 'song', 'user') def to_representation(self, instance): rep = super().to_representation(instance) diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 2d4f488..e0d8677 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -28,19 +28,45 @@ class PlayListViewSet(GenericViewSet): serializer = self.get_serializer(queryset) return Response(serializer.data, status=status.HTTP_200_OK) except ObjectDoesNotExist: - return Response({"error": 'Объекта не существует'}, 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): + data = request.data + data.update(user=request.user.pk) + serializer = PlayListSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + serializer.save() + return Response(serializer.data) + + @action(detail=False, methods=['post'], schema=PlayListSchema()) + def delete_playlist(self, request): + try: + item = PlayList.objects.get(user=request.user, pk=request.data.get('playlist_id')) + item.delete() + return Response(status=status.HTTP_202_ACCEPTED) + 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): try: song = list(Song.objects.filter(azura_id=request.data.get('azura_id')).values_list('pk', flat=True)) except ObjectDoesNotExist: - return Response({"error": 'Песни не существует'}, status=status.HTTP_404_NOT_FOUND) + return Response( + {'detail': 'Песни не существует', 'error': {'Song': 'Песни не существует'}}, + status=status.HTTP_404_NOT_FOUND) try: instance = PlayList.objects.get(pk=request.data.get('playlist_id')) except ObjectDoesNotExist: - return Response({"error": 'Плейлиста не существует'}, status=status.HTTP_404_NOT_FOUND) + return Response( + {'detail': 'Плейлиста не существует', 'error': {'PlayList': 'Плейлиста не существует'}}, + status=status.HTTP_404_NOT_FOUND) songs = list(instance.song.all().values_list('pk', flat=True))+song data = {