Code Duplication    Length = 93-106 lines in 3 locations

src/Domain/Stream/DailyMile/MysqlDailyMileRepository.php 1 location

@@ 8-113 (lines=106) @@
5
use Aura\Sql\ConnectionLocator;
6
use DateTime;
7
8
class MysqlDailyMileRepository implements DailyMileRepositoryInterface
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 $limit
24
     * @param integer $offset
25
     *
26
     * @return array|false
27
     */
28
    public function getEntries($limit = null, $offset = 0)
29
    {
30
        $query = "
31
            SELECT `id`, `entry_id`, `datetime`
32
            FROM `jpemeric_stream`.`dailymile`
33
            ORDER BY `datetime` DESC";
34
        if (!is_null($limit)) {
35
          $query .= "
36
          LIMIT {$offset}, {$limit}";
37
        }
38
39
        return $this
40
            ->connections
41
            ->getRead()
42
            ->fetchAll($query);
43
    }
44
45
    /**
46
     * @param integer $entryId
47
     *
48
     * @return array|false
49
     */
50
    public function getEntryByEntryId($entryId)
51
    {
52
        $query = "
53
            SELECT *
54
            FROM `jpemeric_stream`.`dailymile`
55
            WHERE `entry_id` = :entry_id
56
            LIMIT 1";
57
58
        $bindings = [
59
            'entry_id' => $entryId,
60
        ];
61
62
        return $this
63
            ->connections
64
            ->getRead()
65
            ->fetchOne($query, $bindings);
66
    }
67
68
    public function getDailyMilesUpdatedSince(DateTime $datetime)
69
    {
70
        $query = "
71
            SELECT *
72
            FROM `jpemeric_stream`.`dailymile`
73
            WHERE `updated_at` >= :last_update";
74
75
        $bindings = [
76
            'last_update' => $datetime->format('Y-m-d H:i:s'),
77
        ];
78
79
        return $this
80
            ->connections
81
            ->getRead()
82
            ->fetchAll($query, $bindings);
83
    }
84
85
    /**
86
     * @param integer  $entryId
87
     * @param string   $entryType
88
     * @param DateTime $datetime
89
     * @param array    $metadata
90
     *
91
     * @return
92
     */
93
    public function insertEntry($entryId, $entryType, DateTime $datetime, array $metadata)
94
    {
95
        $query = "
96
            INSERT INTO `jpemeric_stream`.`dailymile`
97
                (`entry_id`, `type`, `datetime`, `metadata`)
98
            VALUES
99
                (:entry_id, :entry_type, :datetime, :metadata)";
100
101
        $bindings = [
102
            'entry_id' => $entryId,
103
            'entry_type' => $entryType,
104
            'datetime' => $datetime->format('Y-m-d H:i:s'),
105
            'metadata' => json_encode($metadata),
106
        ];
107
108
        return $this
109
            ->connections
110
            ->getWrite()
111
            ->perform($query, $bindings);
112
    }
113
}
114

src/Domain/Stream/Goodread/MysqlGoodreadRepository.php 1 location

@@ 8-100 (lines=93) @@
5
use Aura\Sql\ConnectionLocator;
6
use DateTime;
7
8
class MysqlGoodreadRepository implements GoodreadRepositoryInterface
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 $limit
24
     * @param integer $offset
25
     *
26
     * @return array|false
27
     */
28
    public function getReviews($limit = null, $offset = 0)
29
    {
30
        $query = "
31
            SELECT `id`, `permalink`, `datetime`
32
            FROM `jpemeric_stream`.`goodread`
33
            ORDER BY `datetime` DESC";
34
        if (!is_null($limit)) {
35
          $query .= "
36
          LIMIT {$offset}, {$limit}";
37
        }
38
39
        return $this
40
            ->connections
41
            ->getRead()
42
            ->fetchAll($query);
43
    }
44
45
    public function getReviewByPermalink($permalink)
