api.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. from django.db import transaction
  2. from rest_framework import viewsets
  3. from rest_framework.decorators import detail_route
  4. from rest_framework.response import Response
  5. from misago.core.shortcuts import get_int_or_404, get_object_or_404
  6. from misago.readtracker.categoriestracker import read_category
  7. from misago.threads.threadtypes import trees_map
  8. from .models import THREADS_ROOT_NAME, Category
  9. from .permissions import allow_browse_category, allow_see_category
  10. from .serializers import CategorySerializer
  11. from .utils import get_categories_tree
  12. class CategoryViewSet(viewsets.ViewSet):
  13. def list(self, request):
  14. categories_tree = get_categories_tree(request.user)
  15. return Response(CategorySerializer(categories_tree, many=True).data)
  16. @detail_route(methods=['post'])
  17. @transaction.atomic
  18. def read(self, request, pk):
  19. request.user.lock()
  20. category_id = get_int_or_404(pk)
  21. threads_tree_id = trees_map.get_tree_id_for_root(THREADS_ROOT_NAME)
  22. category = get_object_or_404(Category,
  23. id=category_id,
  24. tree_id=threads_tree_id,
  25. )
  26. if category.level:
  27. allow_see_category(request.user, category)
  28. allow_browse_category(request.user, category)
  29. read_category(request.user, category)
  30. return Response({'detail': 'ok'})