adds vote api

This commit is contained in:
2025-05-20 23:18:57 +02:00
parent ddb99f5056
commit 501044eef2
5 changed files with 50 additions and 3 deletions
+1
View File
@@ -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
+12
View File
@@ -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
View File
@@ -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"),
+1
View File
@@ -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 *
+27
View File
@@ -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)