Activity stream representations for user and favorites
This commit is contained in:
parent
93e4a4f123
commit
691665e3cf
12 changed files with 159 additions and 0 deletions
0
api/funkwhale_api/activity/__init__.py
Normal file
0
api/funkwhale_api/activity/__init__.py
Normal file
9
api/funkwhale_api/activity/serializers.py
Normal file
9
api/funkwhale_api/activity/serializers.py
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
|
||||
class ModelSerializer(serializers.ModelSerializer):
|
||||
id = serializers.CharField(source='get_activity_url')
|
||||
# url = serializers.SerializerMethodField()
|
||||
|
||||
def get_url(self, obj):
|
||||
return self.get_id(obj)
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
|
||||
from funkwhale_api.music.models import Track
|
||||
|
||||
|
||||
class TrackFavorite(models.Model):
|
||||
creation_date = models.DateTimeField(default=timezone.now)
|
||||
user = models.ForeignKey(
|
||||
|
|
@ -18,3 +20,7 @@ class TrackFavorite(models.Model):
|
|||
def add(cls, track, user):
|
||||
favorite, created = cls.objects.get_or_create(user=user, track=track)
|
||||
return favorite
|
||||
|
||||
def get_activity_url(self):
|
||||
return '{}/favorites/tracks/{}'.format(
|
||||
self.user.get_activity_url(), self.pk)
|
||||
|
|
|
|||
|
|
@ -1,10 +1,43 @@
|
|||
from django.conf import settings
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from funkwhale_api.activity import serializers as activity_serializers
|
||||
from funkwhale_api.music.serializers import TrackSerializerNested
|
||||
from funkwhale_api.users.serializers import UserActivitySerializer
|
||||
|
||||
from . import models
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class TrackFavoriteActivitySerializer(activity_serializers.ModelSerializer):
|
||||
type = serializers.SerializerMethodField()
|
||||
object = serializers.CharField(source='track.get_activity_url')
|
||||
actor = UserActivitySerializer(source='user')
|
||||
published = serializers.DateTimeField(source='creation_date')
|
||||
|
||||
class Meta:
|
||||
model = models.TrackFavorite
|
||||
fields = [
|
||||
'id',
|
||||
'object',
|
||||
'type',
|
||||
'actor',
|
||||
'published'
|
||||
]
|
||||
|
||||
def get_actor(self, obj):
|
||||
return UserActivitySerializer(obj.user).data
|
||||
|
||||
def get_type(self, obj):
|
||||
return 'Like'
|
||||
|
||||
def get_object(self, obj):
|
||||
return obj.track.get_activity_url()
|
||||
|
||||
|
||||
class UserTrackFavoriteSerializer(serializers.ModelSerializer):
|
||||
# track = TrackSerializerNested(read_only=True)
|
||||
class Meta:
|
||||
|
|
|
|||
17
api/funkwhale_api/music/consumers.py
Normal file
17
api/funkwhale_api/music/consumers.py
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
from funkwhale_api.common.consumers import JsonAuthConsumer
|
||||
|
||||
|
||||
class MyConsumer(JsonAuthConsumer):
|
||||
groups = ["broadcast"]
|
||||
|
||||
def receive_json(self, payload):
|
||||
print(payload, self.scope["user"])
|
||||
# Called with either text_data or bytes_data for each frame
|
||||
# You can call:
|
||||
self.send_json({'test': 'me'})
|
||||
# Or, to send a binary frame:
|
||||
# self.send(bytes_data="{Hello} world!")
|
||||
# Want to force-close the connection? Call:
|
||||
# self.close()
|
||||
# # Or add a custom WebSocket error code!
|
||||
# self.close(code=4123)
|
||||
|
|
@ -360,6 +360,12 @@ class Track(APIModelMixin):
|
|||
self.title,
|
||||
)
|
||||
|
||||
def get_activity_url(self):
|
||||
if self.mbid:
|
||||
return 'https://musicbrainz.org/recording/{}'.format(
|
||||
self.mbid)
|
||||
return settings.FUNKWHALE_URL + '/tracks/{}'.format(self.pk)
|
||||
|
||||
|
||||
class TrackFile(models.Model):
|
||||
track = models.ForeignKey(
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ from __future__ import unicode_literals, absolute_import
|
|||
|
||||
import uuid
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.urls import reverse
|
||||
from django.db import models
|
||||
|
|
@ -43,3 +44,6 @@ class User(AbstractUser):
|
|||
def set_password(self, raw_password):
|
||||
super().set_password(raw_password)
|
||||
self.update_secret_key()
|
||||
|
||||
def get_activity_url(self):
|
||||
return settings.FUNKWHALE_URL + '/@{}'.format(self.username)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,26 @@
|
|||
from rest_framework import serializers
|
||||
|
||||
from funkwhale_api.activity import serializers as activity_serializers
|
||||
|
||||
from . import models
|
||||
|
||||
|
||||
class UserActivitySerializer(activity_serializers.ModelSerializer):
|
||||
type = serializers.SerializerMethodField()
|
||||
name = serializers.CharField(source='username')
|
||||
|
||||
class Meta:
|
||||
model = models.User
|
||||
fields = [
|
||||
'id',
|
||||
'name',
|
||||
'type'
|
||||
]
|
||||
|
||||
def get_type(self, obj):
|
||||
return 'Person'
|
||||
|
||||
|
||||
class UserBasicSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.User
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue