Browse Source

send bookmarks stat for the admin panel page

master
Mohsen Taba 3 weeks ago
parent
commit
61d4eb579c
  1. 33
      apps/article/serializers_admin.py
  2. 18
      apps/hadis/serializers/serializers_admin.py
  3. 18
      apps/podcast/serializers_admin.py
  4. 18
      apps/video/serializers_admin.py

33
apps/article/serializers_admin.py

@ -2,7 +2,7 @@ from rest_framework import serializers
from django.core.files.uploadedfile import SimpleUploadedFile from django.core.files.uploadedfile import SimpleUploadedFile
from utils.image_compression import maybe_compress_uploaded_file from utils.image_compression import maybe_compress_uploaded_file
from .models import Article, ArticleCategory, ArticleContent, ContentPart, TextSection
from .models import Article, ArticleCategory, ArticleCollection, ArticleContent, ContentPart, TextSection
class AbsoluteImageField(serializers.ImageField): class AbsoluteImageField(serializers.ImageField):
@ -45,10 +45,17 @@ class AdminArticleCategorySerializer(serializers.ModelSerializer):
fields = ["id", "title", "slug", "status", "order"] fields = ["id", "title", "slug", "status", "order"]
class AdminArticleCollectionSerializer(serializers.ModelSerializer):
class Meta:
model = ArticleCollection
fields = ["id", "title", "slug", "summary", "display_position", "status", "order", "pin_top"]
class AdminArticleListSerializer(serializers.ModelSerializer): class AdminArticleListSerializer(serializers.ModelSerializer):
thumbnail = AbsoluteImageField(required=False, allow_null=True) thumbnail = AbsoluteImageField(required=False, allow_null=True)
article_file = AbsoluteFileField(required=False, allow_null=True) article_file = AbsoluteFileField(required=False, allow_null=True)
categories = AdminArticleCategorySerializer(many=True, read_only=True) categories = AdminArticleCategorySerializer(many=True, read_only=True)
collections_detail = AdminArticleCollectionSerializer(source="collections", many=True, read_only=True)
class Meta: class Meta:
model = Article model = Article
@ -65,6 +72,7 @@ class AdminArticleListSerializer(serializers.ModelSerializer):
"created_at", "created_at",
"updated_at", "updated_at",
"categories", "categories",
"collections_detail",
] ]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"] read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
@ -78,9 +86,17 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
required=False, required=False,
) )
categories_detail = AdminArticleCategorySerializer(source="categories", many=True, read_only=True) categories_detail = AdminArticleCategorySerializer(source="categories", many=True, read_only=True)
collections = serializers.PrimaryKeyRelatedField(
queryset=ArticleCollection.objects.all(),
many=True,
required=False,
)
collections_detail = AdminArticleCollectionSerializer(source="collections", many=True, read_only=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
remove_article_file = serializers.BooleanField(write_only=True, required=False, default=False) remove_article_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = Article model = Article
fields = [ fields = [
@ -93,30 +109,41 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
"article_file", "article_file",
"view_count", "view_count",
"download_count", "download_count",
"bookmark_count",
"status", "status",
"created_at", "created_at",
"updated_at", "updated_at",
"categories", "categories",
"categories_detail", "categories_detail",
"collections",
"collections_detail",
"embedded_in", "embedded_in",
"remove_thumbnail", "remove_thumbnail",
"remove_article_file", "remove_article_file",
] ]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
read_only_fields = ["id", "view_count", "download_count", "bookmark_count", "created_at", "updated_at"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.ARTICLE, content_id=obj.id, status=True).count()
def create(self, validated_data): def create(self, validated_data):
validated_data.pop("remove_thumbnail", False) validated_data.pop("remove_thumbnail", False)
validated_data.pop("remove_article_file", False) validated_data.pop("remove_article_file", False)
categories = validated_data.pop("categories", []) categories = validated_data.pop("categories", [])
collections = validated_data.pop("collections", [])
article = super().create(validated_data) article = super().create(validated_data)
if categories: if categories:
article.categories.set(categories) article.categories.set(categories)
if collections:
article.collections.set(collections)
return article return article
def update(self, instance, validated_data): def update(self, instance, validated_data):
remove_thumbnail = validated_data.pop("remove_thumbnail", False) remove_thumbnail = validated_data.pop("remove_thumbnail", False)
remove_article_file = validated_data.pop("remove_article_file", False) remove_article_file = validated_data.pop("remove_article_file", False)
categories = validated_data.pop("categories", None) categories = validated_data.pop("categories", None)
collections = validated_data.pop("collections", None)
if remove_thumbnail and instance.thumbnail: if remove_thumbnail and instance.thumbnail:
instance.thumbnail.delete(save=False) instance.thumbnail.delete(save=False)
@ -129,6 +156,8 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
article = super().update(instance, validated_data) article = super().update(instance, validated_data)
if categories is not None: if categories is not None:
article.categories.set(categories) article.categories.set(categories)
if collections is not None:
article.collections.set(collections)
return article return article

18
apps/hadis/serializers/serializers_admin.py

@ -95,6 +95,8 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
required=False, required=False,
) )
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = Hadis model = Hadis
fields = [ fields = [
@ -118,11 +120,16 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
"tags_detail", "tags_detail",
"share_link", "share_link",
"explanation", "explanation",
"bookmark_count",
"created_at", "created_at",
"updated_at", "updated_at",
"embedded_in", "embedded_in",
] ]
read_only_fields = ["id", "slug", "share_link", "created_at", "updated_at"]
read_only_fields = ["id", "slug", "share_link", "bookmark_count", "created_at", "updated_at"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.HADITH, content_id=obj.id, status=True).count()
def create(self, validated_data): def create(self, validated_data):
tags = validated_data.pop("tags", []) tags = validated_data.pop("tags", [])
@ -142,6 +149,8 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
class AdminHadisCorrectionSerializer(serializers.ModelSerializer): class AdminHadisCorrectionSerializer(serializers.ModelSerializer):
hadis_detail = AdminHadisListSerializer(source="hadis", read_only=True) hadis_detail = AdminHadisListSerializer(source="hadis", read_only=True)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = HadisCorrection model = HadisCorrection
fields = [ fields = [
@ -153,10 +162,15 @@ class AdminHadisCorrectionSerializer(serializers.ModelSerializer):
"text", "text",
"translation", "translation",
"priority", "priority",
"bookmark_count",
"created_at", "created_at",
"updated_at", "updated_at",
] ]
read_only_fields = ["id", "slug", "created_at", "updated_at"]
read_only_fields = ["id", "slug", "bookmark_count", "created_at", "updated_at"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.HADITH_CORRECTION, content_id=obj.id, status=True).count()
class AdminHadisInterpretationSerializer(serializers.ModelSerializer): class AdminHadisInterpretationSerializer(serializers.ModelSerializer):

