From 068e9e05a8ccc096fead09c4ce96b05d319941c0 Mon Sep 17 00:00:00 2001 From: Josh Washburne Date: Thu, 5 Apr 2018 16:23:01 -0400 Subject: [PATCH] Add Song Request History functionality to the API. --- savepointradio/api/serializers/profiles.py | 18 +++++++++++------- savepointradio/api/urls.py | 3 ++- savepointradio/api/views/profiles.py | 10 ++++++++-- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/savepointradio/api/serializers/profiles.py b/savepointradio/api/serializers/profiles.py index d6aef38..a465fd2 100644 --- a/savepointradio/api/serializers/profiles.py +++ b/savepointradio/api/serializers/profiles.py @@ -2,18 +2,13 @@ from django.contrib.auth import get_user_model from rest_framework.serializers import ModelSerializer -from profiles.models import (RadioProfile, SongRequest) +from profiles.models import RadioProfile, SongRequest +from .radio import BasicSongRetrieveSerializer User = get_user_model() -class HistorySerializer(ModelSerializer): - class Meta: - model = SongRequest - fields = ('created_date', 'played_at', 'profile', 'song') - - class BasicUserSerializer(ModelSerializer): class Meta: model = User @@ -36,3 +31,12 @@ class BasicProfileSerializer(ModelSerializer): class FullProfileSerializer(BasicProfileSerializer): user = FullUserSerializer() + + +class HistorySerializer(ModelSerializer): + profile = BasicProfileSerializer() + song = BasicSongRetrieveSerializer() + + class Meta: + model = SongRequest + fields = ('created_date', 'played_at', 'profile', 'song') diff --git a/savepointradio/api/urls.py b/savepointradio/api/urls.py index 0588d91..6049595 100644 --- a/savepointradio/api/urls.py +++ b/savepointradio/api/urls.py @@ -3,7 +3,7 @@ from django.urls import path from rest_framework.routers import DefaultRouter from api.views.controls import JustPlayed, MakeRequest, NextRequest -from api.views.profiles import ProfileViewSet +from api.views.profiles import HistoryViewSet, ProfileViewSet from api.views.radio import (AlbumViewSet, ArtistViewSet, GameViewSet, SongViewSet) @@ -22,6 +22,7 @@ class OptionalSlashRouter(DefaultRouter): router = OptionalSlashRouter() +router.register(r'history', HistoryViewSet, base_name='history') router.register(r'profiles', ProfileViewSet, base_name='profile') router.register(r'albums', AlbumViewSet, base_name='album') diff --git a/savepointradio/api/views/profiles.py b/savepointradio/api/views/profiles.py index a2f9a02..e5f0926 100644 --- a/savepointradio/api/views/profiles.py +++ b/savepointradio/api/views/profiles.py @@ -1,8 +1,8 @@ from django.shortcuts import get_object_or_404 -from rest_framework import status, viewsets +from rest_framework import mixins, status, viewsets from rest_framework.decorators import action -from rest_framework.permissions import IsAdminUser +from rest_framework.permissions import AllowAny from rest_framework.response import Response from profiles.models import RadioProfile, Rating, SongRequest @@ -42,3 +42,9 @@ class ProfileViewSet(viewsets.ModelViewSet): self.is_owner = False self.check_object_permissions(self.request, obj) return obj + + +class HistoryViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): + permission_classes = [AllowAny] + queryset = SongRequest.objects.all() + serializer_class = HistorySerializer