*/ class CardListener implements IEventListener { public function __construct( private ActivityBackend $activityBackend, private LoggerInterface $logger, ) { } public function handle(Event $event): void { if ($event instanceof CardCreatedEvent) { try { $this->activityBackend->triggerCardActivity( Card::SUBJECT_ADD, $event->getAddressBookData(), $event->getShares(), $event->getCardData() ); $this->logger->debug( sprintf('Activity generated for a new card in addressbook %d', $event->getAddressBookId()) ); } catch (Throwable $e) { // Any error with activities shouldn't abort the addressbook creation, so we just log it $this->logger->error('Error generating activities for a new card in addressbook: ' . $e->getMessage(), [ 'exception' => $e, ]); } } elseif ($event instanceof CardUpdatedEvent) { try { $this->activityBackend->triggerCardActivity( Card::SUBJECT_UPDATE, $event->getAddressBookData(), $event->getShares(), $event->getCardData() ); $this->logger->debug( sprintf('Activity generated for a changed card in addressbook %d', $event->getAddressBookId()) ); } catch (Throwable $e) { // Any error with activities shouldn't abort the addressbook update, so we just log it $this->logger->error('Error generating activities for a changed card in addressbook: ' . $e->getMessage(), [ 'exception' => $e, ]); } } elseif ($event instanceof CardDeletedEvent) { try { $this->activityBackend->triggerCardActivity( Card::SUBJECT_DELETE, $event->getAddressBookData(), $event->getShares(), $event->getCardData() ); $this->logger->debug( sprintf('Activity generated for a deleted card in addressbook %d', $event->getAddressBookId()) ); } catch (Throwable $e) { // Any error with activities shouldn't abort the addressbook deletion, so we just log it $this->logger->error('Error generating activities for a deleted card in addressbook: ' . $e->getMessage(), [ 'exception' => $e, ]); } } } }