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)