<?php
#parse("PHP File Header.php")

declare(strict_types=1);

#if (${NAMESPACE})
namespace ${NAMESPACE};
#end

#set( $ClassName = $NAME.replace("Handler", "") )
#set( $TRANSPORT = $CONTEXT.replaceAll("([a-z])([A-Z]+)", "$1-$2").toLowerCase() )

use BaksDev\Core\Entity\AbstractHandler;

final class ${NAME} extends AbstractHandler
{
	/** @see ${CONTEXT} */
	public function handle(${ClassName}DTO ${DS}command): string|${CONTEXT}
	{
	    $this->setCommand(${DS}command);

        // Пример передачи объекта
        // $this->preEventPersistOrUpdate(new ${CONTEXT}($foo), new ${CONTEXT}Event($bar));

        $this->preEventPersistOrUpdate(${CONTEXT}::class, ${CONTEXT}Event::class);

        /** Валидация всех объектов */
        if(${DS}this->validatorCollection->isInvalid())
        {
            return ${DS}this->validatorCollection->getErrorUniqid();
        }

        ${DS}this->flush();

        /* Отправляем сообщение в шину */
        ${DS}this->messageDispatch->dispatch(
            message: new ${CONTEXT}Message(${DS}this->main->getId(), ${DS}this->main->getEvent(), ${DS}command->getEvent()),
            transport: '${TRANSPORT}'
        );

        return ${DS}this->main;
	}
}