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): class PodcastListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField() thumbnail = serializers.SerializerMethodField()
audio_file = serializers.SerializerMethodField()
in_user_playlist = serializers.SerializerMethodField() in_user_playlist = serializers.SerializerMethodField()
class Meta: class Meta:
model = Podcast 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): def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request')) 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): def get_in_user_playlist(self, obj):
""" """
Check if the podcast is in the user's personal playlist. Check if the podcast is in the user's personal playlist.
@ -33,10 +44,10 @@ class PodcastListSerializer(serializers.ModelSerializer):
""" """
request = self.context.get('request') request = self.context.get('request')
user = request.user if request and request.user.is_authenticated else None user = request.user if request and request.user.is_authenticated else None
if not user: if not user:
return False return False
return UserPlaylist.is_in_user_playlist(user, obj) 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): class VideoListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField() thumbnail = serializers.SerializerMethodField()
video_file = serializers.SerializerMethodField()
class Meta: class Meta:
model = Video 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): def get_thumbnail(self, obj):
return get_thumbs(obj.thumbnail, self.context.get('request')) 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): class VideoPlaylistListSerializer(serializers.ModelSerializer):
thumbnail = serializers.SerializerMethodField() thumbnail = serializers.SerializerMethodField()

Loading…
Cancel
Save