list.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from datetime import timedelta
  2. from rest_framework.response import Response
  3. from django.contrib.auth import get_user_model
  4. from django.db.models import Count
  5. from django.http import Http404
  6. from django.shortcuts import get_object_or_404
  7. from django.utils import timezone
  8. from misago.conf import settings
  9. from misago.core.cache import cache
  10. from misago.core.shortcuts import get_int_or_404, paginate
  11. from misago.users.models import Rank
  12. from misago.users.online.utils import make_users_status_aware
  13. from misago.users.serializers import UserCardSerializer
  14. from misago.users.viewmodels import ActivePosters, RankUsers
  15. UserModel = get_user_model()
  16. def active(request):
  17. users = ActivePosters(request)
  18. return Response(users.get_frontend_context())
  19. def rank_users(request):
  20. rank_pk = get_int_or_404(request.query_params.get('rank'))
  21. rank = get_object_or_404(Rank.objects, pk=rank_pk, is_tab=True)
  22. page = get_int_or_404(request.GET.get('page', 0))
  23. if page == 1:
  24. page = 0 # api allows explicit first page
  25. users = RankUsers(request, rank, page)
  26. return Response(users.get_frontend_context())
  27. LISTS = {
  28. 'active': active,
  29. }
  30. def list_endpoint(request):
  31. list_type = request.query_params.get('list')
  32. list_handler = LISTS.get(list_type)
  33. if list_handler:
  34. return list_handler(request)
  35. else:
  36. return rank_users(request)
  37. ScoredUserSerializer = UserCardSerializer.extend_fields('meta')