webhook skip own

This commit is contained in:
Yuri Kuznetsov
2025-07-08 13:34:19 +03:00
parent 335301cefd
commit 7b30ba59dd
20 changed files with 293 additions and 114 deletions
+29 -16
View File
@@ -64,7 +64,7 @@ class Queue
private Config $config,
private EntityManager $entityManager,
private AclManager $aclManager,
private Log $log
private Log $log,
) {}
public function process(): void
@@ -92,35 +92,25 @@ class Queue
}
}
protected function createQueueFromEvent(WebhookEventQueueItem $item): void
protected function createQueueFromEvent(WebhookEventQueueItem $eventItem): void
{
if (!$item->getTargetId() || !$item->getTargetType()) {
if (!$eventItem->getTargetId() || !$eventItem->getTargetType()) {
return;
}
$target = LinkParent::create($item->getTargetType(), $item->getTargetId());
$target = LinkParent::create($eventItem->getTargetType(), $eventItem->getTargetId());
$webhooks = $this->entityManager
->getRDBRepositoryByClass(Webhook::class)
->where([
'event' => $item->getEvent(),
'event' => $eventItem->getEvent(),
'isActive' => true,
])
->order(Field::CREATED_AT)
->find();
foreach ($webhooks as $webhook) {
$queueItem = $this->entityManager->getRDBRepositoryByClass(WebhookQueueItem::class)->getNew();
$queueItem
->setEvent($item->getEvent())
->setWebhook($webhook)
->setTarget($target)
->setStatus(WebhookQueueItem::STATUS_PENDING)
->setAttempts(0)
->setData($item->getData());
$this->entityManager->saveEntity($queueItem);
$this->createItem($eventItem, $webhook, $target);
}
}
@@ -396,4 +386,27 @@ class Queue
$this->entityManager->saveEntity($item);
}
private function createItem(WebhookEventQueueItem $eventItem, Webhook $webhook, LinkParent $target): void
{
if (
$webhook->skipOwn() &&
$webhook->getUserId() &&
$eventItem->getUserId() === $webhook->getUserId()
) {
return;
}
$item = $this->entityManager->getRDBRepositoryByClass(WebhookQueueItem::class)->getNew();
$item
->setEvent($eventItem->getEvent())
->setWebhook($webhook)
->setTarget($target)
->setStatus(WebhookQueueItem::STATUS_PENDING)
->setAttempts(0)
->setData($eventItem->getData());
$this->entityManager->saveEntity($item);
}
}