Completed
Push — master ( 041b6e...f72f24 )
by Jacob
04:21
created

MysqlTwitterRepository::getTwitterById()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 16
rs 9.4286
cc 1
eloc 8
nc 1
nop 1
1
<?php
2
3
namespace Jacobemerick\Web\Domain\Stream\Twitter;
4
5
use Aura\Sql\ConnectionLocator;
6
use DateTimeInterface;
7
8
class MysqlTwitterRepository implements TwitterRepositoryInterface
9
{
10
11
    /** @var  ConnectionLocator */
12
    protected $connections;
13
14
    /**
15
     * @param ConnectonLocator $connections
16
     */
17
    public function __construct(ConnectionLocator $connections)
18
    {
19
        $this->connections = $connections;
20
    }
21
22
    /**
23
     * @param integer $id
24
     *
25
     * @return array|false
26
     */
27
    public function getTwitterById($id)
28
    {
29
        $query = "
30
            SELECT *
31
            FROM `jpemeric_stream`.`twitter`
32
            WHERE `id` = :id
33
            LIMIT 1";
34
        $bindings = [
35
            'id' => $id,
36
        ];
37
38
        return $this
39
            ->connections
40
            ->getRead()
41
            ->fetchOne($query, $bindings);
42
    }
43
44
    public function getTwitterByTweetId($tweetId)
45
    {
46
        $query = "
47
            SELECT `id`, `tweet_id`, `datetime`, `metadata`
48
            FROM `jpemeric_stream`.`twitter2`
49
            WHERE `tweet_id` = :tweet_id
50
            LIMIT 1";
51
52
        $bindings = [
53
            'tweet_id' => $tweetId,
54
        ];
55
56
        return $this
57
            ->connections
58
            ->getRead()
59
            ->fetchOne($query, $bindings);
60
    }
61
62
    /**
63
     * @param DateTimeInterface $date
64
     * @param string            $text
65
     *
66
     * @return array|false
67
     */
68
    public function getTwitterByFields(DateTimeInterface $date, $text)
69
    {
70
        $query = "
71
            SELECT *
72
            FROM `jpemeric_stream`.`twitter`
73
            WHERE `date` = :date AND `text` = :text
74
            LIMIT 1";
75
        $bindings = [
76
            'date' => $date->format('Y-m-d H:i:s'),
77
            'text' => $text,
78
        ];
79
80
        return $this
81
            ->connections
82
            ->getRead()
83
            ->fetchOne($query, $bindings);
84
    }
85
86
    /**
87
     * @return array|false
88
     */
89
    public function getUnmappedTwitters()
90
    {
91
        $query = "
92
            SELECT `id`, `date`
93
            FROM `jpemeric_stream`.`twitter`
94
            LEFT JOIN `jpemeric_stream`.`post`
95
            ON `post`.`type_id` = `twitter`.`id` AND `post`.`id` IS NULL";
96
97
        return $this
98
            ->connections
99
            ->getRead()
100
            ->fetchAll($query);
101
    }
102
103
    public function insertTweet($tweetId, DateTimeInterface $datetime, array $metadata)
104
    {
105
        $query = "
106
            INSERT INTO `jpemeric_stream`.`twitter2`
107
                (`tweet_id`, `datetime`, `metadata`)
108
            VALUES
109
                (:tweet_id, :datetime, :metadata)";
110
111
        $bindings = [
112
            'tweet_id' => $tweetId,
113
            'datetime' => $datetime->format('Y-m-d H:i:s'),
114
            'metadata' => json_encode($metadata),
115
        ];
116
117
        return $this
118
            ->connections
119
            ->getWrite()
120
            ->perform($query, $bindings);
121
    }
122
123
    public function updateTweetMetadata($tweetId, array $metadata)
124
    {
125
        $query = "
126
            UPDATE `jpemeric_stream`.`twitter2`
127
            SET `metadata` = :metadata
128
            WHERE `tweet_id` = :tweet_id";
129
130
        $bindings = [
131
            'metadata' => json_encode($metadata),
132
            'tweet_id' => $tweetId,
133
        ];
134
135
        return $this
136
            ->connections
137
            ->getWrite()
138
            ->perform($query, $bindings);
139
    }
140
}
141