first commit

This commit is contained in:
2025-08-02 16:30:27 +02:00
commit 23646bfcee
14851 changed files with 1750626 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
<?php
declare(strict_types=1);
namespace KupShop\KafkaBundle\DBChanges\Util;
use KupShop\KafkaBundle\DBChanges\MessageTypes\DBGenericMessage;
use KupShop\KafkaBundle\DBChanges\MessageTypes\DBLegacyMessage;
use KupShop\KafkaBundle\Exception\KafkaInvalidMessageException;
use RdKafka\Message;
use Symfony\Component\DependencyInjection\Attribute\TaggedLocator;
use Symfony\Component\DependencyInjection\ServiceLocator;
class DBMessageFactory
{
public function __construct(
/** @param ServiceLocator<DBGenericMessage> $serviceLocator */
#[TaggedLocator(tag: 'kupshop.kafka.dbmessages', defaultIndexMethod: 'getClassTableName')] private ServiceLocator $serviceLocator,
) {
}
/**
* @param $rawMessage array
*
* @throws KafkaInvalidMessageException
*/
public function create(Message $rawMessage): DBGenericMessage
{
$body = json_decode($rawMessage->payload, true) ?? [];
if (!isset($body['cdc'])) {
// for messages in legacy format
$tableName = DBLegacyMessage::$tableName;
} else {
$tableName = $body['source']['table'] ?? '';
if (!$this->serviceLocator->has($tableName)) {
$tableName = DBGenericMessage::$tableName;
}
}
return $this->serviceLocator->get($tableName)->setMessage(
$rawMessage->offset,
(int) floor($rawMessage->timestamp / 1000),
$rawMessage->headers,
$body
);
}
}