From a7a328877421702c2bf950d60ec25e9c1579a763 Mon Sep 17 00:00:00 2001
From: RafaMelazzo <rafael.melazzo@stone.com.br>
Date: Wed, 16 Aug 2023 09:41:46 -0300
Subject: [PATCH 1/3] Added pix informations to graphql

---
 Model/Graphql/PixDataProvider.php | 29 +++++++++++++++++
 Plugin/GraphQl/PlaceOrder.php     | 52 +++++++++++++++++++++++++++++++
 etc/graphql/di.xml                | 13 ++++++++
 etc/schema.graphqls               |  8 +++++
 4 files changed, 102 insertions(+)
 create mode 100644 Model/Graphql/PixDataProvider.php
 create mode 100644 Plugin/GraphQl/PlaceOrder.php
 create mode 100644 etc/graphql/di.xml
 create mode 100644 etc/schema.graphqls

diff --git a/Model/Graphql/PixDataProvider.php b/Model/Graphql/PixDataProvider.php
new file mode 100644
index 00000000..b02926fe
--- /dev/null
+++ b/Model/Graphql/PixDataProvider.php
@@ -0,0 +1,29 @@
+<?php
+declare(strict_types=1);
+
+namespace Pagarme\Pagarme\Model\Graphql;
+
+use Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderInterface;
+
+/**
+ * Format input into value expected when setting payment method
+ */
+class PixDataProvider implements AdditionalDataProviderInterface
+{
+    private const PATH_ADDITIONAL_DATA = 'pagarme_pix';
+
+    /**
+     * Format input into value expected when setting payment method
+     *
+     * @param array $args
+     * @return array
+     */
+    public function getData(array $args): array
+    {
+        if (!empty($args[self::PATH_ADDITIONAL_DATA])) {
+            return $args[self::PATH_ADDITIONAL_DATA];
+        }
+
+        return [];
+    }
+}
diff --git a/Plugin/GraphQl/PlaceOrder.php b/Plugin/GraphQl/PlaceOrder.php
new file mode 100644
index 00000000..7be6c48f
--- /dev/null
+++ b/Plugin/GraphQl/PlaceOrder.php
@@ -0,0 +1,52 @@
+<?php
+declare(strict_types=1);
+
+namespace Pagarme\Pagarme\Plugin\GraphQl;
+
+use Magento\Sales\Api\OrderRepositoryInterface;
+use Pagarme\Core\Kernel\ValueObjects\Id\OrderId;
+use Pagarme\Pagarme\Concrete\Magento2CoreSetup;
+
+class PlaceOrder
+{
+
+    /**
+     * @var OrderRepositoryInterface
+     */
+    private $orderRepository;
+
+    /**
+     * @var \Magento\Sales\Model\OrderFactory
+     */
+    private $orderFactory;
+
+    public function __construct(
+        OrderRepositoryInterface $orderRepository,
+        \Magento\Sales\Model\OrderFactory $orderFactory
+    ) {
+        $this->orderRepository = $orderRepository;
+        $this->orderFactory = $orderFactory;
+    }
+
+    public function afterResolve(
+        \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject,
+        $result
+    ) {
+        $order = $this->orderFactory->create()->loadByIncrementId($result['order']['order_number']);
+        $payment = $order->getPayment();
+
+
+        if (strpos($payment->getMethod(), "pagarme_pix") === false) {
+            return $result;
+        }
+
+        $lastTransId = $payment->getLastTransId();
+        $orderId = substr($lastTransId, 0, 19);
+
+        Magento2CoreSetup::bootstrap();
+        $orderService= new \Pagarme\Core\Payment\Services\OrderService();
+        $result['pagarme_pix'] = $orderService->getPixQrCodeInfoFromOrder(new OrderId($orderId));
+
+        return $result;
+    }
+}
\ No newline at end of file
diff --git a/etc/graphql/di.xml b/etc/graphql/di.xml
new file mode 100644
index 00000000..5cc41018
--- /dev/null
+++ b/etc/graphql/di.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0"?>
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
+    <type name="Magento\QuoteGraphQl\Model\Resolver\PlaceOrder">
+        <plugin disabled="false" name="Pagarme_Pagarme_Plugin_GraphQl_PlaceOrder" sortOrder="10" type="Pagarme\Pagarme\Plugin\GraphQl\PlaceOrder"/>
+    </type>
+    <type name="Magento\QuoteGraphQl\Model\Cart\Payment\AdditionalDataProviderPool">
+        <arguments>
+            <argument name="dataProviders" xsi:type="array">
+                <item name="pagarme_pix" xsi:type="object">Pagarme\Pagarme\Model\Graphql\PixDataProvider</item>
+            </argument>
+        </arguments>
+    </type>
+</config>
\ No newline at end of file
diff --git a/etc/schema.graphqls b/etc/schema.graphqls
new file mode 100644
index 00000000..62af28f2
--- /dev/null
+++ b/etc/schema.graphqls
@@ -0,0 +1,8 @@
+type PlaceOrderOutput {
+    pagarme_pix: PagarmePix
+}
+
+type PagarmePix {
+    qr_code: String,
+    qr_code_url: String
+}
\ No newline at end of file

