diff --git a/server/proj/audio/admin.py b/server/proj/audio/admin.py index 6d86d8b..82c06fd 100644 --- a/server/proj/audio/admin.py +++ b/server/proj/audio/admin.py @@ -1,5 +1,5 @@ from django.contrib import admin -from .models import Song, FavoriteSong +from .models import Song, FavoriteSong, PlayList @admin.register(Song) class SongAdmin(admin.ModelAdmin): @@ -9,3 +9,7 @@ class SongAdmin(admin.ModelAdmin): @admin.register(FavoriteSong) class FavoriteSongAdmin(admin.ModelAdmin): list_display = ('id', 'song', 'user') + +@admin.register(PlayList) +class PlayListAdmin(admin.ModelAdmin): + list_display = ('id', 'name', 'user',) diff --git a/server/proj/audio/models.py b/server/proj/audio/models.py index 46cada6..5a52c91 100644 --- a/server/proj/audio/models.py +++ b/server/proj/audio/models.py @@ -36,3 +36,9 @@ class FavoriteSong(models.Model): verbose_name = 'Избранные Треки' unique_together = ('song', 'user') verbose_name_plural = 'Избранные Треки' + + +class PlayList(models.Model): + name = models.CharField('Название плейлиста', max_length=50) + song = models.ManyToManyField(Song) + user = models.ForeignKey(MyUser, verbose_name='Пользователь', on_delete=models.CASCADE, blank=True, null=True) \ No newline at end of file diff --git a/server/proj/audio/serializers.py b/server/proj/audio/serializers.py index 751389f..5e75c38 100644 --- a/server/proj/audio/serializers.py +++ b/server/proj/audio/serializers.py @@ -1,11 +1,24 @@ from rest_framework import serializers -from .models import Song, FavoriteSong +from .models import Song, FavoriteSong, PlayList class SongSerializer(serializers.ModelSerializer): class Meta: model = Song fields = ('id', 'unique_id', 'azura_id', 'title', 'artist', 'album', 'genre', 'art') +class PlayListSerializer(serializers.ModelSerializer): + class Meta: + model = PlayList + fields = ('id', 'name', 'song') + + def to_representation(self, instance): + rep = super().to_representation(instance) + rep["song"] = SongSerializer( + instance.song.all(), many=True).data + return rep + + + class FavoriteSongSerializer(serializers.ModelSerializer): class Meta: diff --git a/server/proj/audio/views.py b/server/proj/audio/views.py index 4767e1b..0e2d551 100644 --- a/server/proj/audio/views.py +++ b/server/proj/audio/views.py @@ -10,8 +10,28 @@ import requests from django.http import HttpResponse from .schemas import SongSchema, DeleteSongSchema -from .models import Song, FavoriteSong -from .serializers import SongSerializer, FavoriteSongSerializer +from .models import Song, FavoriteSong, PlayList +from .serializers import SongSerializer, FavoriteSongSerializer, PlayListSerializer + +class PlayListViewSet(GenericViewSet): + queryset = PlayList + serializer_class = PlayListSerializer + permission_classes = (IsAuthenticated,) + def list(self, request): + queryset = self.get_queryset().objects.filter(user=request.user) + serializer = self.get_serializer(queryset, many=True) + return Response(serializer.data, status=status.HTTP_200_OK) + + def retrieve(self, request, pk): + try: + queryset = self.get_queryset().objects.get(pk=pk, user=request.user) + 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) + + + class SongViewSet(GenericViewSet): queryset = Song.objects.all() diff --git a/server/proj/conf/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/__pycache__/__init__.cpython-310.pyc index dd307ba..a8cc239 100644 Binary files a/server/proj/conf/__pycache__/__init__.cpython-310.pyc and b/server/proj/conf/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/conf/__pycache__/urls.cpython-310.pyc b/server/proj/conf/__pycache__/urls.cpython-310.pyc index d25e608..087f3a1 100644 Binary files a/server/proj/conf/__pycache__/urls.cpython-310.pyc and b/server/proj/conf/__pycache__/urls.cpython-310.pyc differ diff --git a/server/proj/conf/__pycache__/wsgi.cpython-310.pyc b/server/proj/conf/__pycache__/wsgi.cpython-310.pyc index db88859..522b0b5 100644 Binary files a/server/proj/conf/__pycache__/wsgi.cpython-310.pyc and b/server/proj/conf/__pycache__/wsgi.cpython-310.pyc differ diff --git a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc index 3ba39e6..c272da1 100644 Binary files a/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/conf/settings/__pycache__/base.cpython-310.pyc b/server/proj/conf/settings/__pycache__/base.cpython-310.pyc index d21da59..b4d19aa 100644 Binary files a/server/proj/conf/settings/__pycache__/base.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/base.cpython-310.pyc differ diff --git a/server/proj/conf/settings/__pycache__/development.cpython-310.pyc b/server/proj/conf/settings/__pycache__/development.cpython-310.pyc index 6dd63af..9786e1e 100644 Binary files a/server/proj/conf/settings/__pycache__/development.cpython-310.pyc and b/server/proj/conf/settings/__pycache__/development.cpython-310.pyc differ diff --git a/server/proj/conf/urls.py b/server/proj/conf/urls.py index f439fab..2bc3e01 100644 --- a/server/proj/conf/urls.py +++ b/server/proj/conf/urls.py @@ -12,12 +12,13 @@ from userProfile.views import TeamViewSet from django.conf import settings from rubricks.views import RubricViewSet from api.views import FetchAndServeFile -from audio.views import SongViewSet +from audio.views import SongViewSet, PlayListViewSet router = routers.DefaultRouter() router.register(r'teams', TeamViewSet, basename='teams') router.register(r'rubriks', RubricViewSet, basename='rubriks') +router.register(r'playlists', PlayListViewSet, basename='playlists') router.register(r'song', SongViewSet, basename='song') router.register(r'fetchandservefile', FetchAndServeFile, basename='fetchandservefile') diff --git a/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc b/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc index 5da63d0..702abf6 100644 Binary files a/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc and b/server/proj/loginApi/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/admin.cpython-310.pyc b/server/proj/loginApi/__pycache__/admin.cpython-310.pyc index 0784dd2..ff072f8 100644 Binary files a/server/proj/loginApi/__pycache__/admin.cpython-310.pyc and b/server/proj/loginApi/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/apps.cpython-310.pyc b/server/proj/loginApi/__pycache__/apps.cpython-310.pyc index 052a141..c65b06e 100644 Binary files a/server/proj/loginApi/__pycache__/apps.cpython-310.pyc and b/server/proj/loginApi/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/loginApi/__pycache__/models.cpython-310.pyc b/server/proj/loginApi/__pycache__/models.cpython-310.pyc index bc05eb1..ed5835f 100644 Binary files a/server/proj/loginApi/__pycache__/models.cpython-310.pyc and b/server/proj/loginApi/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc index d72607b..a369094 100644 Binary files a/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/loginApi/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/__init__.cpython-310.pyc b/server/proj/news/__pycache__/__init__.cpython-310.pyc index c158afd..8d9c649 100644 Binary files a/server/proj/news/__pycache__/__init__.cpython-310.pyc and b/server/proj/news/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/admin.cpython-310.pyc b/server/proj/news/__pycache__/admin.cpython-310.pyc index 68134d6..332b920 100644 Binary files a/server/proj/news/__pycache__/admin.cpython-310.pyc and b/server/proj/news/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/apps.cpython-310.pyc b/server/proj/news/__pycache__/apps.cpython-310.pyc index f3907b4..86d2b9c 100644 Binary files a/server/proj/news/__pycache__/apps.cpython-310.pyc and b/server/proj/news/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/news/__pycache__/models.cpython-310.pyc b/server/proj/news/__pycache__/models.cpython-310.pyc index 01a2360..b9018f0 100644 Binary files a/server/proj/news/__pycache__/models.cpython-310.pyc and b/server/proj/news/__pycache__/models.cpython-310.pyc differ 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 eeca414..44ca0d9 100644 Binary files a/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/news/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc index e63e6f9..f0dd9c9 100644 Binary files a/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/news/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc b/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc index 07dccd4..3ff2fc6 100644 Binary files a/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc and b/server/proj/rubricks/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/admin.cpython-310.pyc b/server/proj/rubricks/__pycache__/admin.cpython-310.pyc index 7c5b308..219e961 100644 Binary files a/server/proj/rubricks/__pycache__/admin.cpython-310.pyc and b/server/proj/rubricks/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/apps.cpython-310.pyc b/server/proj/rubricks/__pycache__/apps.cpython-310.pyc index 26f32e5..b04edd3 100644 Binary files a/server/proj/rubricks/__pycache__/apps.cpython-310.pyc and b/server/proj/rubricks/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/rubricks/__pycache__/models.cpython-310.pyc b/server/proj/rubricks/__pycache__/models.cpython-310.pyc index 01e946a..e76dff3 100644 Binary files a/server/proj/rubricks/__pycache__/models.cpython-310.pyc and b/server/proj/rubricks/__pycache__/models.cpython-310.pyc differ 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 86535ce..d9a9d9d 100644 Binary files a/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/rubricks/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc index 50875f3..ae68d5e 100644 Binary files a/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/rubricks/migrations/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc index 7914c4d..522c76a 100644 Binary files a/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc and b/server/proj/userProfile/__pycache__/__init__.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/admin.cpython-310.pyc b/server/proj/userProfile/__pycache__/admin.cpython-310.pyc index 01a5a71..5f26136 100644 Binary files a/server/proj/userProfile/__pycache__/admin.cpython-310.pyc and b/server/proj/userProfile/__pycache__/admin.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/apps.cpython-310.pyc b/server/proj/userProfile/__pycache__/apps.cpython-310.pyc index b65ddb5..03d8c35 100644 Binary files a/server/proj/userProfile/__pycache__/apps.cpython-310.pyc and b/server/proj/userProfile/__pycache__/apps.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/models.cpython-310.pyc b/server/proj/userProfile/__pycache__/models.cpython-310.pyc index 3bac73e..cc60358 100644 Binary files a/server/proj/userProfile/__pycache__/models.cpython-310.pyc and b/server/proj/userProfile/__pycache__/models.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc b/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc index a222c8e..75b8fb8 100644 Binary files a/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc and b/server/proj/userProfile/__pycache__/serializers.cpython-310.pyc differ diff --git a/server/proj/userProfile/__pycache__/views.cpython-310.pyc b/server/proj/userProfile/__pycache__/views.cpython-310.pyc index 2217fab..79d95e7 100644 Binary files a/server/proj/userProfile/__pycache__/views.cpython-310.pyc and b/server/proj/userProfile/__pycache__/views.cpython-310.pyc differ diff --git a/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc b/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc index 0a6ca17..23574b5 100644 Binary files a/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc and b/server/proj/userProfile/migrations/__pycache__/0001_initial.cpython-310.pyc differ diff --git a/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc b/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc index 9c2bcc5..4824d08 100644 Binary files a/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc and b/server/proj/userProfile/migrations/__pycache__/__init__.cpython-310.pyc differ