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 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):
@ -45,10 +45,17 @@ class AdminArticleCategorySerializer(serializers.ModelSerializer):
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):
thumbnail = AbsoluteImageField(required=False, allow_null=True)
article_file = AbsoluteFileField(required=False, allow_null=True)
categories = AdminArticleCategorySerializer(many=True, read_only=True)
collections_detail = AdminArticleCollectionSerializer(source="collections", many=True, read_only=True)
class Meta:
model = Article
@ -65,6 +72,7 @@ class AdminArticleListSerializer(serializers.ModelSerializer):
"created_at",
"updated_at",
"categories",
"collections_detail",
]
read_only_fields = ["id", "view_count", "download_count", "created_at", "updated_at"]
@ -78,9 +86,17 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
required=False,
)
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_article_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = Article
fields = [
@ -93,30 +109,41 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
"article_file",
"view_count",
"download_count",
"bookmark_count",
"status",
"created_at",
"updated_at",
"categories",
"categories_detail",
"collections",
"collections_detail",
"embedded_in",
"remove_thumbnail",
"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):
validated_data.pop("remove_thumbnail", False)
validated_data.pop("remove_article_file", False)
categories = validated_data.pop("categories", [])
collections = validated_data.pop("collections", [])
article = super().create(validated_data)
if categories:
article.categories.set(categories)
if collections:
article.collections.set(collections)
return article
def update(self, instance, validated_data):
remove_thumbnail = validated_data.pop("remove_thumbnail", False)
remove_article_file = validated_data.pop("remove_article_file", False)
categories = validated_data.pop("categories", None)
collections = validated_data.pop("collections", None)
if remove_thumbnail and instance.thumbnail:
instance.thumbnail.delete(save=False)
@ -129,6 +156,8 @@ class AdminArticleDetailSerializer(serializers.ModelSerializer):
article = super().update(instance, validated_data)
if categories is not None:
article.categories.set(categories)
if collections is not None:
article.collections.set(collections)
return article

18
apps/hadis/serializers/serializers_admin.py

@ -95,6 +95,8 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
required=False,
)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = Hadis
fields = [
@ -118,11 +120,16 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
"tags_detail",
"share_link",
"explanation",
"bookmark_count",
"created_at",
"updated_at",
"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):
tags = validated_data.pop("tags", [])
@ -142,6 +149,8 @@ class AdminHadisDetailSerializer(serializers.ModelSerializer):
class AdminHadisCorrectionSerializer(serializers.ModelSerializer):
hadis_detail = AdminHadisListSerializer(source="hadis", read_only=True)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = HadisCorrection
fields = [
@ -153,10 +162,15 @@ class AdminHadisCorrectionSerializer(serializers.ModelSerializer):
"text",
"translation",
"priority",
"bookmark_count",
"created_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):

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_audio_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = Podcast
fields = [
@ -99,6 +101,7 @@ class AdminPodcastDetailSerializer(serializers.ModelSerializer):
"status",
"view_count",
"download_count",
"bookmark_count",
"created_at",
"updated_at",
"categories",
@ -108,7 +111,11 @@ class AdminPodcastDetailSerializer(serializers.ModelSerializer):
"remove_thumbnail",
"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):
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)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = PodcastPlaylist
fields = [
@ -226,6 +235,7 @@ class AdminPodcastPlaylistDetailSerializer(serializers.ModelSerializer):
"order",
"status",
"view_count",
"bookmark_count",
"total_time",
"created_at",
"updated_at",
@ -236,7 +246,11 @@ class AdminPodcastPlaylistDetailSerializer(serializers.ModelSerializer):
"playlist_items_detail",
"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):
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_video_file = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = Video
fields = [
@ -95,12 +97,17 @@ class AdminVideoDetailSerializer(serializers.ModelSerializer):
"video_time",
"status",
"view_count",
"bookmark_count",
"created_at",
"updated_at",
"remove_thumbnail",
"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):
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)
remove_thumbnail = serializers.BooleanField(write_only=True, required=False, default=False)
bookmark_count = serializers.SerializerMethodField()
class Meta:
model = VideoPlaylist
fields = [
@ -227,6 +236,7 @@ class AdminVideoPlaylistDetailSerializer(serializers.ModelSerializer):
"order",
"status",
"view_count",
"bookmark_count",
"total_time",
"created_at",
"updated_at",
@ -237,7 +247,11 @@ class AdminVideoPlaylistDetailSerializer(serializers.ModelSerializer):
"playlist_items_detail",
"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):
validated_data.pop("remove_thumbnail", False)

Loading…
Cancel
Save