<?php

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

{{ imports }}

final class List{{ module }}QueryHandler implements QueryHandler
{
    public function __construct(
        private {{ module }}Lister $lister,
        private QueryBus $queryBus
    ) {}

    public function __invoke(List{{ module }}Query $query): {{ module }}Responses
    {
        $populateList = new List{{ module }}Populate($query->populate ?? '');
        $responses = array_map(
            fn({{ module }} $item) => $item->toDTO({{ module }}Response::class),
            $this->lister->__invoke(
{{ listerArgs }}
            )
        );

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

        return new {{ module }}Responses(...$responses);
    }
{{ getters }}
}
