zend-blog-3-backend
82 строки · 2.5 Кб
1<?php
2
3namespace App\API\Transformers;
4
5use App\Entity\Tracking;
6use App\Utils\EmojiFlagSymbol;
7use League\Fractal\Resource\ResourceInterface;
8
9class TrackingTransformer extends BaseTransformer
10{
11/**
12* @var array
13*/
14protected array $availableIncludes = [
15'trackingAgents',
16];
17
18public function transform(Tracking $item)
19{
20$countryCode = null;
21$locationCity = null;
22$locationRegion = null;
23$locationCountry = null;
24$location = $item->getGeoLocation();
25if ($location && $city = $location->getCity()) {
26$locationCity = $city->getCity();
27$locationRegion = $city->getRegion();
28$locationCountry = $city->getCountry()->getName();
29$countryCode = $city->getCountry()->getCode();
30}
31
32try {
33$flag = $countryCode ? EmojiFlagSymbol::get($countryCode) : '';
34} catch (\Exception $e) {
35$flag = '';
36}
37
38$duration = $item->getDuration();
39$durationString = '';
40if ($duration > 1000_000) {
41$durationString = round($duration * 0.000001, 3) . ' s';
42} elseif ($duration > 1000) {
43$durationString = round($duration * 0.001, 2) . ' ms';
44} elseif ($duration > 0) {
45$durationString = $duration . ' µs';
46}
47
48return [
49'id' => $item->getId(),
50'statusCode' => $item->getStatusCode(),
51'ipAddr' => $item->getIpAddress(),
52'requestUri' => $item->getRequestURI(),
53'userAgent' => $item->getTrackingAgent() ? $item->getTrackingAgent()->getId() : null,
54'articleTitle' => $item->getPost() ? $item->getPost()->getTitle() : null,
55'articleSlug' => $item->getPost() ? $item->getPost()->getUrl() : null,
56'isCDN' => $item->isCdn(),
57'city' => $locationCity,
58'region' => $locationRegion,
59'country' => $locationCountry,
60'countryFlag' => $flag,
61'method' => (string)$item->getMethod(),
62'duration' => $durationString,
63'createdAt' => $this->dateTimeToISO($item->getTimeCreated()),
64];
65}
66
67/**
68* @param Tracking $entity
69*
70* @return ResourceInterface
71*/
72public function includeTrackingAgents(Tracking $entity): ResourceInterface
73{
74$agent = $entity->getTrackingAgent();
75$items = [];
76if ($agent) {
77$items = [$agent];
78}
79
80return $this->collection($items, new UserAgentTransformer(), 'userAgents');
81}
82}
83