list.py 1.2 KB

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