EdgeMedia   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 3
eloc 53
c 1
b 0
f 0
dl 0
loc 74
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A setEnvelope() 0 3 1
A __construct() 0 3 1
A config() 0 54 1
1
<?php
2
/**
3
 * Created for IG Client.
4
 * User: jakim <[email protected]>
5
 * Date: 14.03.2018
6
 */
7
8
namespace Jakim\Mapper;
9
10
11
use Jakim\Base\Mapper;
12
use Jakim\Model\Account;
13
use Jakim\Model\Location;
14
use Jakim\Model\MediaCollection;
15
use Jakim\Model\PageInfo;
16
use Jakim\Model\Post;
17
18
/**
19
 * Account SharedData.
20
 *
21
 * @package Jakim\Mapper
22
 */
23
class EdgeMedia extends Mapper
24
{
25
    const ACCOUNT_DETAILS_ENVELOPE = 'entry_data.ProfilePage.0.graphql.user.edge_owner_to_timeline_media';
26
    const EXPLORE_TAGS_HASHTAG_MEDIA_ENVELOPE = 'graphql.hashtag.edge_hashtag_to_media';
27
    const EXPLORE_TAGS_TOP_POSTS_ENVELOPE = 'graphql.hashtag.edge_hashtag_to_top_posts';
28
    const GRAPHQL_HASHTAG_MEDIA_ENVELOPE = 'data.hashtag.edge_hashtag_to_media';
29
    const GRAPHQL_ACCOUNT_MEDIA_ENVELOPE = 'data.user.edge_owner_to_timeline_media';
30
31
    protected $envelope = self::ACCOUNT_DETAILS_ENVELOPE;
32
33
    public function __construct(string $envelope = self::ACCOUNT_DETAILS_ENVELOPE)
34
    {
35
        $this->setEnvelope($envelope);
36
    }
37
38
    public function setEnvelope($key)
39
    {
40
        $this->envelope = $key;
41
    }
42
43
    public function config(): array
44
    {
45
        return [
46
            'class' => MediaCollection::class,
47
            'envelope' => $this->envelope,
48
            'properties' => [
49
                'count' => 'count',
50
            ],
51
            'relations' => [
52
                'posts' => [
53
                    'multiple' => true,
54
                    'class' => Post::class,
55
                    'envelope' => 'edges',
56
                    'properties' => [
57
                        'id' => 'node.id',
58
                        'shortcode' => 'node.shortcode',
59
                        'url' => 'node.display_url',
60
                        'caption' => 'node.edge_media_to_caption.edges.0.node.text',
61
                        'likes' => 'node.edge_media_preview_like.count',
62
                        'comments' => 'node.edge_media_to_comment.count',
63
                        'takenAt' => 'node.taken_at_timestamp',
64
                        'isVideo' => 'node.is_video',
65
                        'videoViews' => 'node.video_view_count',
66
                        'videoUrl' => 'node.video_url',
67
                        'typename' => 'node.__typename',
68
                        'accessibilityCaption' => 'node.accessibility_caption',
69
                    ],
70
                    'relations' => [
71
                        'account' => [
72
                            'class' => Account::class,
73
                            'envelope' => 'node.owner',
74
                            'properties' => [
75
                                'id' => 'id',
76
                                'username' => 'username',
77
                            ],
78
                        ],
79
                        'location' => [
80
                            'class' => Location::class,
81
                            'envelope' => 'node.location',
82
                            'properties' => [
83
                                'id' => 'id',
84
                                'hasPublicPage' => 'has_public_page',
85
                                'name' => 'name',
86
                                'slug' => 'slug',
87
                            ],
88
                        ],
89
                    ],
90
                ],
91
                'pageInfo' => [
92
                    'class' => PageInfo::class,
93
                    'envelope' => 'page_info',
94
                    'properties' => [
95
                        'hasNextPage' => 'has_next_page',
96
                        'endCursor' => 'end_cursor',
97
                    ],
98
                ],
99
            ],
100
        ];
101
    }
102
}