1 | <?php |
||
17 | class GetVisitsAction extends AbstractRestAction |
||
18 | { |
||
19 | /** |
||
20 | * @var VisitsTrackerInterface |
||
21 | */ |
||
22 | private $visitsTracker; |
||
23 | /** |
||
24 | * @var TranslatorInterface |
||
25 | */ |
||
26 | private $translator; |
||
27 | |||
28 | /** |
||
29 | * GetVisitsAction constructor. |
||
30 | * @param VisitsTrackerInterface $visitsTracker |
||
31 | * @param TranslatorInterface $translator |
||
32 | * @param LoggerInterface $logger |
||
33 | * |
||
34 | * @Inject({VisitsTracker::class, "translator", "Logger_Shlink"}) |
||
35 | */ |
||
36 | 4 | public function __construct( |
|
45 | |||
46 | /** |
||
47 | * @param Request $request |
||
48 | * @param DelegateInterface $delegate |
||
49 | * @return null|Response |
||
50 | * @throws \InvalidArgumentException |
||
51 | */ |
||
52 | 4 | public function process(Request $request, DelegateInterface $delegate) |
|
53 | { |
||
54 | 4 | $shortCode = $request->getAttribute('shortCode'); |
|
55 | 4 | $startDate = $this->getDateQueryParam($request, 'startDate'); |
|
56 | 4 | $endDate = $this->getDateQueryParam($request, 'endDate'); |
|
57 | |||
58 | try { |
||
59 | 4 | $visits = $this->visitsTracker->info($shortCode, new DateRange($startDate, $endDate)); |
|
60 | |||
61 | 2 | return new JsonResponse([ |
|
62 | 'visits' => [ |
||
63 | 2 | 'data' => $visits, |
|
64 | ] |
||
65 | 2 | ]); |
|
66 | 2 | } catch (InvalidArgumentException $e) { |
|
67 | 1 | $this->logger->warning('Provided nonexistent shortcode'. PHP_EOL . $e); |
|
68 | 1 | return new JsonResponse([ |
|
69 | 1 | 'error' => RestUtils::getRestErrorCodeFromException($e), |
|
70 | 1 | 'message' => sprintf( |
|
71 | 1 | $this->translator->translate('Provided short code %s does not exist'), |
|
72 | $shortCode |
||
73 | 1 | ), |
|
74 | 1 | ], self::STATUS_NOT_FOUND); |
|
75 | 1 | } catch (\Exception $e) { |
|
76 | 1 | $this->logger->error('Unexpected error while parsing short code'. PHP_EOL . $e); |
|
77 | 1 | return new JsonResponse([ |
|
78 | 1 | 'error' => RestUtils::UNKNOWN_ERROR, |
|
79 | 1 | 'message' => $this->translator->translate('Unexpected error occurred'), |
|
80 | 1 | ], self::STATUS_INTERNAL_SERVER_ERROR); |
|
81 | } |
||
82 | } |
||
83 | |||
84 | /** |
||
85 | * @param Request $request |
||
86 | * @param $key |
||
87 | * @return \DateTime|null |
||
88 | */ |
||
89 | 4 | protected function getDateQueryParam(Request $request, $key) |
|
98 | } |
||
99 |