audio api
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 12 May 2025 07:03:40 +0000 (09:03 +0200)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 12 May 2025 07:03:40 +0000 (09:03 +0200)
src/catalogue/api/serializers.py
src/catalogue/api/urls2.py
src/catalogue/api/views.py

index a90d2ef..1608b0f 100644 (file)
@@ -157,6 +157,7 @@ class BookSerializer2(serializers.ModelSerializer):
             'cover_thumb', 'cover',
             'isbn_pdf', 'isbn_epub', 'isbn_mobi',
             'abstract',
             'cover_thumb', 'cover',
             'isbn_pdf', 'isbn_epub', 'isbn_mobi',
             'abstract',
+            'has_mp3_file',
         ]
 
 class BookSerializer11Labs(serializers.ModelSerializer):
         ]
 
 class BookSerializer11Labs(serializers.ModelSerializer):
@@ -190,6 +191,17 @@ class BookSerializer11Labs(serializers.ModelSerializer):
         ]
 
 
         ]
 
 
+class MediaSerializer2(MediaSerializer):
+    size = serializers.SerializerMethodField()
+
+    class Meta:
+        model = BookMedia
+        fields = ['url', 'director', 'type', 'name', 'part_name', 'artist', 'duration', 'size']
+
+    def get_size(self, obj):
+        return obj.file.size
+
+
 class BookSerializer(LegacyMixin, serializers.ModelSerializer):
     author = serializers.CharField(source='author_unicode')
     kind = serializers.CharField(source='kind_unicode')
 class BookSerializer(LegacyMixin, serializers.ModelSerializer):
     author = serializers.CharField(source='author_unicode')
     kind = serializers.CharField(source='kind_unicode')
index 7dc131d..e90e13e 100644 (file)
@@ -23,6 +23,9 @@ urlpatterns = [
          piwik_track_view(views.BookFragmentView.as_view()),
          name='catalogue_api_book_fragment'
          ),
          piwik_track_view(views.BookFragmentView.as_view()),
          name='catalogue_api_book_fragment'
          ),
+    path('books/<slug:slug>/media/<slug:type>/',
+         views.BookMediaView.as_view()
+         ),
 
     path('suggested-tags/',
          piwik_track_view(views.SuggestedTags.as_view()),
 
     path('suggested-tags/',
          piwik_track_view(views.SuggestedTags.as_view()),
index e45f80e..821b281 100644 (file)
@@ -517,3 +517,13 @@ class BookFragmentView(RetrieveAPIView):
         book = get_object_or_404(Book, slug=self.kwargs['slug'])
         return book.choose_fragment()
 
         book = get_object_or_404(Book, slug=self.kwargs['slug'])
         return book.choose_fragment()
 
+
+class BookMediaView(ListAPIView):
+    serializer_class = serializers.MediaSerializer2
+    pagination_class = None
+
+    def get_queryset(self):
+        return BookMedia.objects.filter(
+            book__slug=self.kwargs['slug'],
+            type=self.kwargs['type']
+        ).order_by('index')