adds vote api
This commit is contained in:
@@ -3,3 +3,4 @@ from .artist import ArtistSerializer
|
|||||||
from .user import UserSerializer
|
from .user import UserSerializer
|
||||||
from .album import AlbumSerializer
|
from .album import AlbumSerializer
|
||||||
from .profile import ProfileSerializer, BackgroundSerializer
|
from .profile import ProfileSerializer, BackgroundSerializer
|
||||||
|
from .vote import VoteSerializer
|
||||||
|
|||||||
@@ -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'}
|
||||||
|
}
|
||||||
+9
-3
@@ -4,18 +4,24 @@ from django.conf import settings
|
|||||||
from django.conf.urls.static import static
|
from django.conf.urls.static import static
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
### API
|
||||||
path('api/', views.api_root, name="api-root"),
|
path('api/', views.api_root, name="api-root"),
|
||||||
path('api/track', views.TrackListView.as_view(), name="api-tracks"),
|
path('api/track', views.TrackListView.as_view(), name="api-tracks"),
|
||||||
path('api/track/<id>', views.TrackDetailView.as_view(), name="api-track"),
|
path('api/track/<id>', views.TrackDetailView.as_view(), name="api-track"),
|
||||||
path('api/artist/<id>', views.ArtistDetailView.as_view(), name="api-artist"),
|
path('api/artist/<id>', views.ArtistDetailView.as_view(), name="api-artist"),
|
||||||
path('api/artist', views.ArtistListView.as_view(), name="api-artists"),
|
path('api/artist', views.ArtistListView.as_view(), name="api-artists"),
|
||||||
path('api/users', views.UserListView.as_view(), name="api-users"),
|
path('api/album/<id>', 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/<id>', views.VoteDetailView.as_view(), name="api-vote"),
|
||||||
|
path('api/user', views.UserListView.as_view(), name="api-users"),
|
||||||
path('api/user/<int:id>', views.UserDetailView.as_view(), name="api-user"),
|
path('api/user/<int:id>', views.UserDetailView.as_view(), name="api-user"),
|
||||||
|
path('api/user/<int:user_id>/votes', views.VoteListView.as_view(), name="api-user-votes"),
|
||||||
path('api/profile/<int:id>', views.ProfileDetailView.as_view(), name="api-profile"),
|
path('api/profile/<int:id>', views.ProfileDetailView.as_view(), name="api-profile"),
|
||||||
path('api/profile/background', views.BackgroundListView.as_view(), name="api-backgrounds"),
|
path('api/profile/background', views.BackgroundListView.as_view(), name="api-backgrounds"),
|
||||||
path('api/profile/background/<int:id>', views.BackgroundDetailView.as_view(), name="api-background"),
|
path('api/profile/background/<int:id>', views.BackgroundDetailView.as_view(), name="api-background"),
|
||||||
path('api/album/<id>', 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('track/', views.NominateView.as_view(), name="nominate"),
|
||||||
path('vote/', views.VoteView.as_view(), name="vote"),
|
path('vote/', views.VoteView.as_view(), name="vote"),
|
||||||
path('vote/undo', views.UndoView.as_view(), name="undo"),
|
path('vote/undo', views.UndoView.as_view(), name="undo"),
|
||||||
|
|||||||
@@ -5,3 +5,4 @@ from .api.artist import *
|
|||||||
from .api.user import *
|
from .api.user import *
|
||||||
from .api.album import *
|
from .api.album import *
|
||||||
from .api.profile import *
|
from .api.profile import *
|
||||||
|
from .api.vote import *
|
||||||
|
|||||||
@@ -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)
|
||||||
Reference in New Issue
Block a user