18
apps/podcast/serializers_admin.py

@ -86,6 +86,8 @@ class AdminPodcastDetailSerializer(serializers.ModelSerializer):
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
remove_audio_file = serializers.BooleanField(write_only=True, required=False, default=False) remove_audio_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = Podcast model = Podcast
fields = [ fields = [
@ -99,6 +101,7 @@ class AdminPodcastDetailSerializer(serializers.ModelSerializer):
"status", "status",
"view_count", "view_count",
"download_count", "download_count",
"bookmark_count",
"created_at", "created_at",
"updated_at", "updated_at",
"categories", "categories",
@ -108,7 +111,11 @@ class AdminPodcastDetailSerializer(serializers.ModelSerializer):
"remove_thumbnail", "remove_thumbnail",
"remove_audio_file", "remove_audio_file",
] ]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
read_only_fields = ["id", "view_count", "download_count", "bookmark_count", "created_at", "updated_at"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.PODCAST, content_id=obj.id, status=True).count()
def create(self, validated_data): def create(self, validated_data):
validated_data.pop("remove_thumbnail", False) validated_data.pop("remove_thumbnail", False)
@ -214,6 +221,8 @@ class AdminPodcastPlaylistDetailSerializer(serializers.ModelSerializer):
playlist_items_detail = AdminPodcastPlaylistItemSerializer(source="playlist_items", many=True, read_only=True) playlist_items_detail = AdminPodcastPlaylistItemSerializer(source="playlist_items", many=True, read_only=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = PodcastPlaylist model = PodcastPlaylist
fields = [ fields = [
@ -226,6 +235,7 @@ class AdminPodcastPlaylistDetailSerializer(serializers.ModelSerializer):
"order", "order",
"status", "status",
"view_count", "view_count",
"bookmark_count",
"total_time", "total_time",
"created_at", "created_at",
"updated_at", "updated_at",
@ -236,7 +246,11 @@ class AdminPodcastPlaylistDetailSerializer(serializers.ModelSerializer):
"playlist_items_detail", "playlist_items_detail",
"remove_thumbnail", "remove_thumbnail",
] ]
read_only_fields = ["id", "view_count", "total_time", "created_at", "updated_at", "playlist_items_detail"]
read_only_fields = ["id", "view_count", "bookmark_count", "total_time", "created_at", "updated_at", "playlist_items_detail"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.PODCAST_PLAYLIST, content_id=obj.id, status=True).count()
def create(self, validated_data): def create(self, validated_data):
validated_data.pop("remove_thumbnail", False) validated_data.pop("remove_thumbnail", False)

18
apps/video/serializers_admin.py

@ -81,6 +81,8 @@ class AdminVideoDetailSerializer(serializers.ModelSerializer):
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
remove_video_file = serializers.BooleanField(write_only=True, required=False, default=False) remove_video_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = Video model = Video
fields = [ fields = [
@ -95,12 +97,17 @@ class AdminVideoDetailSerializer(serializers.ModelSerializer):
"video_time", "video_time",
"status", "status",
"view_count", "view_count",
"bookmark_count",
"created_at", "created_at",
"updated_at", "updated_at",
"remove_thumbnail", "remove_thumbnail",
"remove_video_file", "remove_video_file",
] ]
read_only_fields = ["id", "view_count", "created_at", "updated_at"]
read_only_fields = ["id", "view_count", "bookmark_count", "created_at", "updated_at"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.VIDEO, content_id=obj.id, status=True).count()
def validate(self, attrs): def validate(self, attrs):
video_type = attrs.get("video_type", getattr(self.instance, "video_type", None)) video_type = attrs.get("video_type", getattr(self.instance, "video_type", None))
@ -215,6 +222,8 @@ class AdminVideoPlaylistDetailSerializer(serializers.ModelSerializer):
playlist_items_detail = AdminVideoPlaylistItemSerializer(source="playlist_items", many=True, read_only=True) playlist_items_detail = AdminVideoPlaylistItemSerializer(source="playlist_items", many=True, read_only=True)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False) remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta: class Meta:
model = VideoPlaylist model = VideoPlaylist
fields = [ fields = [
@ -227,6 +236,7 @@ class AdminVideoPlaylistDetailSerializer(serializers.ModelSerializer):
"order", "order",
"status", "status",
"view_count", "view_count",
"bookmark_count",
"total_time", "total_time",
"created_at", "created_at",
"updated_at", "updated_at",
@ -237,7 +247,11 @@ class AdminVideoPlaylistDetailSerializer(serializers.ModelSerializer):
"playlist_items_detail", "playlist_items_detail",
"remove_thumbnail", "remove_thumbnail",
] ]
read_only_fields = ["id", "view_count", "total_time", "created_at", "updated_at", "playlist_items_detail"]
read_only_fields = ["id", "view_count", "bookmark_count", "total_time", "created_at", "updated_at", "playlist_items_detail"]
def get_bookmark_count(self, obj):
from apps.bookmark.models.bookmark import Bookmark
return Bookmark.objects.filter(service=Bookmark.ServiceChoices.VIDEO_PLAYLIST, content_id=obj.id, status=True).count()
def create(self, validated_data): def create(self, validated_data):
validated_data.pop("remove_thumbnail", False) validated_data.pop("remove_thumbnail", False)

Loading…
Cancel
Save