From e265e55917200089eb5c19fbf7a61df087dae713 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Wed, 17 Dec 2025 15:35:27 +0100 Subject: [PATCH] Convert GetDomainVisitsCommand into invokable command --- .../Command/Domain/GetDomainVisitsCommand.php | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/module/CLI/src/Command/Domain/GetDomainVisitsCommand.php b/module/CLI/src/Command/Domain/GetDomainVisitsCommand.php index 2891c44f..c2b8d859 100644 --- a/module/CLI/src/Command/Domain/GetDomainVisitsCommand.php +++ b/module/CLI/src/Command/Domain/GetDomainVisitsCommand.php @@ -4,42 +4,44 @@ declare(strict_types=1); namespace Shlinkio\Shlink\CLI\Command\Domain; -use Shlinkio\Shlink\CLI\Command\Visit\AbstractVisitsListCommand; -use Shlinkio\Shlink\Common\Paginator\Paginator; -use Shlinkio\Shlink\Common\Util\DateRange; +use Shlinkio\Shlink\CLI\Command\Visit\VisitsCommandUtils; +use Shlinkio\Shlink\CLI\Input\VisitsDateRangeInput; +use Shlinkio\Shlink\CLI\Util\ShlinkTable; use Shlinkio\Shlink\Core\ShortUrl\Helper\ShortUrlStringifierInterface; use Shlinkio\Shlink\Core\Visit\Entity\Visit; use Shlinkio\Shlink\Core\Visit\Model\VisitsParams; use Shlinkio\Shlink\Core\Visit\VisitsStatsHelperInterface; -use Symfony\Component\Console\Input\InputArgument; -use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Attribute\Argument; +use Symfony\Component\Console\Attribute\AsCommand; +use Symfony\Component\Console\Attribute\Ask; +use Symfony\Component\Console\Attribute\MapInput; +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Style\SymfonyStyle; -class GetDomainVisitsCommand extends AbstractVisitsListCommand +#[AsCommand(GetDomainVisitsCommand::NAME, 'Returns the list of visits for provided domain')] +class GetDomainVisitsCommand extends Command { public const string NAME = 'domain:visits'; public function __construct( - VisitsStatsHelperInterface $visitsHelper, + private readonly VisitsStatsHelperInterface $visitsHelper, private readonly ShortUrlStringifierInterface $shortUrlStringifier, ) { - parent::__construct($visitsHelper); + parent::__construct(); } - protected function configure(): void - { - $this - ->setName(self::NAME) - ->setDescription('Returns the list of visits for provided domain.') - ->addArgument('domain', InputArgument::REQUIRED, 'The domain which visits we want to get.'); - } + public function __invoke( + SymfonyStyle $io, + #[Argument('The domain which visits we want to get'), Ask('For what domain do you want to get visits?')] + string $domain, + #[MapInput] VisitsDateRangeInput $dateRangeInput, + ): int { + $paginator = $this->visitsHelper->visitsForDomain($domain, new VisitsParams($dateRangeInput->toDateRange())); + [$rows, $headers] = VisitsCommandUtils::resolveRowsAndHeaders($paginator, $this->mapExtraFields(...)); - /** - * @return Paginator - */ - protected function getVisitsPaginator(InputInterface $input, DateRange $dateRange): Paginator - { - $domain = $input->getArgument('domain'); - return $this->visitsHelper->visitsForDomain($domain, new VisitsParams($dateRange)); + ShlinkTable::default($io)->render($headers, $rows); + + return self::SUCCESS; } /**