diff --git a/backend/config/management/commands/ta_startup.py b/backend/config/management/commands/ta_startup.py index 197cd58f..0caaac07 100644 --- a/backend/config/management/commands/ta_startup.py +++ b/backend/config/management/commands/ta_startup.py @@ -55,6 +55,7 @@ class Command(BaseCommand): self._mig_set_channel_tabs() self._mig_set_video_channel_tabs() self._mig_fix_playlist_description() + self._mig_fix_missing_stats() def _make_folders(self): """make expected cache folders""" @@ -329,6 +330,29 @@ class Command(BaseCommand): }, ) + def _mig_fix_missing_stats(self) -> None: + """migrate from 0.5.8 to 0.5.9, fix missing stats values""" + fields = [ + "like_count", + "average_rating", + "view_count", + "dislike_count", + ] + for field in fields: + self._run_migration( + index_name="ta_video", + desc=f"fix missing stats field {field}", + query={ + "bool": { + "must_not": [{"exists": {"field": f"stats.{field}"}}] + } + }, + script={ + "source": f"ctx._source.stats.{field} = 0", + "lang": "painless", + }, + ) + def _run_migration( self, index_name: str, desc: str, query: dict, script: dict ): diff --git a/backend/video/serializers.py b/backend/video/serializers.py index 1cdf167c..99639829 100644 --- a/backend/video/serializers.py +++ b/backend/video/serializers.py @@ -44,10 +44,10 @@ class SponsorBlockSerializer(serializers.Serializer): class StatsSerializer(serializers.Serializer): """serialize stats""" - like_count = serializers.IntegerField(required=False) - average_rating = serializers.FloatField(required=False) - view_count = serializers.IntegerField(required=False) - dislike_count = serializers.IntegerField(required=False) + like_count = serializers.IntegerField() + average_rating = serializers.FloatField() + view_count = serializers.IntegerField() + dislike_count = serializers.IntegerField() class StreamItemSerializer(serializers.Serializer): diff --git a/backend/video/src/index.py b/backend/video/src/index.py index 5fda13bd..437c1e57 100644 --- a/backend/video/src/index.py +++ b/backend/video/src/index.py @@ -255,10 +255,10 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle): def _add_stats(self): """add stats dicst to json_data""" stats = { - "view_count": self.youtube_meta.get("view_count", 0), - "like_count": self.youtube_meta.get("like_count", 0), - "dislike_count": self.youtube_meta.get("dislike_count", 0), - "average_rating": self.youtube_meta.get("average_rating", 0), + "view_count": self.youtube_meta.get("view_count") or 0, + "like_count": self.youtube_meta.get("like_count") or 0, + "dislike_count": self.youtube_meta.get("dislike_count") or 0, + "average_rating": self.youtube_meta.get("average_rating") or 0, } self.json_data.update({"stats": stats}) @@ -379,8 +379,8 @@ class YoutubeVideo(YouTubeItem, YoutubeSubtitle): return dislikes = { - "dislike_count": result.get("dislikes", 0), - "average_rating": result.get("rating", 0), + "dislike_count": result.get("dislikes") or 0, + "average_rating": result.get("rating") or 0, } self.json_data["stats"].update(dislikes)