|
@@ -4,13 +4,17 @@ from graphql_jwt.decorators import login_required
|
|
|
from .models import Order,OrderGood
|
|
|
from goods.models import Good
|
|
|
import json
|
|
|
+from authAPI.schema import UserInput
|
|
|
from functools import reduce
|
|
|
from django.forms.models import model_to_dict
|
|
|
+from django.contrib.auth import get_user_model
|
|
|
|
|
|
import operator
|
|
|
from django.db.models import Q
|
|
|
|
|
|
|
|
|
+User = get_user_model()
|
|
|
+
|
|
|
|
|
|
|
|
|
class OrderGoodType(graphene.ObjectType):
|
|
@@ -21,7 +25,6 @@ class OrderGoodType(graphene.ObjectType):
|
|
|
order = graphene.Field(lambda:OrderType)
|
|
|
createdAt = graphene.String()
|
|
|
|
|
|
-
|
|
|
def resolve__id(self,info):
|
|
|
return self._id
|
|
|
|
|
@@ -32,12 +35,13 @@ class OrderGoodType(graphene.ObjectType):
|
|
|
return self.price
|
|
|
|
|
|
def resolve_count(self,info):
|
|
|
- print(self)
|
|
|
return self.count
|
|
|
|
|
|
def resolve_order(self,info):
|
|
|
return self.order
|
|
|
|
|
|
+
|
|
|
+
|
|
|
def resolve_createdAt(self,info):
|
|
|
return self.createdAt.strftime('%s')
|
|
|
|
|
@@ -46,7 +50,6 @@ class OrderGoodInput(graphene.InputObjectType):
|
|
|
_id = graphene.String(name='_id')
|
|
|
good = graphene.Field("goods.schema.GoodInput")
|
|
|
count = graphene.Int()
|
|
|
- order = graphene.Field(lambda:OrderInput)
|
|
|
|
|
|
|
|
|
|
|
@@ -61,6 +64,7 @@ class OrderType(graphene.ObjectType):
|
|
|
price = graphene.Int()
|
|
|
orderGoods = graphene.List(OrderGoodType)
|
|
|
delivery = graphene.String()
|
|
|
+ owner = graphene.Field('authAPI.schema.UserType')
|
|
|
|
|
|
|
|
|
|
|
@@ -83,6 +87,9 @@ class OrderType(graphene.ObjectType):
|
|
|
except:
|
|
|
return self.orderGoods.all()
|
|
|
|
|
|
+ def resolve_owner(self,info):
|
|
|
+ return self.owner
|
|
|
+
|
|
|
def resolve_createdAt(self,info):
|
|
|
return self.createdAt.strftime('%s')
|
|
|
|
|
@@ -92,6 +99,7 @@ class OrderInput(graphene.InputObjectType):
|
|
|
status = graphene.Int()
|
|
|
price = graphene.Int()
|
|
|
delivery = graphene.String()
|
|
|
+ owner = graphene.Field(UserInput)
|
|
|
orderGoods = graphene.List(OrderGoodInput)
|
|
|
|
|
|
|
|
@@ -110,23 +118,27 @@ class Query(graphene.ObjectType):
|
|
|
additional_params = {}
|
|
|
query_list = json.loads(query)
|
|
|
filter_params = query_list[0]
|
|
|
+
|
|
|
+ if "status" in filter_params and int(filter_params.get("status")) == 0:
|
|
|
+ filter_params.pop("status")
|
|
|
+
|
|
|
if len(query_list) > 1:
|
|
|
additional_params = query_list[1]
|
|
|
|
|
|
+
|
|
|
skip = int(additional_params.get("skip",0))
|
|
|
limit = int(additional_params.get("limit",20))
|
|
|
order_by = additional_params.get("orderBy","_id")
|
|
|
|
|
|
user = info.context.user
|
|
|
- if not user.is_superuser:
|
|
|
+ if user.is_superuser:
|
|
|
query_set = Order.objects.all()
|
|
|
-
|
|
|
else:
|
|
|
query_set = Order.objects.filter(owner = user)
|
|
|
|
|
|
|
|
|
if len(filter_params):
|
|
|
- query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
|
|
|
+ query_set = query_set.filter(reduce(operator.or_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
|
|
|
|
|
|
query_set = query_set.order_by(order_by)[skip:skip+limit]
|
|
|
return query_set
|
|
@@ -142,8 +154,12 @@ class Query(graphene.ObjectType):
|
|
|
skip = additional_params.get("skip",0)
|
|
|
limit = additional_params.get("limit",20)
|
|
|
order_by = additional_params.get("orderBy","_id")
|
|
|
+ user = info.context.user
|
|
|
|
|
|
- query_set = Order.objects.all()
|
|
|
+ if user.is_superuser:
|
|
|
+ query_set = Order.objects.all()
|
|
|
+ else:
|
|
|
+ query_set = Order.objects.filter(owner = user)
|
|
|
|
|
|
if len(filter_params):
|
|
|
query_set = query_set.filter(reduce(operator.and_,(Q(**d) for d in [dict([i]) for i in filter_params.items()])))
|
|
@@ -204,29 +220,45 @@ class OrderUpsert(graphene.Mutation):
|
|
|
def mutate(root,info,order):
|
|
|
|
|
|
user = info.context.user
|
|
|
- if not user.is_superuser:
|
|
|
+
|
|
|
+ if not user.is_authenticated:
|
|
|
raise Exception("Authentication credentials were not provided")
|
|
|
|
|
|
orderPrice = 0
|
|
|
new_order={}
|
|
|
+ owner = None
|
|
|
orderGoods_list = []
|
|
|
- # user = info.context.user
|
|
|
- # if not user.is_superuser:
|
|
|
- # raise Exception("Authentication credentials were not provided")
|
|
|
+
|
|
|
|
|
|
if "orderGoods" in order:
|
|
|
orderGoods_list = order.pop("orderGoods",[])
|
|
|
|
|
|
+
|
|
|
+ if "owner" in order:
|
|
|
+ try:
|
|
|
+ owner = User.objects.get(pk =order.pop("owner")["_id"])
|
|
|
+ except:
|
|
|
+ raise Exception("Не вірні дані")
|
|
|
|
|
|
+ try:
|
|
|
+ if "_id" in order:
|
|
|
|
|
|
+ new_order = Order.objects.get(_id = order._id)
|
|
|
|
|
|
- try:
|
|
|
- _id = order.pop("_id",None)
|
|
|
- new_order = Order.objects.get(_id = _id)
|
|
|
- new_order.__dict__.update(**order)
|
|
|
- except Exception as e:
|
|
|
- new_order = Order(**order)
|
|
|
+ if not user.is_superuser:
|
|
|
+ raise Exception("Authentication credentials were not provided")
|
|
|
|
|
|
+ new_order.__dict__.update(**order)
|
|
|
+
|
|
|
+ if owner:
|
|
|
+ new_order.owner = owner
|
|
|
+
|
|
|
+ else:
|
|
|
+ new_order = Order(**order)
|
|
|
+ new_order.owner = user
|
|
|
+
|
|
|
+ except Exception as e:
|
|
|
+ raise Exception("Не вірні дані")
|
|
|
|
|
|
|
|
|
if new_order:
|
|
@@ -241,7 +273,7 @@ class OrderUpsert(graphene.Mutation):
|
|
|
for orderGood in orderGoods_list:
|
|
|
|
|
|
try:
|
|
|
- good = Good.objects.get(_id = orderGood.get("_id"))
|
|
|
+ good = Good.objects.get(_id = orderGood.get("good")["_id"])
|
|
|
except:
|
|
|
raise Exception("Товар не знайдено")
|
|
|
|