mirror of
https://code.eliotberriot.com/funkwhale/funkwhale.git
synced 2025-10-03 23:39:16 +02:00
Resolve "Per-user libraries" (use !368 instead)
This commit is contained in:
parent
b0ca181016
commit
2ea21994ee
144 changed files with 6749 additions and 5347 deletions
57
api/funkwhale_api/federation/api_serializers.py
Normal file
57
api/funkwhale_api/federation/api_serializers.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from funkwhale_api.common import serializers as common_serializers
|
||||
from funkwhale_api.music import models as music_models
|
||||
|
||||
from . import serializers as federation_serializers
|
||||
from . import models
|
||||
|
||||
|
||||
class NestedLibraryFollowSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.LibraryFollow
|
||||
fields = ["creation_date", "uuid", "fid", "approved", "modification_date"]
|
||||
|
||||
|
||||
class LibrarySerializer(serializers.ModelSerializer):
|
||||
actor = federation_serializers.APIActorSerializer()
|
||||
files_count = serializers.SerializerMethodField()
|
||||
follow = serializers.SerializerMethodField()
|
||||
|
||||
class Meta:
|
||||
model = music_models.Library
|
||||
fields = [
|
||||
"fid",
|
||||
"uuid",
|
||||
"actor",
|
||||
"name",
|
||||
"description",
|
||||
"creation_date",
|
||||
"files_count",
|
||||
"privacy_level",
|
||||
"follow",
|
||||
]
|
||||
|
||||
def get_files_count(self, o):
|
||||
return max(getattr(o, "_files_count", 0), o.files_count)
|
||||
|
||||
def get_follow(self, o):
|
||||
try:
|
||||
return NestedLibraryFollowSerializer(o._follows[0]).data
|
||||
except (AttributeError, IndexError):
|
||||
return None
|
||||
|
||||
|
||||
class LibraryFollowSerializer(serializers.ModelSerializer):
|
||||
target = common_serializers.RelatedField("uuid", LibrarySerializer(), required=True)
|
||||
|
||||
class Meta:
|
||||
model = models.LibraryFollow
|
||||
fields = ["creation_date", "uuid", "target", "approved"]
|
||||
read_only_fields = ["uuid", "approved", "creation_date"]
|
||||
|
||||
def validate_target(self, v):
|
||||
actor = self.context["actor"]
|
||||
if v.received_follows.filter(actor=actor).exists():
|
||||
raise serializers.ValidationError("You are already following this library")
|
||||
return v
|
Loading…
Add table
Add a link
Reference in a new issue