in server/store/views.py [0:0]
def checkout(request):
def lift_item_status(data):
status = ""
for item in data["items"]:
if "status" in item:
for i in item["status"]:
status = str(i)
return status
serializer = CartSerializer(data=json.loads(request.body))
if not serializer.is_valid():
status_code = 400
status = "validation_error"
if "payment" in serializer.errors:
status_code = 501
status = serializer.errors["payment"]["method"][0].code
if "items" in serializer.errors:
status = lift_item_status(serializer.errors)
return JsonResponse(
{"status": status, "errors": serializer.errors}, status=status_code
)
cart = serializer.validated_data
items = []
for item in cart["items"]:
product = get_object_or_404(Product, id=item["id"])
count = item["countRequested"]
product.inventory_count -= count
product.save()
for _ in range(count):
Transaction.objects.create(
datetime=timezone.now(), product_id=product, unit_price=product.price
)
items.append(
{"id": product.id, "countRequested": count, "countFulfilled": count}
)
if product.inventory_count == 0:
log_error(
"INVENTORY_SOLDOUT_ERROR",
"A purchase just caused a product to sell out. More inventory will be required.",
product,
)
response = CheckoutSerializer(data={"status": "complete", "items": items})
response.is_valid()
return JsonResponse(response.data)