Added API endpoints to list library followees and followers
This commit is contained in:
parent
3caa03aedf
commit
e82a53da35
4 changed files with 101 additions and 0 deletions
19
api/funkwhale_api/federation/filters.py
Normal file
19
api/funkwhale_api/federation/filters.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
import django_filters
|
||||
|
||||
from . import models
|
||||
|
||||
|
||||
class FollowFilter(django_filters.FilterSet):
|
||||
ordering = django_filters.OrderingFilter(
|
||||
# tuple-mapping retains order
|
||||
fields=(
|
||||
('creation_date', 'creation_date'),
|
||||
('modification_date', 'modification_date'),
|
||||
),
|
||||
)
|
||||
|
||||
class Meta:
|
||||
model = models.Follow
|
||||
fields = {
|
||||
'approved': ['exact'],
|
||||
}
|
||||
|
|
@ -96,6 +96,22 @@ class ActorSerializer(serializers.ModelSerializer):
|
|||
return value[:500]
|
||||
|
||||
|
||||
class APIActorSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Actor
|
||||
fields = [
|
||||
'id',
|
||||
'url',
|
||||
'creation_date',
|
||||
'summary',
|
||||
'preferred_username',
|
||||
'name',
|
||||
'last_fetch_date',
|
||||
'domain',
|
||||
'type',
|
||||
'manually_approves_followers',
|
||||
|
||||
]
|
||||
class LibraryActorSerializer(ActorSerializer):
|
||||
url = serializers.ListField(
|
||||
child=serializers.JSONField())
|
||||
|
|
@ -224,6 +240,9 @@ class FollowSerializer(serializers.Serializer):
|
|||
|
||||
|
||||
class APIFollowSerializer(serializers.ModelSerializer):
|
||||
actor = APIActorSerializer()
|
||||
target = APIActorSerializer()
|
||||
|
||||
class Meta:
|
||||
model = models.Follow
|
||||
fields = [
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ from funkwhale_api.music.models import TrackFile
|
|||
from . import activity
|
||||
from . import actors
|
||||
from . import authentication
|
||||
from . import filters
|
||||
from . import library
|
||||
from . import models
|
||||
from . import permissions
|
||||
|
|
@ -177,6 +178,40 @@ class LibraryViewSet(viewsets.GenericViewSet):
|
|||
data = library.scan_from_account_name(account)
|
||||
return response.Response(data)
|
||||
|
||||
@list_route(methods=['get'])
|
||||
def following(self, request, *args, **kwargs):
|
||||
library_actor = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||
queryset = models.Follow.objects.filter(
|
||||
actor=library_actor
|
||||
).select_related(
|
||||
'target',
|
||||
'target',
|
||||
).order_by('-creation_date')
|
||||
filterset = filters.FollowFilter(request.GET, queryset=queryset)
|
||||
serializer = serializers.APIFollowSerializer(filterset.qs, many=True)
|
||||
data = {
|
||||
'results': serializer.data,
|
||||
'count': len(filterset.qs),
|
||||
}
|
||||
return response.Response(data)
|
||||
|
||||
@list_route(methods=['get'])
|
||||
def followers(self, request, *args, **kwargs):
|
||||
library_actor = actors.SYSTEM_ACTORS['library'].get_actor_instance()
|
||||
queryset = models.Follow.objects.filter(
|
||||
target=library_actor
|
||||
).select_related(
|
||||
'target',
|
||||
'target',
|
||||
).order_by('-creation_date')
|
||||
filterset = filters.FollowFilter(request.GET, queryset=queryset)
|
||||
serializer = serializers.APIFollowSerializer(filterset.qs, many=True)
|
||||
data = {
|
||||
'results': serializer.data,
|
||||
'count': len(filterset.qs),
|
||||
}
|
||||
return response.Response(data)
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, request, *args, **kwargs):
|
||||
serializer = serializers.APILibraryCreateSerializer(data=request.data)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue