GetVisitsAction.php 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. declare(strict_types=1);
  3. namespace Shlinkio\Shlink\Rest\Action\Visit;
  4. use Laminas\Diactoros\Response\JsonResponse;
  5. use Psr\Http\Message\ResponseInterface as Response;
  6. use Psr\Http\Message\ServerRequestInterface as Request;
  7. use Psr\Log\LoggerInterface;
  8. use Shlinkio\Shlink\Common\Paginator\Util\PaginatorUtilsTrait;
  9. use Shlinkio\Shlink\Core\Model\VisitsParams;
  10. use Shlinkio\Shlink\Core\Service\VisitsTrackerInterface;
  11. use Shlinkio\Shlink\Rest\Action\AbstractRestAction;
  12. class GetVisitsAction extends AbstractRestAction
  13. {
  14. use PaginatorUtilsTrait;
  15. protected const ROUTE_PATH = '/short-urls/{shortCode}/visits';
  16. protected const ROUTE_ALLOWED_METHODS = [self::METHOD_GET];
  17. private VisitsTrackerInterface $visitsTracker;
  18. public function __construct(VisitsTrackerInterface $visitsTracker, ?LoggerInterface $logger = null)
  19. {
  20. parent::__construct($logger);
  21. $this->visitsTracker = $visitsTracker;
  22. }
  23. public function handle(Request $request): Response
  24. {
  25. $shortCode = $request->getAttribute('shortCode');
  26. $visits = $this->visitsTracker->info($shortCode, VisitsParams::fromRawData($request->getQueryParams()));
  27. return new JsonResponse([
  28. 'visits' => $this->serializePaginator($visits),
  29. ]);
  30. }
  31. }