@@ -42,28 +42,33 @@ public function __construct(private readonly CacheItemPoolInterface $subscriptio
4242
4343    public  function  retrieveSubscriptionId (array  $ contextarray  $ resultOperation $ operationnull ): ?string 
4444    {
45-         /** @var ResolveInfo $info */ 
46-         $ info$ context'info ' ];
47-         $ fields$ infogetFieldSelection (\PHP_INT_MAX );
48-         $ this arrayRecursiveSort ($ fields'ksort ' );
4945        $ iri$ operation$ this getIdentifierFromOperation ($ operation$ context'args ' ] ?? []) : $ this getIdentifierFromContext ($ context
5046        if  (empty ($ iri
5147            return  null ;
5248        }
5349
50+         /** @var ResolveInfo $info */ 
51+         $ info$ context'info ' ];
52+         $ fields$ infogetFieldSelection (\PHP_INT_MAX );
53+         $ this arrayRecursiveSort ($ fields'ksort ' );
54+ 
5455        $ options$ operation$ operationgetMercure () ?? false ) : false ;
5556        $ private$ options'private ' ] ?? false ;
5657        $ privateFields$ options'private_fields ' ] ?? [];
5758        $ previousObject$ context'graphql_context ' ]['previous_object ' ] ?? null ;
59+         $ privateFieldData
5860        if  ($ private$ privateFields$ previousObject
5961            foreach  ($ options'private_fields ' ] as  $ privateField
60-                 $ fields'__private_field_ ' .$ privateField$ this getResourceId ($ privateField$ previousObject
62+                 $ fieldData$ this getResourceId ($ privateField$ previousObject
63+                 $ fields'__private_field_ ' .$ privateField$ fieldData
64+                 $ privateFieldData$ fieldData
6165            }
6266        }
6367        if  ($ operationinstanceof  Subscription && $ operationisCollection ()) {
6468            $ subscriptionId$ this updateSubscriptionCollectionCacheData (
6569                $ iri
6670                $ fields
71+                 $ privateFieldData
6772            );
6873        } else  {
6974            $ subscriptionId$ this updateSubscriptionItemCacheData (
@@ -93,9 +98,15 @@ public function getPushPayloads(object $object, string $type): array
9398    /** 
9499     * @return array<array> 
95100     */ 
96-     private  function  getSubscriptionsFromIri (string  $ iriarray 
101+     private  function  getSubscriptionsFromIri (string  $ iri,  array   $ fields  = [] ): array 
97102    {
98-         $ subscriptionsCacheItem$ this subscriptionsCache ->getItem ($ this encodeIriToCacheKey ($ iri
103+         $ subscriptionsCacheItem$ this subscriptionsCache ->getItem (
104+             $ this generatePrivateCacheKeyPart (
105+                 $ this encodeIriToCacheKey ($ iri
106+                 $ fields
107+             )
108+ 
109+         );
99110
100111        if  ($ subscriptionsCacheItemisHit ()) {
101112            return  $ subscriptionsCacheItemget ();
@@ -134,13 +145,6 @@ private function getCollectionIri(string $iri): string
134145
135146    private  function  getCreatedOrUpdatedPayloads (object $ objectarray 
136147    {
137-         $ iri$ this iriConverter ->getIriFromResource ($ object
138-         // Add collection subscriptions 
139-         $ subscriptionsarray_merge (
140-             $ this getSubscriptionsFromIri ($ this getCollectionIri ($ iri
141-             $ this getSubscriptionsFromIri ($ iri
142-         );
143- 
144148        $ resourceClass$ this getObjectClass ($ object
145149        $ resourceMetadata$ this resourceMetadataCollectionFactory ->create ($ resourceClass
146150        $ shortName$ resourceMetadatagetOperation ()->getShortName ();
@@ -155,6 +159,13 @@ private function getCreatedOrUpdatedPayloads(object $object): array
155159            }
156160        }
157161
162+         $ iri$ this iriConverter ->getIriFromResource ($ object
163+         // Add collection subscriptions 
164+         $ subscriptionsarray_merge (
165+             $ this getSubscriptionsFromIri ($ this getCollectionIri ($ iri$ privateFieldData
166+             $ this getSubscriptionsFromIri ($ iri
167+         );
168+ 
158169        $ payloads
159170        foreach  ($ subscriptionsas  [$ subscriptionId$ subscriptionFields$ subscriptionResult
160171            if  ($ privateFieldData
@@ -182,12 +193,13 @@ private function getDeletePushPayloads(object $object): array
182193        $ iri$ objectid ;
183194        $ subscriptionsarray_merge (
184195            $ this getSubscriptionsFromIri ($ iri
185-             $ this getSubscriptionsFromIri ($ this getCollectionIri ($ iri) 
196+             $ this getSubscriptionsFromIri ($ this getCollectionIri ($ iri,  $ object -> private ), 
186197        );
187198
188199        $ payloads
200+         $ payload'type '  => 'delete ' , 'payload '  => ['id '  => $ objectid , 'iri '  => $ objectiri , 'type '  => $ objecttype ]];
189201        foreach  ($ subscriptionsas  [$ subscriptionId$ subscriptionFields$ subscriptionResult
190-             $ payloads$ subscriptionId[ ' type '  =>  ' delete ' ,  ' payload '  =>  $ object ] ];
202+             $ payloads$ subscriptionId$ payload 
191203        }
192204        $ this removeItemFromSubscriptionCache ($ iri
193205
@@ -216,12 +228,14 @@ private function updateSubscriptionItemCacheData(
216228            }
217229        }
218230
219-         $ subscriptionId$ this subscriptionIdentifierGenerator ->generateSubscriptionIdentifier ($ fields
220231        unset($ result'clientSubscriptionId ' ]);
221232        if  ($ private$ privateFields$ previousObject
233+             $ subscriptionId$ this subscriptionIdentifierGenerator ->generateSubscriptionIdentifier ($ fields
222234            foreach  ($ privateFieldsas  $ privateField
223235                unset($ result'__private_field_ ' .$ privateField
224236            }
237+         } else  {
238+             $ subscriptionId$ this subscriptionIdentifierGenerator ->generateSubscriptionIdentifier ($ fields
225239        }
226240        $ subscriptions$ subscriptionId$ fields$ result
227241        $ subscriptionsCacheItemset ($ subscriptions
@@ -232,10 +246,15 @@ private function updateSubscriptionItemCacheData(
232246
233247    private  function  updateSubscriptionCollectionCacheData (
234248        string  $ iri
235-         array  $ fields
249+         array   $ fields
250+         array   $ privateFieldData
236251    ): string  {
252+ 
237253        $ subscriptionCollectionCacheItem$ this subscriptionsCache ->getItem (
238-             $ this encodeIriToCacheKey ($ this getCollectionIri ($ iri
254+             $ this generatePrivateCacheKeyPart (
255+                 $ this encodeIriToCacheKey ($ this getCollectionIri ($ iri
256+                 $ privateFieldData
257+             ),
239258        );
240259        $ collectionSubscriptions
241260        if  ($ subscriptionCollectionCacheItemisHit ()) {
@@ -253,4 +272,13 @@ private function updateSubscriptionCollectionCacheData(
253272
254273        return  $ subscriptionId
255274    }
275+ 
276+     private  function  generatePrivateCacheKeyPart (string  $ iriKeyarray  $ fieldsstring 
277+     {
278+         if  (empty ($ fields
279+             return  $ iriKey
280+         }
281+         return  $ iriKey'_ ' .implode ('_ ' , $ fields
282+     }
283+ 
256284}
0 commit comments