<?php

namespace App\Modules\{{ module }}\Application\Index;

{{ imports }}

final class Index{{ module }}QueryHandler implements QueryHandler
{
    public function __construct(
        private {{ module }}Indexer $indexer,
        private QueryBus $queryBus
    ) {}

    public function __invoke(Index{{ module }}Query $query): {{ module }}Response
    {
        $populateList = new Index{{ module }}Populate($query->populate ?? '');
        /** @var {{ module }} $model */
        $model = $this->indexer->__invoke(new Id{{ module }}($query->id));
        $responses = [$model->toDTO({{ module }}Response::class)];

        $vthis = $this;
        $populates = [
{{ closures }}
        ];
        foreach ($populateList->getValue() as $populate) {
            $populates[$populate]($responses, $populateList->childs($populate));
        }

        return $responses[0];
    }
{{ getters }}
}
