7
7
8
8
namespace Magento \QuoteGraphQl \Model \Resolver ;
9
9
10
+ use Magento \Framework \Exception \AlreadyExistsException ;
10
11
use Magento \Framework \Exception \LocalizedException ;
11
12
use Magento \Framework \Exception \NoSuchEntityException ;
12
13
use Magento \Framework \GraphQl \Config \Element \Field ;
13
14
use Magento \Framework \GraphQl \Exception \GraphQlNoSuchEntityException ;
14
15
use Magento \Framework \GraphQl \Query \ResolverInterface ;
15
16
use Magento \Framework \GraphQl \Schema \Type \ResolveInfo ;
16
17
use Magento \Quote \Model \Quote ;
18
+ use Magento \Quote \Model \QuoteIdMaskFactory ;
17
19
use Magento \Quote \Model \QuoteIdToMaskedQuoteIdInterface ;
20
+ use Magento \Quote \Model \ResourceModel \Quote \QuoteIdMask as QuoteIdMaskResourceModel ;
18
21
19
22
/**
20
23
* Get cart id from the cart
@@ -26,13 +29,27 @@ class MaskedCartId implements ResolverInterface
26
29
*/
27
30
private $ quoteIdToMaskedQuoteId ;
28
31
32
+ /**
33
+ * @var QuoteIdMaskFactory
34
+ */
35
+ private $ quoteIdMaskFactory ;
36
+
37
+ /**
38
+ * @var QuoteIdMaskResourceModel
39
+ */
40
+ private $ quoteIdMaskResourceModel ;
41
+
29
42
/**
30
43
* @param QuoteIdToMaskedQuoteIdInterface $quoteIdToMaskedQuoteId
31
44
*/
32
45
public function __construct (
33
- QuoteIdToMaskedQuoteIdInterface $ quoteIdToMaskedQuoteId
46
+ QuoteIdToMaskedQuoteIdInterface $ quoteIdToMaskedQuoteId ,
47
+ QuoteIdMaskFactory $ quoteIdMaskFactory ,
48
+ QuoteIdMaskResourceModel $ quoteIdMaskResourceModel
34
49
) {
35
50
$ this ->quoteIdToMaskedQuoteId = $ quoteIdToMaskedQuoteId ;
51
+ $ this ->quoteIdMaskFactory = $ quoteIdMaskFactory ;
52
+ $ this ->quoteIdMaskResourceModel = $ quoteIdMaskResourceModel ;
36
53
}
37
54
38
55
/**
@@ -60,10 +77,35 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
60
77
private function getQuoteMaskId (int $ quoteId ): string
61
78
{
62
79
try {
63
- $ maskedId = $ this ->quoteIdToMaskedQuoteId ->execute ($ quoteId );
80
+ $ maskedId =$ this ->ensureQuoteMaskExist ($ quoteId );
81
+ //$maskedId = $this->quoteIdToMaskedQuoteId->execute($quoteId);
64
82
} catch (NoSuchEntityException $ exception ) {
65
83
throw new GraphQlNoSuchEntityException (__ ('Current user does not have an active cart. ' ));
66
84
}
67
85
return $ maskedId ;
68
86
}
87
+ /**
88
+ * Create masked id for quote if it's not exists
89
+ *
90
+ * @param int $quoteId
91
+ * @return string
92
+ * @throws AlreadyExistsException
93
+ */
94
+ private function ensureQuoteMaskExist (int $ quoteId ): string
95
+ {
96
+ try {
97
+ $ maskedId = $ this ->quoteIdToMaskedQuoteId ->execute ($ quoteId );
98
+ } catch (NoSuchEntityException $ e ) {
99
+ $ maskedId = '' ;
100
+ }
101
+ if ($ maskedId === '' ) {
102
+ $ quoteIdMask = $ this ->quoteIdMaskFactory ->create ();
103
+ $ quoteIdMask ->setQuoteId ($ quoteId );
104
+
105
+ $ this ->quoteIdMaskResourceModel ->save ($ quoteIdMask );
106
+ $ maskedId = $ this ->quoteIdToMaskedQuoteId ->execute ($ quoteId );
107
+ }
108
+ return $ maskedId ;
109
+ }
110
+
69
111
}
0 commit comments