cartItemFactory = $cartItemFactory; $this->_customerRepositoryInterface = $customerRepositoryInterface; $this->request = $request; parent::__construct($context); } private function getCartItems($customerId) { $collection = $this->cartItemFactory->create()->getCollection(); $data = $collection->addFieldToFilter('customer_id', ['eq' => $customerId]) ->setOrder('name','ASC') ->getData(); return $data; } private function isCartItem($item) { $collection = $this->cartItemFactory->create()->getCollection(); $count = $collection->addFieldToSelect('id') ->addFieldToFilter('customer_id', ['eq' => $item["customer_id"]]) ->addFieldToFilter('product_id', ['eq' => $item["product_id"]]) ->count(); if ($count > 0) { return true; } return false; } private function addCartItem($item) { if (!$this->isCartItem($item)) { $data = $this->cartItemFactory->create()->addData([ 'email' => $item["email"], 'name' => $item["name"], 'sku' => $item["sku"], 'product_id' => $item["product_id"], 'qty' => $item["qty"], 'customer_id' => $item["customer_id"], 'price' => $item["price"], 'url' => $item["url"], 'image' => $item["image"] ])->save(); return $data; } return null; } private function removeCartItem($item) { $collection = $this->cartItemFactory->create()->getCollection(); $count = $collection->addFieldToSelect('id') ->addFieldToFilter('customer_id', ['eq' => $item["customer_id"]]) ->addFieldToFilter('product_id', ['eq' => $item["product_id"]]) ->walk('delete'); } private function clearCartItem($customerId) { $collection = $this->cartItemFactory->create()->getCollection(); $count = $collection->addFieldToSelect('id') ->addFieldToFilter('customer_id', ['eq' => $customerId]) ->walk('delete'); } private function getCurrentCustomerId($data){ $customer = $this->_customerRepositoryInterface->getById($data['customer_id']); if ($customer) { if ($customer->getEmail() == $data['email']){ return $customer->getId(); } } $customerId = $this->sessionFactory->create()->getCustomer()->getId(); return 0; } /** * POST * @param string[] $data * @return string */ public function addItem($data){ $currentCustomerId = $this->getCurrentCustomerId($data); if ($currentCustomerId == 0) { return []; } $data['customer_id'] = $currentCustomerId; if (!$this->isCartItem($data)) { $this->addCartItem($data); } return $this->getCartItems($currentCustomerId); } /** * POST * @param string[] $data * @return string */ public function updateItem($data){ $currentCustomerId = $this->getCurrentCustomerId($data); if ($currentCustomerId == 0) { return []; } $data['customer_id'] = $currentCustomerId; if ($this->isCartItem($data)) { $this->removeCartItem($data); $this->addCartItem($data); } return $this->getCartItems($currentCustomerId); } /** * POST * @param string[] $data * @return string */ public function removeItem($data){ $currentCustomerId = $this->getCurrentCustomerId($data); if ($currentCustomerId == 0) { return []; } $data['customer_id'] = $currentCustomerId; $this->removeCartItem($data); return $this->getCartItems($currentCustomerId); } /** * get * @return string */ public function getData(){ $par = $this->_request->getParams(); if (!array_key_exists('customer_id', $par) || !array_key_exists('email', $par)) { return []; } $currentCustomerId = $this->getCurrentCustomerId($par); if ($currentCustomerId == 0) { return []; } return $this->getCartItems($currentCustomerId); } /** * POST * @param string[] $data * @return string */ public function clearItem($data){ $currentCustomerId = $this->getCurrentCustomerId($data); if ($currentCustomerId == 0) { return []; } $this->clearCartItem($currentCustomerId); return $this->getCartItems($currentCustomerId); } }