diff --git a/api/funkwhale_api/radios/serializers.py b/api/funkwhale_api/radios/serializers.py index 520e98652..2e7e6a409 100644 --- a/api/funkwhale_api/radios/serializers.py +++ b/api/funkwhale_api/radios/serializers.py @@ -1,6 +1,7 @@ from rest_framework import serializers from funkwhale_api.music.serializers import TrackSerializerNested +from funkwhale_api.users.serializers import UserBasicSerializer from . import filters from . import models @@ -15,6 +16,8 @@ class FilterSerializer(serializers.Serializer): class RadioSerializer(serializers.ModelSerializer): + user = UserBasicSerializer(read_only=True) + class Meta: model = models.Radio fields = ( diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py index 426526442..ffd1d1659 100644 --- a/api/funkwhale_api/radios/views.py +++ b/api/funkwhale_api/radios/views.py @@ -20,6 +20,7 @@ class RadioViewSet( mixins.RetrieveModelMixin, mixins.UpdateModelMixin, mixins.ListModelMixin, + mixins.DestroyModelMixin, viewsets.GenericViewSet): serializer_class = serializers.RadioSerializer @@ -40,6 +41,16 @@ class RadioViewSet( raise Http404 return serializer.save(user=self.request.user) + @detail_route(methods=['get']) + def tracks(self, request, *args, **kwargs): + radio = self.get_object() + tracks = radio.get_candidates().for_nested_serialization() + + page = self.paginate_queryset(tracks) + if page is not None: + serializer = TrackSerializerNested(page, many=True) + return self.get_paginated_response(serializer.data) + @list_route(methods=['get']) def filters(self, request, *args, **kwargs): serializer = serializers.FilterSerializer( diff --git a/changes/changelog.d/64.feature b/changes/changelog.d/64.feature new file mode 100644 index 000000000..87fe70522 --- /dev/null +++ b/changes/changelog.d/64.feature @@ -0,0 +1 @@ +Add a detail page for radios (#64) \ No newline at end of file diff --git a/front/src/components/library/radios/Builder.vue b/front/src/components/library/radios/Builder.vue index 9b8786cc6..5fbf0c992 100644 --- a/front/src/components/library/radios/Builder.vue +++ b/front/src/components/library/radios/Builder.vue @@ -180,7 +180,7 @@ export default { let url = 'radios/radios/' axios.post(url, final).then((response) => { self.$router.push({ - name: 'library.radios.edit', + name: 'library.radios.detail', params: { id: response.data.id } diff --git a/front/src/components/radios/Card.vue b/front/src/components/radios/Card.vue index d2c14c37c..17de3c85f 100644 --- a/front/src/components/radios/Card.vue +++ b/front/src/components/radios/Card.vue @@ -1,7 +1,11 @@