schema.py 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. import graphene
  2. from graphene_django.types import DjangoObjectType
  3. from graphql_jwt.decorators import login_required
  4. from .models import Good,Image
  5. import json
  6. from functools import reduce
  7. from .serializers import GoodSerializer
  8. import operator
  9. from django.db.models import Q
  10. class ImageType(DjangoObjectType):
  11. _id = graphene.String(name='_id')
  12. class Meta:
  13. model = Image
  14. exclude_fields = ('_id',)
  15. def resolve__id(self,info):
  16. return self._id
  17. class ImageInput(graphene.InputObjectType):
  18. _id = graphene.String(name='_id')
  19. url = graphene.String(name='url',required=True)
  20. class GoodType(DjangoObjectType):
  21. _id = graphene.String(name='_id')
  22. images = graphene.List(ImageType)
  23. name = graphene.String()
  24. description = graphene.String()
  25. price = graphene.Int()
  26. amount = graphene.Int()
  27. class Meta:
  28. model = Good
  29. exclude_fields = ('_id',"name","description","price","amount",)
  30. def resolve__id(self,info):
  31. return self._id
  32. def resolve_images(self,info):
  33. return self.images.all()
  34. def resolve_name(self,info):
  35. return self.name
  36. def resolve_description(self,info):
  37. return self.description
  38. def resolve_price(self,info):
  39. return self.price
  40. def resolve_amount(self,info):
  41. return self.amount
  42. class GoodInput(graphene.InputObjectType):
  43. _id = graphene.String(name='_id')
  44. images = graphene.List(ImageInput)
  45. name = graphene.String()
  46. description = graphene.String()
  47. price = graphene.Int()
  48. amount = graphene.Int()
  49. class Query(graphene.ObjectType):
  50. GoodFind = graphene.List(GoodType,query = graphene.String())
  51. GoodFindOne = graphene.Field(GoodType,query = graphene.String())
  52. ImageFind = graphene.List(ImageType,query = graphene.String())
  53. ImageFindOne = graphene.Field(ImageType,query = graphene.String())
  54. def resolve_GoodFind(self,info,query = "[{}]"):
  55. additional_params = {}
  56. query_list = json.loads(query)
  57. filter_params = query_list[0]
  58. if len(query_list) > 1:
  59. additional_params = query_list[1]
  60. skip = additional_params.get("skip",0)
  61. limit = additional_params.get("limit",20)
  62. order_by = additional_params.get("orderBy","_id")
  63. query_set = Good.objects.all()
  64. if len(filter_params):
  65. query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
  66. return query_set
  67. def resolve_GoodFindOne(self,info,query = "[{}]"):
  68. additional_params = {}
  69. query_list = json.loads(query)
  70. filter_params = query_list[0]
  71. if len(query_list) > 1:
  72. additional_params = query_list[1]
  73. skip = additional_params.get("skip",0)
  74. limit = additional_params.get("limit",20)
  75. order_by = additional_params.get("orderBy","_id")
  76. query_set = Good.objects.all()
  77. if len(filter_params):
  78. query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
  79. return query_set.first()
  80. def resolve_ImageFind(self,info,query = "[{}]"):
  81. additional_params = {}
  82. query_list = json.loads(query)
  83. filter_params = query_list[0]
  84. if len(query_list) > 1:
  85. additional_params = query_list[1]
  86. skip = additional_params.get("skip",0)
  87. limit = additional_params.get("limit",20)
  88. order_by = additional_params.get("orderBy","_id")
  89. query_set = Image.objects.all()
  90. if len(filter_params):
  91. query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
  92. return query_set
  93. def resolve_ImageFindOne(self,info,query = "[{}]"):
  94. additional_params = {}
  95. query_list = json.loads(query)
  96. filter_params = query_list[0]
  97. if len(query_list) > 1:
  98. additional_params = query_list[1]
  99. skip = additional_params.get("skip",0)
  100. limit = additional_params.get("limit",20)
  101. order_by = additional_params.get("orderBy","_id")
  102. query_set = Image.objects.all()
  103. if len(filter_params):
  104. query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
  105. return query_set.first()
  106. class GoodUpsert(graphene.Mutation):
  107. class Arguments:
  108. good = GoodInput(required=True)
  109. Output =GoodType
  110. @staticmethod
  111. def mutate(root,info,good):
  112. # user = info.context.user
  113. # if not user.is_superuser:
  114. # raise Exception("Authentication credentials were not provided")
  115. new_good={}
  116. try:
  117. _id = good._id
  118. new_good = Good.objects.get(_id = _id)
  119. good.pop("_id",None)
  120. new_good.__dict__.update(**good)
  121. new_good.save()
  122. except Exception as e:
  123. new_good = Good(**good)
  124. new_good.save()
  125. print(GoodSerializer(new_good).data)
  126. return GoodType(**GoodSerializer(new_good).data)
  127. class GoodDelete(graphene.Mutation):
  128. class Arguments:
  129. good = GoodInput(required=True)
  130. Output =GoodType
  131. @staticmethod
  132. def mutate(root,info,good):
  133. # user = info.context.user
  134. # if not user.is_superuser:
  135. # raise Exception("Authentication credentials were not provided")
  136. try:
  137. _id = good._id
  138. good_to_delete = Good.objects.get(_id=_id)
  139. good_data = GoodSerializer(good_to_delete).data
  140. good_to_delete.delete()
  141. except:
  142. raise Exception("Не вірні дані")
  143. return GoodType(**good_data)
  144. class Mutations(graphene.ObjectType):
  145. GoodUpsert = GoodUpsert.Field()
  146. GoodDelete = GoodDelete.Field()