From 7df99afdc7eb4f82dba68e97b8fd27b8ff58eafc Mon Sep 17 00:00:00 2001 From: Mouse Reeve Date: Wed, 5 Jan 2022 14:54:51 -0800 Subject: [PATCH] Cache status interact buttons --- bookwyrm/models/status.py | 1 + .../templates/snippets/status/layout.html | 60 ++++++++++--------- bookwyrm/views/interaction.py | 14 ++++- 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/bookwyrm/models/status.py b/bookwyrm/models/status.py index c7c0a4253..ee138d979 100644 --- a/bookwyrm/models/status.py +++ b/bookwyrm/models/status.py @@ -82,6 +82,7 @@ class Status(OrderedCollectionPageMixin, BookWyrmModel): if not self.reply_parent: self.thread_id = self.id + super().save(broadcast=False, update_fields=["thread_id"]) def delete(self, *args, **kwargs): # pylint: disable=unused-argument diff --git a/bookwyrm/templates/snippets/status/layout.html b/bookwyrm/templates/snippets/status/layout.html index 93620a083..174c379f1 100644 --- a/bookwyrm/templates/snippets/status/layout.html +++ b/bookwyrm/templates/snippets/status/layout.html @@ -1,6 +1,7 @@ {% extends 'components/card.html' %} {% load i18n %} {% load utilities %} +{% load cache %} {% block card-header %} - - -{% if not moderation_mode %} - -{% endif %} + {% cache 259200 interact request.user.id status.id %} + + + + {% if not moderation_mode %} + + {% endif %} + {% endcache %} {% else %} - {% endif %} {% endblock %} diff --git a/bookwyrm/views/interaction.py b/bookwyrm/views/interaction.py index 910360d7a..9e897beb8 100644 --- a/bookwyrm/views/interaction.py +++ b/bookwyrm/views/interaction.py @@ -1,6 +1,8 @@ """ boosts and favs """ -from django.db import IntegrityError from django.contrib.auth.decorators import login_required +from django.core.cache import cache +from django.core.cache.utils import make_template_fragment_key +from django.db import IntegrityError from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseNotFound from django.shortcuts import redirect from django.utils.decorators import method_decorator @@ -17,6 +19,7 @@ class Favorite(View): def post(self, request, status_id): """create a like""" + clear_cache(request.user.id, status_id) status = models.Status.objects.get(id=status_id) try: models.Favorite.objects.create(status=status, user=request.user) @@ -43,6 +46,7 @@ class Unfavorite(View): return HttpResponseNotFound() favorite.delete() + clear_cache(request.user.id, status_id) if is_api_request(request): return HttpResponse() return redirect(request.headers.get("Referer", "/")) @@ -70,6 +74,7 @@ class Boost(View): privacy=status.privacy, user=request.user, ) + clear_cache(request.user.id, status_id) if is_api_request(request): return HttpResponse() return redirect(request.headers.get("Referer", "/")) @@ -87,6 +92,13 @@ class Unboost(View): ).first() boost.delete() + clear_cache(request.user.id, status_id) if is_api_request(request): return HttpResponse() return redirect(request.headers.get("Referer", "/")) + + +def clear_cache(user_id, status_id): + """clear template cache""" + cache_key = make_template_fragment_key("interact", [user_id, status_id]) + cache.delete(cache_key)