updatestats.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. from django.db.models import F
  2. from . import PostingEndpoint, PostingMiddleware
  3. from ....categories import THREADS_ROOT_NAME
  4. class UpdateStatsMiddleware(PostingMiddleware):
  5. def save(self, serializer):
  6. self.update_user(self.user, self.post)
  7. self.update_thread(self.thread, self.post)
  8. self.update_category(self.thread.category, self.thread, self.post)
  9. def update_category(self, category, thread, post):
  10. if post.is_unapproved:
  11. return # don't update category on moderated post
  12. if self.mode == PostingEndpoint.START:
  13. category.threads = F("threads") + 1
  14. if self.mode != PostingEndpoint.EDIT:
  15. category.set_last_thread(thread)
  16. category.posts = F("posts") + 1
  17. category.update_all = True
  18. def update_thread(self, thread, post):
  19. if post.is_unapproved:
  20. thread.has_unapproved_posts = True
  21. if self.post.id == self.thread.first_post_id:
  22. thread.is_unapproved = True
  23. else:
  24. if self.mode != PostingEndpoint.EDIT:
  25. thread.set_last_post(post)
  26. if self.mode == PostingEndpoint.REPLY:
  27. thread.replies = F("replies") + 1
  28. thread.update_all = True
  29. def update_user(self, user, post):
  30. if post.is_unapproved:
  31. return # don't update user on moderated post
  32. if self.thread.thread_type.root_name == THREADS_ROOT_NAME:
  33. if self.mode == PostingEndpoint.START:
  34. user.threads = F("threads") + 1
  35. user.update_fields.append("threads")
  36. if self.mode != PostingEndpoint.EDIT:
  37. user.posts = F("posts") + 1
  38. user.update_fields.append("posts")