diff --git a/playlist/serializers/__init__.py b/playlist/serializers/__init__.py index 7c43ed2..21a6e86 100644 --- a/playlist/serializers/__init__.py +++ b/playlist/serializers/__init__.py @@ -3,3 +3,4 @@ from .artist import ArtistSerializer from .user import UserSerializer from .album import AlbumSerializer from .profile import ProfileSerializer, BackgroundSerializer +from .vote import VoteSerializer diff --git a/playlist/serializers/vote.py b/playlist/serializers/vote.py new file mode 100644 index 0000000..713ad01 --- /dev/null +++ b/playlist/serializers/vote.py @@ -0,0 +1,12 @@ +from rest_framework import serializers +from playlist.models import Vote + +class VoteSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = Vote + fields = '__all__' + extra_kwargs = { + 'url': {'view_name': 'api-vote', 'lookup_field': 'id'}, + 'track': {'view_name': 'api-track', 'lookup_field': 'id'}, + 'user': {'view_name': 'api-user', 'lookup_field': 'id'} + } diff --git a/playlist/urls.py b/playlist/urls.py index 1c22c4c..82145df 100644 --- a/playlist/urls.py +++ b/playlist/urls.py @@ -4,18 +4,24 @@ from django.conf import settings from django.conf.urls.static import static urlpatterns = [ + ### API path('api/', views.api_root, name="api-root"), path('api/track', views.TrackListView.as_view(), name="api-tracks"), path('api/track/', views.TrackDetailView.as_view(), name="api-track"), path('api/artist/', views.ArtistDetailView.as_view(), name="api-artist"), path('api/artist', views.ArtistListView.as_view(), name="api-artists"), - path('api/users', views.UserListView.as_view(), name="api-users"), + path('api/album/', views.AlbumDetailView.as_view(), name="api-album"), + path('api/album', views.AlbumListView.as_view(), name="api-albums"), + path('api/vote', views.VoteListView.as_view(), name="api-votes"), + path('api/vote/', views.VoteDetailView.as_view(), name="api-vote"), + path('api/user', views.UserListView.as_view(), name="api-users"), path('api/user/', views.UserDetailView.as_view(), name="api-user"), + path('api/user//votes', views.VoteListView.as_view(), name="api-user-votes"), path('api/profile/', views.ProfileDetailView.as_view(), name="api-profile"), path('api/profile/background', views.BackgroundListView.as_view(), name="api-backgrounds"), path('api/profile/background/', views.BackgroundDetailView.as_view(), name="api-background"), - path('api/album/', views.AlbumDetailView.as_view(), name="api-album"), - path('api/album', views.AlbumListView.as_view(), name="api-albums"), + + ### Classic path('track/', views.NominateView.as_view(), name="nominate"), path('vote/', views.VoteView.as_view(), name="vote"), path('vote/undo', views.UndoView.as_view(), name="undo"), diff --git a/playlist/views/__init__.py b/playlist/views/__init__.py index 00527f8..7a5773c 100644 --- a/playlist/views/__init__.py +++ b/playlist/views/__init__.py @@ -5,3 +5,4 @@ from .api.artist import * from .api.user import * from .api.album import * from .api.profile import * +from .api.vote import * diff --git a/playlist/views/api/vote.py b/playlist/views/api/vote.py new file mode 100644 index 0000000..15fc955 --- /dev/null +++ b/playlist/views/api/vote.py @@ -0,0 +1,27 @@ +from rest_framework.views import APIView +from rest_framework.response import Response +from rest_framework.authentication import SessionAuthentication +from rest_framework.permissions import IsAuthenticated +from playlist.models import Vote +from playlist.serializers import VoteSerializer + +class VoteListView(APIView): + authentication_classes = [SessionAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request, user_id = None): + if user_id: + votes = Vote.objects.filter(user_id=user_id) + else: + votes = Vote.objects.all() + serializer = VoteSerializer(votes, many=True, context={'request': request}) + return Response(serializer.data) + +class VoteDetailView(APIView): + authentication_classes = [SessionAuthentication] + permission_classes = [IsAuthenticated] + + def get(self, request, id): + vote = Vote.objects.get(pk=id) + serializer = VoteSerializer(vote, context={'request': request}) + return Response(serializer.data)