views.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. from django.http import HttpResponse, JsonResponse
  2. from django.views.decorators.csrf import csrf_exempt
  3. from rest_framework.parsers import JSONParser
  4. from .models import Category
  5. from .serializers import CategorySerializer
  6. import json
  7. from rest_framework.decorators import api_view, permission_classes,authentication_classes
  8. from rest_framework.permissions import IsAdminUser,IsAdminUser
  9. from rest_framework_simplejwt.authentication import JWTAuthentication
  10. from django.db.models import Q
  11. @csrf_exempt
  12. @api_view(["GET"])
  13. def category_list(request,):
  14. skip = int(request.GET.get("skip",0))
  15. limit = int(request.GET.get("limit",50))
  16. isRoot = int(request.GET.get("root",0))
  17. text = request.GET.get("text","")
  18. orderBy = request.GET.get("orderBy","_id")
  19. try:
  20. if text:
  21. categories = Category.objects.filter(Q(name__contains = text) ).order_by(orderBy)[skip:skip+limit]
  22. elif isRoot:
  23. categories = Category.objects.filter(parent=None).order_by(orderBy)[skip:skip+limit]
  24. else:
  25. categories = Category.objects.all().order_by(orderBy)[skip:skip+limit]
  26. except Exception as e:
  27. return JsonResponse({"errors":[{"message":"Не вірні дані"}]}, safe=False)
  28. serializer = CategorySerializer(categories, many=True)
  29. return JsonResponse({"data":serializer.data}, safe=False)
  30. @csrf_exempt
  31. @api_view(["GET"])
  32. def category_detail(request,_id):
  33. try:
  34. goods_order_by = request.GET.get("orderBy","_id")
  35. goods_limit = request.GET.get("limit",20)
  36. goods_skip = request.GET.get("skip",0)
  37. except:
  38. return JsonResponse({"errors":[{"message":"Невірні параметри запиту"}]}, safe=False)
  39. try:
  40. category = Category.objects.get(_id = _id)
  41. except Exception as e:
  42. return JsonResponse({"errors":[{"message":"Категорию не знайдено"}]}, safe=False)
  43. if category:
  44. serializer = CategorySerializer(category,context = {"goods_order_by":goods_order_by,"goods_limit":goods_limit,"goods_skip":goods_skip})
  45. return JsonResponse({"data":serializer.data}, safe=False)
  46. else:
  47. return JsonResponse({"data":{}}, safe=False)
  48. @csrf_exempt
  49. @api_view(["POST"])
  50. @permission_classes((IsAdminUser, ))
  51. @authentication_classes([JWTAuthentication])
  52. def category_upsert(request):
  53. try:
  54. _id = request.POST.get('_id',None)
  55. name = request.POST.get("name", "")
  56. subcategories = json.loads(request.POST.get("subcategories", "[]"))
  57. parent = request.POST.get("parent", None)
  58. goods = json.loads(request.POST.get("goods","[]"))
  59. except:
  60. return JsonResponse({"errors":[{"message":"Не вірні дані"}]}, safe=False)
  61. if _id :
  62. try:
  63. category = Category.objects.get(_id = _id)
  64. except Exception as e:
  65. return JsonResponse({"errors":[{"message":"Не вірні дані"}]}, safe=False)
  66. category.name = name
  67. else:
  68. category = Category.objects.create(name=name)
  69. if parent:
  70. print(parent)
  71. category.parent = Category.objects.get(_id=json.loads(parent)["_id"])
  72. category.goods.clear()
  73. for good in goods:
  74. category.goods.add(good["_id"])
  75. category.subcategories.clear()
  76. for subcategory in subcategories:
  77. try:
  78. category.subcategories.add(Category.objects.get(_id = subcategory["_id"]))
  79. except:
  80. return JsonResponse({"errors":[{"message":"Батькову категорію не знайдено"}]}, safe=False)
  81. if category:
  82. category.save()
  83. serializer = CategorySerializer(category)
  84. return JsonResponse({"data":serializer.data}, safe=False)
  85. else:
  86. return JsonResponse({"data":{}}, safe=False)
  87. @csrf_exempt
  88. @api_view(['GET'])
  89. @authentication_classes([JWTAuthentication])
  90. @permission_classes((IsAdminUser, ))
  91. def category_delete(request,_id):
  92. try:
  93. category = Category.objects.get(_id = _id)
  94. except Exception as e:
  95. return JsonResponse({"errors":[{"message":"Категорію не знайдено"}]}, safe=False)
  96. if category:
  97. category.delete()
  98. return JsonResponse({"data":{"_id":_id}}, safe=False)
  99. return JsonResponse({"data":{}}, safe=False)