list.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. from django.contrib.auth import get_user_model
  2. from django.shortcuts import get_object_or_404
  3. from rest_framework.response import Response
  4. from ....core.shortcuts import get_int_or_404
  5. from ...models import Rank
  6. from ...serializers import UserCardSerializer
  7. from ...viewmodels import ActivePosters, RankUsers
  8. User = 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 = {"active": active}
  21. def list_endpoint(request):
  22. list_type = request.query_params.get("list")
  23. list_handler = LISTS.get(list_type)
  24. if list_handler:
  25. return list_handler(request)
  26. else:
  27. return rank_users(request)
  28. ScoredUserSerializer = UserCardSerializer.extend_fields("meta")