Source code for services.posts.post_views
from typing import TYPE_CHECKING
from django.db import transaction
from apps.posts.models import View
if TYPE_CHECKING:
from apps.posts.models import Post
from apps.users.models import User
[docs]
class PostViewService:
@classmethod
def _create_view(cls, post: "Post", user: "User") -> "View":
obj, created = View.objects.get_or_create(post=post, author=user)
if created:
post.views_quantity = post.views.count()
post.save()
return obj
[docs]
@classmethod
@transaction.atomic
def view(cls, post: "Post", user: "User") -> "View":
"""
Creates view of post if user doesn't have it before and refresh total quantity of posts
:param post: Viewed post
:param user: The user which viewed post
:return: View instance
"""
return cls._create_view(post=post, user=user)