mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-05 07:49:23 +02:00
Fx #1178: Display channel and track downloads count
This commit is contained in:
parent
75f9537d89
commit
e9186ca813
8 changed files with 30 additions and 3 deletions
|
@ -235,6 +235,7 @@ class ChannelUpdateSerializer(serializers.Serializer):
|
|||
class ChannelSerializer(serializers.ModelSerializer):
|
||||
artist = serializers.SerializerMethodField()
|
||||
actor = serializers.SerializerMethodField()
|
||||
downloads_count = serializers.SerializerMethodField()
|
||||
attributed_to = federation_serializers.APIActorSerializer()
|
||||
rss_url = serializers.CharField(source="get_rss_url")
|
||||
url = serializers.SerializerMethodField()
|
||||
|
@ -250,6 +251,7 @@ class ChannelSerializer(serializers.ModelSerializer):
|
|||
"metadata",
|
||||
"rss_url",
|
||||
"url",
|
||||
"downloads_count",
|
||||
]
|
||||
|
||||
def get_artist(self, obj):
|
||||
|
@ -264,6 +266,9 @@ class ChannelSerializer(serializers.ModelSerializer):
|
|||
def get_subscriptions_count(self, obj):
|
||||
return obj.actor.received_follows.exclude(approved=False).count()
|
||||
|
||||
def get_downloads_count(self, obj):
|
||||
return getattr(obj, "_downloads_count", None)
|
||||
|
||||
def get_actor(self, obj):
|
||||
if obj.attributed_to == actors.get_service_actor():
|
||||
return None
|
||||
|
|
|
@ -7,7 +7,7 @@ from rest_framework import viewsets
|
|||
|
||||
from django import http
|
||||
from django.db import transaction
|
||||
from django.db.models import Count, Prefetch, Q
|
||||
from django.db.models import Count, Prefetch, Q, Sum
|
||||
from django.utils import timezone
|
||||
|
||||
from funkwhale_api.common import locales
|
||||
|
@ -93,6 +93,14 @@ class ChannelViewSet(
|
|||
return serializers.ChannelUpdateSerializer
|
||||
return serializers.ChannelCreateSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
if self.action == "retrieve":
|
||||
queryset = queryset.annotate(
|
||||
_downloads_count=Sum("artist__tracks__downloads_count")
|
||||
)
|
||||
return queryset
|
||||
|
||||
def perform_create(self, serializer):
|
||||
return serializer.save(attributed_to=self.request.user.actor)
|
||||
|
||||
|
|
|
@ -294,6 +294,7 @@ class TrackSerializer(OptionalDescriptionMixin, serializers.Serializer):
|
|||
is_local = serializers.BooleanField()
|
||||
position = serializers.IntegerField()
|
||||
disc_number = serializers.IntegerField()
|
||||
downloads_count = serializers.IntegerField()
|
||||
copyright = serializers.CharField()
|
||||
license = serializers.SerializerMethodField()
|
||||
cover = cover_field
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue