From 22f3aeb6939c1e455eed8724f7c7a4b99ea34876 Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Fri, 30 Mar 2018 17:22:18 -0400 Subject: [PATCH] Add making song requests from the API. --- savepointradio/api/urls.py | 3 ++- savepointradio/api/views/controls.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/savepointradio/api/urls.py b/savepointradio/api/urls.py index 3302c56..8ba2f3d 100644 --- a/savepointradio/api/urls.py +++ b/savepointradio/api/urls.py @@ -2,7 +2,7 @@ from django.urls import path 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, GameViewSet, SongViewSet) @@ -17,6 +17,7 @@ router.register(r'songs', SongViewSet, base_name='song') urlpatterns = [ path('next/', NextRequest.as_view()), path('played/', JustPlayed.as_view()), + path('request/', MakeRequest.as_view()), ] urlpatterns += router.urls diff --git a/savepointradio/api/views/controls.py b/savepointradio/api/views/controls.py index cd58883..685ad64 100644 --- a/savepointradio/api/views/controls.py +++ b/savepointradio/api/views/controls.py @@ -5,10 +5,12 @@ from rest_framework import status from rest_framework.authentication import (SessionAuthentication, TokenAuthentication) from rest_framework.generics import RetrieveAPIView +from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from rest_framework.views import APIView from core.utils import get_setting +from profiles.exceptions import MakeRequestError from profiles.models import RadioProfile, SongRequest from radio.models import Song from ..permissions import IsAdminOrReadOnly, IsDJ @@ -64,3 +66,20 @@ class NextRequest(RetrieveAPIView): serializer = GetRequestSerializer(next_play, many=False) 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)