2525class WebhookListenerMapper extends QBMapper {
2626 public const TABLE_NAME = 'webhook_listeners ' ;
2727
28- private const EVENTS_CACHE_KEY = 'eventsUsedInWebhooks ' ;
28+ private const EVENTS_CACHE_KEY_PREFIX = 'eventsUsedInWebhooks ' ;
2929
3030 private ?ICache $ cache = null ;
3131
@@ -77,6 +77,7 @@ public function addWebhookListener(
7777 string $ uri ,
7878 string $ event ,
7979 ?array $ eventFilter ,
80+ ?string $ userIdFilter ,
8081 ?array $ headers ,
8182 AuthMethod $ authMethod ,
8283 #[\SensitiveParameter]
@@ -95,12 +96,13 @@ public function addWebhookListener(
9596 'uri ' => $ uri ,
9697 'event ' => $ event ,
9798 'eventFilter ' => $ eventFilter ?? [],
99+ 'userIdFilter ' => $ userIdFilter ?? '' ,
98100 'headers ' => $ headers ,
99101 'authMethod ' => $ authMethod ->value ,
100102 ]
101103 );
102104 $ webhookListener ->setAuthDataClear ($ authData );
103- $ this ->cache ?->remove(self :: EVENTS_CACHE_KEY );
105+ $ this ->cache ?->remove($ this -> buildCacheKey ( $ userIdFilter ) );
104106 return $ this ->insert ($ webhookListener );
105107 }
106108
@@ -115,6 +117,7 @@ public function updateWebhookListener(
115117 string $ uri ,
116118 string $ event ,
117119 ?array $ eventFilter ,
120+ ?string $ userIdFilter ,
118121 ?array $ headers ,
119122 AuthMethod $ authMethod ,
120123 #[\SensitiveParameter]
@@ -134,12 +137,13 @@ public function updateWebhookListener(
134137 'uri ' => $ uri ,
135138 'event ' => $ event ,
136139 'eventFilter ' => $ eventFilter ?? [],
140+ 'userIdFilter ' => $ userIdFilter ?? '' ,
137141 'headers ' => $ headers ,
138142 'authMethod ' => $ authMethod ->value ,
139143 ]
140144 );
141145 $ webhookListener ->setAuthDataClear ($ authData );
142- $ this ->cache ?->remove(self :: EVENTS_CACHE_KEY );
146+ $ this ->cache ?->remove($ this -> buildCacheKey ( $ userIdFilter ) );
143147 return $ this ->update ($ webhookListener );
144148 }
145149
@@ -159,11 +163,16 @@ public function deleteById(int $id): bool {
159163 * @throws Exception
160164 * @return list<string>
161165 */
162- private function getAllConfiguredEventsFromDatabase (): array {
166+ private function getAllConfiguredEventsFromDatabase (string $ userId ): array {
163167 $ qb = $ this ->db ->getQueryBuilder ();
164168
165169 $ qb ->selectDistinct ('event ' )
166- ->from ($ this ->getTableName ());
170+ ->from ($ this ->getTableName ())
171+ ->where ($ qb ->expr ()->emptyString ('user_id_filter ' ));
172+
173+ if ($ userId !== '' ) {
174+ $ qb ->orWhere ($ qb ->expr ()->eq ('user_id_filter ' , $ qb ->createNamedParameter ($ userId )));
175+ }
167176
168177 $ result = $ qb ->executeQuery ();
169178
@@ -181,27 +190,40 @@ private function getAllConfiguredEventsFromDatabase(): array {
181190 * @throws Exception
182191 * @return list<string>
183192 */
184- public function getAllConfiguredEvents (): array {
185- $ events = $ this ->cache ?->get(self ::EVENTS_CACHE_KEY );
193+ public function getAllConfiguredEvents (?string $ userId = null ): array {
194+ $ cacheKey = $ this ->buildCacheKey ($ userId );
195+ $ events = $ this ->cache ?->get($ cacheKey );
186196 if ($ events !== null ) {
187197 return json_decode ($ events );
188198 }
189- $ events = $ this ->getAllConfiguredEventsFromDatabase ();
199+ $ events = $ this ->getAllConfiguredEventsFromDatabase ($ userId ?? '' );
190200 // cache for 5 minutes
191- $ this ->cache ?->set(self :: EVENTS_CACHE_KEY , json_encode ($ events ), 300 );
201+ $ this ->cache ?->set($ cacheKey , json_encode ($ events ), 300 );
192202 return $ events ;
193203 }
194204
195205 /**
196206 * @throws Exception
197207 */
198- public function getByEvent (string $ event ): array {
208+ public function getByEvent (string $ event, ? string $ userId = null ): array {
199209 $ qb = $ this ->db ->getQueryBuilder ();
200210
201211 $ qb ->select ('* ' )
202212 ->from ($ this ->getTableName ())
203213 ->where ($ qb ->expr ()->eq ('event ' , $ qb ->createNamedParameter ($ event , IQueryBuilder::PARAM_STR )));
204214
215+
216+ if ($ userId === '' || $ userId === null ) {
217+ $ qb ->andWhere ($ qb ->expr ()->emptyString ('user_id_filter ' ));
218+ } else {
219+ $ qb ->andWhere (
220+ $ qb ->expr ()->orX (
221+ $ qb ->expr ()->emptyString ('user_id_filter ' ),
222+ $ qb ->expr ()->eq ('user_id_filter ' , $ qb ->createNamedParameter ($ userId )),
223+ )
224+ );
225+ }
226+
205227 return $ this ->findEntities ($ qb );
206228 }
207229
@@ -217,4 +239,8 @@ public function getByUri(string $uri): array {
217239
218240 return $ this ->findEntities ($ qb );
219241 }
242+
243+ private function buildCacheKey (?string $ userIdFilter ): string {
244+ return self ::EVENTS_CACHE_KEY_PREFIX .'_ ' .($ userIdFilter ?? '' );
245+ }
220246}
0 commit comments