Browse Source

feat(podcast, video): add audio and video file URL retrieval in serializers

- Introduced `audio_file` and `video_file` SerializerMethodFields in PodcastListSerializer and VideoListSerializer, respectively.
- Implemented methods to return the full URL for audio and video files if they exist, enhancing the API response with direct access to media files.
- Updated fields in both serializers to include the new file attributes, improving the data structure for clients consuming the API.
shokhmgar
mortezaei 10 months ago
parent
commit
04b1f7ec02
  1. 21
      apps/podcast/serializers.py
  2. 15
      apps/video/serializers.py

21
apps/podcast/serializers.py

@ -17,15 +17,26 @@ class PodcastCategoryListSerializer(serializers.ModelSerializer):
class PodcastListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
audio_file = serializers.SerializerMethodField()
in_user_playlist = serializers.SerializerMethodField()
class Meta:
model = Podcast
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'audio_time', 'view_count', 'created_at', 'in_user_playlist']
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'audio_file',
'audio_time', 'view_count', 'created_at', 'in_user_playlist']
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
def get_audio_file(self, obj):
"""Get full URL for audio file if it exists"""
if obj.audio_file:
request = self.context.get('request')
if request:
return request.build_absolute_uri(obj.audio_file.url)
return obj.audio_file.url
return None
def get_in_user_playlist(self, obj):
"""
Check if the podcast is in the user's personal playlist.
@ -33,10 +44,10 @@ class PodcastListSerializer(serializers.ModelSerializer):
"""
request = self.context.get('request')
user = request.user if request and request.user.is_authenticated else None
if not user:
return False
return UserPlaylist.is_in_user_playlist(user, obj)

15
apps/video/serializers.py

@ -17,14 +17,25 @@ class VideoCategoryListSerializer(serializers.ModelSerializer):
class VideoListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()
video_file = serializers.SerializerMethodField()
class Meta:
model = Video
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'video_time', 'view_count', 'created_at']
fields = ['id', 'title', 'slug', 'thumbnail', 'description', 'video_type',
'video_file', 'video_url', 'video_time', 'view_count', 'created_at']
def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request'))
def get_video_file(self, obj):
"""Get full URL for video file if it exists"""
if obj.video_file:
request = self.context.get('request')
if request:
return request.build_absolute_uri(obj.video_file.url)
return obj.video_file.url
return None
class VideoPlaylistListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField()

Loading…
Cancel
Save