optimize feed
This commit is contained in:
parent
4154668a91
commit
889c429f52
3 changed files with 43 additions and 13 deletions
|
@ -26,21 +26,27 @@ def liked_piece(context, piece):
|
|||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def liked_post(context, post):
|
||||
user = context["request"].user
|
||||
return (
|
||||
user
|
||||
and user.is_authenticated
|
||||
and post.interactions.filter(identity_id=user.identity.pk, type="like").exists()
|
||||
)
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def boosted_post(context, post):
|
||||
if post.liked_by_current_user is not None:
|
||||
return post.liked_by_current_user
|
||||
user = context["request"].user
|
||||
return (
|
||||
user
|
||||
and user.is_authenticated
|
||||
and post.interactions.filter(
|
||||
identity_id=user.identity.pk, type="boost"
|
||||
identity_id=user.identity.pk, type="like", state__in=["new", "fanned_out"]
|
||||
).exists()
|
||||
)
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def boosted_post(context, post):
|
||||
if post.boosted_by_current_user is not None:
|
||||
return post.boosted_by_current_user
|
||||
user = context["request"].user
|
||||
return (
|
||||
user
|
||||
and user.is_authenticated
|
||||
and post.interactions.filter(
|
||||
identity_id=user.identity.pk, type="boost", state__in=["new", "fanned_out"]
|
||||
).exists()
|
||||
)
|
||||
|
|
|
@ -5,7 +5,7 @@ from django.views.decorators.http import require_http_methods
|
|||
|
||||
from catalog.models import *
|
||||
from journal.models import *
|
||||
from takahe.models import TimelineEvent
|
||||
from takahe.models import PostInteraction, TimelineEvent
|
||||
from takahe.utils import Takahe
|
||||
|
||||
from .models import *
|
||||
|
@ -59,9 +59,10 @@ def feed(request):
|
|||
@require_http_methods(["GET"])
|
||||
def data(request):
|
||||
since_id = int(request.GET.get("last", 0))
|
||||
identity_id = request.user.identity.pk
|
||||
events = (
|
||||
TimelineEvent.objects.filter(
|
||||
identity_id=request.user.identity.pk,
|
||||
identity_id=identity_id,
|
||||
type__in=[TimelineEvent.Types.post, TimelineEvent.Types.boost],
|
||||
)
|
||||
.order_by("-id")
|
||||
|
@ -83,6 +84,23 @@ def data(request):
|
|||
)
|
||||
if since_id:
|
||||
events = events.filter(id__lt=since_id)
|
||||
events = list(events[:PAGE_SIZE])
|
||||
interactions = PostInteraction.objects.filter(
|
||||
identity_id=identity_id,
|
||||
post_id__in=[event.subject_post_id for event in events],
|
||||
type__in=["like", "boost"],
|
||||
state__in=["new", "fanned_out"],
|
||||
).values_list("post_id", "type")
|
||||
for event in events:
|
||||
if event.subject_post_id:
|
||||
event.subject_post.liked_by_current_user = (
|
||||
event.subject_post_id,
|
||||
"like",
|
||||
) in interactions
|
||||
event.subject_post.boosted_by_current_user = (
|
||||
event.subject_post_id,
|
||||
"boost",
|
||||
) in interactions
|
||||
return render(request, "feed_events.html", {"events": events})
|
||||
|
||||
|
||||
|
|
|
@ -899,6 +899,9 @@ class Post(models.Model):
|
|||
A post (status, toot) that is either local or remote.
|
||||
"""
|
||||
|
||||
liked_by_current_user = None
|
||||
boosted_by_current_user = None
|
||||
|
||||
if TYPE_CHECKING:
|
||||
author_id: int
|
||||
interactions: "models.QuerySet[PostInteraction]"
|
||||
|
@ -1950,6 +1953,9 @@ class TimelineEvent(models.Model):
|
|||
or more timelines, like posts, likes and follows.
|
||||
"""
|
||||
|
||||
if TYPE_CHECKING:
|
||||
subject_post_id: int
|
||||
|
||||
class Types(models.TextChoices):
|
||||
post = "post"
|
||||
boost = "boost" # A boost from someone (post substitute)
|
||||
|
|
Loading…
Add table
Reference in a new issue