zend-blog-3-backend

Форк
0
/
TrackingTransformer.php 
82 строки · 2.5 Кб
1
<?php
2

3
namespace App\API\Transformers;
4

5
use App\Entity\Tracking;
6
use App\Utils\EmojiFlagSymbol;
7
use League\Fractal\Resource\ResourceInterface;
8

9
class TrackingTransformer extends BaseTransformer
10
{
11
    /**
12
     * @var array
13
     */
14
    protected array $availableIncludes = [
15
        'trackingAgents',
16
    ];
17

18
    public function transform(Tracking $item)
19
    {
20
        $countryCode = null;
21
        $locationCity = null;
22
        $locationRegion = null;
23
        $locationCountry = null;
24
        $location = $item->getGeoLocation();
25
        if ($location && $city = $location->getCity()) {
26
            $locationCity = $city->getCity();
27
            $locationRegion = $city->getRegion();
28
            $locationCountry = $city->getCountry()->getName();
29
            $countryCode = $city->getCountry()->getCode();
30
        }
31

32
        try {
33
            $flag = $countryCode ? EmojiFlagSymbol::get($countryCode) : '';
34
        } catch (\Exception $e) {
35
            $flag = '';
36
        }
37

38
        $duration = $item->getDuration();
39
        $durationString = '';
40
        if ($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

48
        return [
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
     */
72
    public function includeTrackingAgents(Tracking $entity): ResourceInterface
73
    {
74
        $agent = $entity->getTrackingAgent();
75
        $items = [];
76
        if ($agent) {
77
            $items = [$agent];
78
        }
79

80
        return $this->collection($items, new UserAgentTransformer(), 'userAgents');
81
    }
82
}
83

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.