From 1201ae26dfdda7d9d3f93c1d26d7b2daafe0e43a Mon Sep 17 00:00:00 2001 From: Mustafa Bin Hadi <91639104+mustafabinhadi@users.noreply.github.com> Date: Tue, 9 Nov 2021 14:34:24 +0300 Subject: [PATCH] last task --- commerce/controllers.py | 46 +++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/commerce/controllers.py b/commerce/controllers.py index a8a551a..cf4a372 100644 --- a/commerce/controllers.py +++ b/commerce/controllers.py @@ -63,7 +63,6 @@ def list_products( # print(product) # # order = Product.objects.all().select_related('address', 'user').prefetch_related('items') - # try: # one_product = Product.objects.get(id='8d3dd0f1-2910-457c-89e3-1b0ed6aa720a') # except Product.DoesNotExist: @@ -72,45 +71,31 @@ def list_products( # # shortcut_function = get_object_or_404(Product, id='8d3dd0f1-2910-457c-89e3-1b0ed6aa720a') # print(shortcut_function) - # print(type(product)) # print(product.merchant.name) # print(type(product.merchant)) # print(type(product.category)) - - Product <- Merchant, Label, Category, Vendor - Retrieve 1000 Products form DB - products = Product.objects.all()[:1000] (select * from product limit 1000) - for p in products: print(p) for every product, we retrieve (Merchant, Label, Category, Vendor) records - Merchant.objects.get(id=p.merchant_id) (select * from merchant where id = 'p.merchant_id') Label.objects.get(id=p.label_id) (select * from merchant where id = 'p.label_id') Category.objects.get(id=p.category_id) (select * from merchant where id = 'p.category_id') Vendor.objects.get(id=p.vendor_id) (select * from merchant where id = 'p.vendor_id') - 4*1000+1 - Solution: Eager loading - products = (select * from product limit 1000) - mids = [p1.merchant_id, p2.merchant_id, ...] [p1.label_id, p2.label_id, ...] . . . - select * from merchant where id in (mids) * 4 for (label, category and vendor) - 4+1 - """ @@ -180,7 +165,7 @@ def delete_city(request, id: UUID4): 404: MessageOut }) def view_cart(request): - cart_items = Item.objects.filter(user=User.objects.first(), ordered=False) + cart_items = Item.objects.filter(id=request.auth['pk'], ordered=False) if cart_items: return cart_items @@ -193,12 +178,13 @@ def view_cart(request): # 400: MessageOut }) def add_update_cart(request, item_in: ItemCreate): + try: - item = Item.objects.get(product_id=item_in.product_id, user=User.objects.first()) + item = Item.objects.get(product_id=item_in.product_id, user=User.objects.get(id=request.auth['pk']), ordered=False) item.item_qty += 1 item.save() except Item.DoesNotExist: - Item.objects.create(**item_in.dict(), user=User.objects.first()) + Item.objects.create(**item_in.dict(), user=User.objects.get(id=request.auth['pk'])) return 200, {'detail': 'Added to cart successfully'} @@ -207,7 +193,7 @@ def add_update_cart(request, item_in: ItemCreate): 200: MessageOut, }) def reduce_item_quantity(request, id: UUID4): - item = get_object_or_404(Item, id=id, user=User.objects.first()) + item = get_object_or_404(Item, id=id, user=User.objects.get(id=request.auth['pk']),ordered=False) if item.item_qty <= 1: item.delete() return 200, {'detail': 'Item deleted!'} @@ -221,7 +207,7 @@ def reduce_item_quantity(request, id: UUID4): 204: MessageOut }) def delete_item(request, id: UUID4): - item = get_object_or_404(Item, id=id, user=User.objects.first()) + item = get_object_or_404(Item, id=id, user=User.objects.get(id=request.auth['pk']), ordered=False) item.delete() return 204, {'detail': 'Item deleted!'} @@ -231,6 +217,22 @@ def generate_ref_code(): return ''.join(random.sample(string.ascii_letters + string.digits, 6)) + + +@order_controller.post('item/{id}/increase-quantity', response={ + 200: MessageOut, + 401: MessageOut +}) + +def increase_item_quantity(request, id: UUID4): + + item = get_object_or_404(Item, id=id, user=User.objects.get(id=request.auth['pk']), ordered=False) + item.item_qty += 1 + item.save() + return 200, {'detail': 'Item quantity increased successfully!'} + + + @order_controller.post('create-order', auth=GlobalAuth(), response=MessageOut) def create_order(request): ''' @@ -241,7 +243,7 @@ def create_order(request): ''' order_qs = Order.objects.create( - user=User.objects.first(), + user= User.objects.prefetch_related('items', 'orders').get(id=request.auth['pk']), status=OrderStatus.objects.get(is_default=True), ref_code=generate_ref_code(), ordered=False, @@ -254,4 +256,4 @@ def create_order(request): user_items.update(ordered=True) order_qs.save() - return {'detail': 'order created successfully'} + return {'detail': 'order created successfully'} \ No newline at end of file