66 lines
2 KiB
Python
66 lines
2 KiB
Python
|
|
"""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()
|