soundwave/backend/audio/serializers.py

66 lines
2 KiB
Python
Raw Normal View History

"""Audio serializers"""
from rest_framework import serializers
from audio.models import Audio, AudioProgress
class AudioSerializer(serializers.ModelSerializer):
"""Audio file serializer"""
class Meta:
model = Audio
fields = [
'id', 'youtube_id', 'title', 'description', 'channel_id',
'channel_name', 'duration', 'file_path', 'file_size',
'thumbnail_url', 'published_date', 'downloaded_date',
'view_count', 'like_count', 'audio_format', 'bitrate',
'play_count', 'last_played'
]
read_only_fields = ['id', 'downloaded_date', 'play_count', 'last_played']
class AudioListSerializer(serializers.Serializer):
"""Audio list response"""
data = AudioSerializer(many=True)
paginate = serializers.BooleanField(default=True)
class AudioProgressSerializer(serializers.ModelSerializer):
"""Audio progress serializer"""
class Meta:
model = AudioProgress
fields = ['id', 'audio', 'position', 'completed', 'last_updated']
read_only_fields = ['id', 'last_updated']
class AudioProgressUpdateSerializer(serializers.Serializer):
"""Update audio progress"""
position = serializers.IntegerField(min_value=0)
completed = serializers.BooleanField(default=False)
class AudioListQuerySerializer(serializers.Serializer):
"""Query parameters for audio list"""
channel = serializers.CharField(required=False)
playlist = serializers.CharField(required=False)
status = serializers.ChoiceField(
choices=['played', 'unplayed', 'continue'],
required=False
)
sort = serializers.ChoiceField(
choices=['published', 'downloaded', 'views', 'likes', 'duration'],
default='published'
)
order = serializers.ChoiceField(
choices=['asc', 'desc'],
default='desc'
)
class PlayerSerializer(serializers.Serializer):
"""Audio player data"""
audio = AudioSerializer()
progress = AudioProgressSerializer(required=False)
stream_url = serializers.URLField()