adds track loading example
This commit is contained in:
@@ -104,6 +104,11 @@ class Track(models.Model):
|
||||
artists = list(map(lambda a:a.name, self.artists.all()))
|
||||
return " & ".join(artists)
|
||||
|
||||
@property
|
||||
def album_cover(self):
|
||||
if self.album:
|
||||
return self.album.image_url
|
||||
|
||||
@property
|
||||
def name_sanitized(self):
|
||||
return re.match("[^\-\(]*\w", self.name)[0]
|
||||
|
||||
@@ -47,6 +47,9 @@ from drf_spectacular.utils import extend_schema_serializer, OpenApiExample
|
||||
]
|
||||
)
|
||||
class TrackSerializer(serializers.HyperlinkedModelSerializer):
|
||||
artist = serializers.CharField()
|
||||
album_cover = serializers.CharField()
|
||||
|
||||
class Meta:
|
||||
model = Track
|
||||
fields = '__all__'
|
||||
@@ -54,5 +57,5 @@ class TrackSerializer(serializers.HyperlinkedModelSerializer):
|
||||
'url': {'view_name': 'api-track', 'lookup_field': 'id'},
|
||||
'artists': {'view_name': 'api-artist', 'lookup_field': 'id'},
|
||||
'album': {'view_name': 'api-album', 'lookup_field': 'id'},
|
||||
'nominated_by': {'view_name': 'api-user', 'lookup_field': 'id'}
|
||||
'nominated_by': {'view_name': 'api-user', 'lookup_field': 'id'},
|
||||
}
|
||||
|
||||
@@ -10,6 +10,7 @@ urlpatterns = [
|
||||
path('api/schema/', SpectacularAPIView.as_view(), name='schema'),
|
||||
path('api/schema/swagger-ui/', SpectacularSwaggerView.as_view(url_name='schema'), name='swagger-ui'),
|
||||
path('api/track/', views.TrackListView.as_view(), name="api-tracks"),
|
||||
path('api/track/vote', views.TrackVoteView.as_view(), name="api-track-vote"),
|
||||
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', views.ArtistListView.as_view(), name="api-artists"),
|
||||
|
||||
@@ -5,6 +5,7 @@ from playlist.serializers import TrackSerializer
|
||||
from playlist.spotify import spt
|
||||
from playlist.tasks import get_banter, get_and_dither_image
|
||||
from drf_spectacular.utils import extend_schema
|
||||
from random import choice
|
||||
|
||||
class TrackListView(APIView):
|
||||
@extend_schema(
|
||||
@@ -64,3 +65,16 @@ class TrackDetailView(APIView):
|
||||
return Response(status=204)
|
||||
else:
|
||||
return Response({'error': 'Only superusers can delete tracks'}, status=403)
|
||||
|
||||
class TrackVoteView(APIView):
|
||||
@extend_schema(
|
||||
request=None,
|
||||
responses={200: TrackSerializer},
|
||||
description="Retrieve a random track for voting."
|
||||
)
|
||||
def get(self, request):
|
||||
# TODO implement a session-based vote tracking system. Random return for now.
|
||||
random_pk = choice(Track.objects.values_list('pk', flat=True))
|
||||
track = Track.objects.get(pk=random_pk)
|
||||
serializer = TrackSerializer(track, context={'request': request})
|
||||
return Response(serializer.data)
|
||||
|
||||
Reference in New Issue
Block a user