46
    {
47
        $query = "
48
            SELECT *
49
            FROM `jpemeric_stream`.`goodread`
50
            WHERE `permalink` = :permalink
51
            LIMIT 1";
52
53
        $bindings = [
54
            'permalink' => $permalink,
55
        ];
56
57
        return $this
58
            ->connections
59
            ->getRead()
60
            ->fetchOne($query, $bindings);
61
    }
62
63
    public function getGoodreadsUpdatedSince(DateTime $datetime)
64
    {
65
        $query = "
66
            SELECT *
67
            FROM `jpemeric_stream`.`goodread`
68
            WHERE `updated_at` >= :last_update";
69
70
        $bindings = [
71
            'last_update' => $datetime->format('Y-m-d H:i:s'),
72
        ];
73
74
        return $this
75
            ->connections
76
            ->getRead()
77
            ->fetchAll($query, $bindings);
78
    }
79
80
    public function insertReview($permalink, $bookId, DateTime $datetime, array $metadata)
81
    {
82
        $query = "
83
            INSERT INTO `jpemeric_stream`.`goodread`
84
                (`permalink`, `book_id`, `datetime`, `metadata`)
85
            VALUES
86
                (:permalink, :book_id, :datetime, :metadata)";
87
88
        $bindings = [
89
            'permalink' => $permalink,
90
            'book_id' => $bookId,
91
            'datetime' => $datetime->format('Y-m-d H:i:s'),
92
            'metadata' => json_encode($metadata),
93
        ];
94
95
        return $this
96
            ->connections
97
            ->getWrite()
98
            ->perform($query, $bindings);
99
    }
100
}
101

src/Domain/Stream/YouTube/MysqlYouTubeRepository.php 1 location

@@ 8-102 (lines=95) @@
5
use Aura\Sql\ConnectionLocator;
6
use DateTime;
7
8
class MysqlYouTubeRepository implements YouTubeRepositoryInterface
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
    public function getYouTubes($limit = null, $offset = 0)
23
    {
24
        $query = "
25
            SELECT `id`, `video_id`, `datetime`
26
            FROM `jpemeric_stream`.`youtube`
27
            ORDER BY `datetime` DESC";
28
        if (!is_null($limit)) {
29
            $query .= "
30
            LIMIT {$offset}, {$limit}";
31
        }
32
33
        return $this
34
            ->connections
35
            ->getRead()
36
            ->fetchAll($query);
37
    }
38
39
    /**
40
     * @param integer $id
41
     *
42
     * @return array|false
43
     */
44
    public function getYouTubeById($id)
45
    {
46
        $query = "
47
            SELECT *
48
            FROM `jpemeric_stream`.`youtube`
49
            WHERE `id` = :id
50
            LIMIT 1";
51
        $bindings = [
52
            'id' => $id,
53
        ];
54
55
        return $this
56
            ->connections
57
            ->getRead()
58
            ->fetchOne($query, $bindings);
59
    }
60
61
    /**
62
     * @param string $title
63
     *
64
     * @return array|false
65
     */
66
    public function getYouTubeByVideoId($videoId)
67
    {
68
        $query = "
69
            SELECT *
70
            FROM `jpemeric_stream`.`youtube`
71
            WHERE `video_id` = :video_id
72
            LIMIT 1";
73
        $bindings = [
74
            'video_id' => $videoId,
75
        ];
76
77
        return $this
78
            ->connections
79
            ->getRead()
80
            ->fetchOne($query, $bindings);
81
    }
82
83
    public function insertVideo($videoId, DateTime $datetime, array $metadata)
84
    {
85
        $query = "
86
            INSERT INTO `jpemeric_stream`.`youtube`
87
                (`video_id`, `datetime`, `metadata`)
88
            VALUES
89
                (:video_id, :datetime, :metadata)";
90
91
        $bindings = [
92
            'video_id' => $videoId,
93
            'datetime' => $datetime->format('Y-m-d H:i:s'),
94
            'metadata' => json_encode($metadata),
95
        ];
96
97
        return $this
98
            ->connections
99
            ->getWrite()
100
            ->perform($query, $bindings);
101
    }
102
}
103