From 0ca80d2d75488d6613dd8e6a7f5b980d3b62a67d Mon Sep 17 00:00:00 2001
From: RafaMelazzo <rafael.melazzo@stone.com.br>
Date: Wed, 16 Aug 2023 10:12:38 -0300
Subject: [PATCH 2/3] Remove the unused function parameter "$subject"

---
 Plugin/GraphQl/PlaceOrder.php | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/Plugin/GraphQl/PlaceOrder.php b/Plugin/GraphQl/PlaceOrder.php
index 7be6c48f..1412931d 100644
--- a/Plugin/GraphQl/PlaceOrder.php
+++ b/Plugin/GraphQl/PlaceOrder.php
@@ -4,6 +4,7 @@
 namespace Pagarme\Pagarme\Plugin\GraphQl;
 
 use Magento\Sales\Api\OrderRepositoryInterface;
+use Magento\Sales\Model\OrderFactory;
 use Pagarme\Core\Kernel\ValueObjects\Id\OrderId;
 use Pagarme\Pagarme\Concrete\Magento2CoreSetup;
 
@@ -20,16 +21,24 @@ class PlaceOrder
      */
     private $orderFactory;
 
+    /**
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
+     * @param \Magento\Sales\Model\OrderFactory $orderFactory
+     */
     public function __construct(
         OrderRepositoryInterface $orderRepository,
-        \Magento\Sales\Model\OrderFactory $orderFactory
+        OrderFactory $orderFactory
     ) {
         $this->orderRepository = $orderRepository;
         $this->orderFactory = $orderFactory;
     }
 
+    /**
+     * @param \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject
+     * @param mixed $result
+     * @return mixed
+     */
     public function afterResolve(
-        \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject,
         $result
     ) {
         $order = $this->orderFactory->create()->loadByIncrementId($result['order']['order_number']);

From 66413e6459b4b91c3825f52a8fa0b822f16179e1 Mon Sep 17 00:00:00 2001
From: Mateus Picoloto <mateus.picoloto@pagar.me>
Date: Wed, 16 Aug 2023 16:46:27 -0300
Subject: [PATCH 3/3] fix: adding subject parameter in plugin

---
 Plugin/GraphQl/PlaceOrder.php | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/Plugin/GraphQl/PlaceOrder.php b/Plugin/GraphQl/PlaceOrder.php
index 1412931d..9ee628e8 100644
--- a/Plugin/GraphQl/PlaceOrder.php
+++ b/Plugin/GraphQl/PlaceOrder.php
@@ -37,8 +37,10 @@ public function __construct(
      * @param \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject
      * @param mixed $result
      * @return mixed
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterResolve(
+        \Magento\QuoteGraphQl\Model\Resolver\PlaceOrder $subject,
         $result
     ) {
         $order = $this->orderFactory->create()->loadByIncrementId($result['order']['order_number']);
@@ -58,4 +60,4 @@ public function afterResolve(
 
         return $result;
     }
-}
\ No newline at end of file
+}