Browse Source

feat: add Rate model to allow users to rate content across various services. and fix the round value of avg ratings.

master
Mohsen Taba 2 months ago
parent
commit
6161561da3
  1. 11
      apps/bookmark/models/rate.py

11
apps/bookmark/models/rate.py

@ -17,8 +17,10 @@ class Rate(models.Model):
PODCAST = 'podcast', 'Podcast' PODCAST = 'podcast', 'Podcast'
PODCAST_PLAYLIST = 'podcast_playlist', 'Podcast Playlist' PODCAST_PLAYLIST = 'podcast_playlist', 'Podcast Playlist'
HADITH = 'hadith', 'Hadith' HADITH = 'hadith', 'Hadith'
HADITH_CORRECTION = 'hadith_correction', 'Hadith Correction'
VIDEO = 'video', 'Video' VIDEO = 'video', 'Video'
VIDEO_PLAYLIST = 'video_playlist', 'Video Playlist' VIDEO_PLAYLIST = 'video_playlist', 'Video Playlist'
ARTICLE = 'article', 'Article'
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='rates', verbose_name='User') user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='rates', verbose_name='User')
service = models.CharField(max_length=20, choices=ServiceChoices.choices, verbose_name='Service') service = models.CharField(max_length=20, choices=ServiceChoices.choices, verbose_name='Service')
@ -101,6 +103,12 @@ class Rate(models.Model):
elif service == cls.ServiceChoices.VIDEO_PLAYLIST: elif service == cls.ServiceChoices.VIDEO_PLAYLIST:
from apps.video.models import VideoPlaylist from apps.video.models import VideoPlaylist
return VideoPlaylist.objects.filter(id=content_id).exists() return VideoPlaylist.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.ARTICLE:
from apps.article.models import Article
return Article.objects.filter(id=content_id).exists()
elif service == cls.ServiceChoices.HADITH_CORRECTION:
from apps.hadis.models import HadisCorrection
return HadisCorrection.objects.filter(id=content_id).exists()
return False return False
@classmethod @classmethod
@ -121,5 +129,6 @@ class Rate(models.Model):
status=True status=True
).aggregate(avg_rate=Avg('rate')) ).aggregate(avg_rate=Avg('rate'))
return result['avg_rate']
avg_rate = result['avg_rate']
return round(avg_rate, 2) if avg_rate is not None else None
Loading…
Cancel
Save