from asyncio.log import logger import logging from pingcap_sso.blog.models import ( User, Post, Like, Favorite ) logger = logging.getLogger(__name__) def _get_blog_user(sso_user, log_error_if_not_exists=True): try: return User.objects.get(openid=sso_user.openid) except User.DoesNotExist: if log_error_if_not_exists: logger.error(f'SSO user does not found in blog by external_id: { sso_user.openid }') return None def blog_user_summary(sso_user): blog_user = _get_blog_user(sso_user, log_error_if_not_exists=False) if not blog_user: return published_posts_count = Post.objects.filter( author=blog_user, status=Post.STATUS_PUBLISHED, deleted_at__isnull=True ).count() likes_given = Like.objects.filter( user=blog_user ).count() likes_received = Like.objects.filter( post__author=blog_user ).count() bookmark_count = Favorite.objects.filter( user=blog_user ).count() bookmarked_count = Favorite.objects.filter( post__author=blog_user ).count() return { 'published_posts_count': published_posts_count, 'likes_given': likes_given, 'likes_received': likes_received, 'bookmark_count': bookmark_count, 'bookmarked_count': bookmarked_count }