views.py 4.9 KB

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