2022-11-23 11:11:36 +00:00
|
|
|
from drf_spectacular.utils import extend_schema_field
|
2017-06-23 21:00:42 +00:00
|
|
|
from rest_framework import serializers
|
|
|
|
|
2018-03-01 22:41:51 +00:00
|
|
|
from funkwhale_api.activity import serializers as activity_serializers
|
2019-09-09 09:10:25 +00:00
|
|
|
from funkwhale_api.federation import serializers as federation_serializers
|
2018-07-17 11:09:13 +00:00
|
|
|
from funkwhale_api.music.serializers import TrackActivitySerializer, TrackSerializer
|
|
|
|
from funkwhale_api.users.serializers import UserActivitySerializer, UserBasicSerializer
|
2018-03-01 22:41:51 +00:00
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
from . import models
|
|
|
|
|
|
|
|
|
2018-03-01 22:41:51 +00:00
|
|
|
class ListeningActivitySerializer(activity_serializers.ModelSerializer):
|
|
|
|
type = serializers.SerializerMethodField()
|
2018-06-09 13:36:16 +00:00
|
|
|
object = TrackActivitySerializer(source="track")
|
|
|
|
actor = UserActivitySerializer(source="user")
|
|
|
|
published = serializers.DateTimeField(source="creation_date")
|
2018-03-01 22:41:51 +00:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Listening
|
2018-06-09 13:36:16 +00:00
|
|
|
fields = ["id", "local_id", "object", "type", "actor", "published"]
|
2018-03-01 22:41:51 +00:00
|
|
|
|
|
|
|
def get_actor(self, obj):
|
|
|
|
return UserActivitySerializer(obj.user).data
|
|
|
|
|
|
|
|
def get_type(self, obj):
|
2018-06-09 13:36:16 +00:00
|
|
|
return "Listen"
|
2018-03-01 22:41:51 +00:00
|
|
|
|
|
|
|
|
2017-06-23 21:00:42 +00:00
|
|
|
class ListeningSerializer(serializers.ModelSerializer):
|
2018-07-17 11:09:13 +00:00
|
|
|
track = TrackSerializer(read_only=True)
|
|
|
|
user = UserBasicSerializer(read_only=True)
|
2019-09-09 09:10:25 +00:00
|
|
|
actor = serializers.SerializerMethodField()
|
2018-07-17 11:09:13 +00:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
model = models.Listening
|
2019-09-09 09:10:25 +00:00
|
|
|
fields = ("id", "user", "track", "creation_date", "actor")
|
2018-07-17 11:09:13 +00:00
|
|
|
|
|
|
|
def create(self, validated_data):
|
|
|
|
validated_data["user"] = self.context["user"]
|
|
|
|
|
|
|
|
return super().create(validated_data)
|
|
|
|
|
2022-07-20 12:31:57 +00:00
|
|
|
@extend_schema_field(federation_serializers.APIActorSerializer)
|
2019-09-09 09:10:25 +00:00
|
|
|
def get_actor(self, obj):
|
|
|
|
actor = obj.user.actor
|
|
|
|
if actor:
|
|
|
|
return federation_serializers.APIActorSerializer(actor).data
|
|
|
|
|
2018-07-17 11:09:13 +00:00
|
|
|
|
|
|
|
class ListeningWriteSerializer(serializers.ModelSerializer):
|
2017-06-23 21:00:42 +00:00
|
|
|
class Meta:
|
|
|
|
model = models.Listening
|
2018-06-09 13:36:16 +00:00
|
|
|
fields = ("id", "user", "track", "creation_date")
|
2017-06-23 21:00:42 +00:00
|
|
|
|
|
|
|
def create(self, validated_data):
|
2018-06-09 13:36:16 +00:00
|
|
|
validated_data["user"] = self.context["user"]
|
2017-06-23 21:00:42 +00:00
|
|
|
|
|
|
|
return super().create(validated_data)
|