Add making song requests from the API.
This commit is contained in:
parent
de74f17fb0
commit
22f3aeb693
2 changed files with 21 additions and 1 deletions
|
@ -2,7 +2,7 @@ from django.urls import path
|
||||||
|
|
||||||
from rest_framework.routers import DefaultRouter
|
from rest_framework.routers import DefaultRouter
|
||||||
|
|
||||||
from api.views.controls import JustPlayed, NextRequest
|
from api.views.controls import JustPlayed, MakeRequest, NextRequest
|
||||||
from api.views.radio import (AlbumViewSet, ArtistViewSet,
|
from api.views.radio import (AlbumViewSet, ArtistViewSet,
|
||||||
GameViewSet, SongViewSet)
|
GameViewSet, SongViewSet)
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ router.register(r'songs', SongViewSet, base_name='song')
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('next/', NextRequest.as_view()),
|
path('next/', NextRequest.as_view()),
|
||||||
path('played/', JustPlayed.as_view()),
|
path('played/', JustPlayed.as_view()),
|
||||||
|
path('request/', MakeRequest.as_view()),
|
||||||
]
|
]
|
||||||
|
|
||||||
urlpatterns += router.urls
|
urlpatterns += router.urls
|
||||||
|
|
|
@ -5,10 +5,12 @@ from rest_framework import status
|
||||||
from rest_framework.authentication import (SessionAuthentication,
|
from rest_framework.authentication import (SessionAuthentication,
|
||||||
TokenAuthentication)
|
TokenAuthentication)
|
||||||
from rest_framework.generics import RetrieveAPIView
|
from rest_framework.generics import RetrieveAPIView
|
||||||
|
from rest_framework.permissions import IsAuthenticated
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
from core.utils import get_setting
|
from core.utils import get_setting
|
||||||
|
from profiles.exceptions import MakeRequestError
|
||||||
from profiles.models import RadioProfile, SongRequest
|
from profiles.models import RadioProfile, SongRequest
|
||||||
from radio.models import Song
|
from radio.models import Song
|
||||||
from ..permissions import IsAdminOrReadOnly, IsDJ
|
from ..permissions import IsAdminOrReadOnly, IsDJ
|
||||||
|
@ -64,3 +66,20 @@ class NextRequest(RetrieveAPIView):
|
||||||
|
|
||||||
serializer = GetRequestSerializer(next_play, many=False)
|
serializer = GetRequestSerializer(next_play, many=False)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
|
|
||||||
|
class MakeRequest(APIView):
|
||||||
|
authentication_classes = [SessionAuthentication, TokenAuthentication]
|
||||||
|
permission_classes = [IsAuthenticated]
|
||||||
|
|
||||||
|
def post(self, request, format=None):
|
||||||
|
serializer = MakeRequestSerializer(data=request.data)
|
||||||
|
if serializer.is_valid():
|
||||||
|
profile = RadioProfile.objects.get(user=request.user)
|
||||||
|
try:
|
||||||
|
profile.make_request(serializer.data['song'])
|
||||||
|
except MakeRequestError as e:
|
||||||
|
return Response({'detail': str(e)},
|
||||||
|
status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
return Response(serializer.data)
|
||||||
|
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
Loading…
Reference in a new issue