Passed
Push — master ( fc42a6...b0746a )
by Marcel
02:44 queued 11s
created

DataloadMapper::deleteByDataset()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nc 1
nop 1
dl 0
loc 7
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * Analytics
4
 *
5
 * This file is licensed under the Affero General Public License version 3 or
6
 * later. See the LICENSE.md file.
7
 *
8
 * @author Marcel Scherello <[email protected]>
9
 * @copyright 2021 Marcel Scherello
10
 */
11
12
namespace OCA\Analytics\Db;
13
14
use OCP\IDBConnection;
15
use Psr\Log\LoggerInterface;
16
17
class DataloadMapper
18
{
19
    private $userId;
20
    private $db;
21
    private $logger;
22
    const TABLE_NAME = 'analytics_dataload';
23
24
    public function __construct(
25
        $userId,
26
        IDBConnection $db,
27
        LoggerInterface $logger
28
    )
29
    {
30
        $this->userId = $userId;
31
        $this->db = $db;
32
        $this->logger = $logger;
33
        self::TABLE_NAME;
34
    }
35
36
    public function beginTransaction()
37
    {
38
        $this->db->beginTransaction();
39
    }
40
41
    public function commit()
42
    {
43
        $this->db->commit();
44
    }
45
46
    public function rollBack()
47
    {
48
        $this->db->rollBack();
49
    }
50
51
    /**
52
     * create a new dataload
53
     *
54
     * @NoAdminRequired
55
     * @param int $datasetId
56
     * @param int $datasourceId
57
     * @return integer
58
     * @throws \OCP\DB\Exception
59
     */
60
    public function create(int $datasetId, int $datasourceId)
61
    {
62
        $sql = $this->db->getQueryBuilder();
63
        $sql->insert(self::TABLE_NAME)
64
            ->values([
65
                'user_id' => $sql->createNamedParameter($this->userId),
66
                'name' => $sql->createNamedParameter('New'),
67
                'dataset' => $sql->createNamedParameter($datasetId),
68
                'datasource' => $sql->createNamedParameter($datasourceId),
69
                'option' => $sql->createNamedParameter('{}'),
70
            ]);
71
        $sql->execute();
72
        return (int)$sql->getLastInsertId();
73
    }
74
75
    /**
76
     * get all data loads for a dataset
77
     *
78
     * @NoAdminRequired
79
     * @param int $datasetId
80
     * @return array
81
     */
82
    public function read(int $datasetId)
83
    {
84
        $sql = $this->db->getQueryBuilder();
85
        $sql->from(self::TABLE_NAME)
86
            ->select('*')
87
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
88
            ->andWhere($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
89
        $statement = $sql->execute();
90
        $result = $statement->fetchAll();
91
        $statement->closeCursor();
92
        return $result;
93
    }
94
95
    public function getAllDataloadMetadata()
96
    {
97
        $sql = $this->db->getQueryBuilder();
98
        $sql->from(self::TABLE_NAME)
99
            ->select('dataset')
100
            ->selectAlias($sql->func()->count('id'), 'dataloads')
101
            ->selectAlias($sql->func()->max('schedule'), 'schedules')
102
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
103
            ->addgroupBy('dataset');
104
        $statement = $sql->execute();
105
        $result = $statement->fetchAll();
106
        $statement->closeCursor();
107
        return $result;
108
    }
109
110
    /**
111
     * get all data load & schedule metadata
112
     *
113
     * @NoAdminRequired
114
     * @param $schedule
115
     * @return array
116
     */
117
    public function getDataloadBySchedule($schedule)
118
    {
119
        $sql = $this->db->getQueryBuilder();
120
        $sql->from(self::TABLE_NAME)
121
            ->select('id')
122
            ->where($sql->expr()->eq('schedule', $sql->createNamedParameter($schedule)));
123
        $statement = $sql->execute();
124
        $result = $statement->fetchAll();
125
        $statement->closeCursor();
126
        return $result;
127
    }
128
129
    /**
130
     * update dataload
131
     *
132
     * @NoAdminRequired
133
     * @param int $dataloadId
134
     * @param $name
135
     * @param $option
136
     * @param $schedule
137
     * @return bool
138
     */
139
    public function update(int $dataloadId, $name, $option, $schedule)
140
    {
141
        $name = $this->truncate($name, 64);
142
        $sql = $this->db->getQueryBuilder();
143
        $sql->update(self::TABLE_NAME)
144
            ->set('name', $sql->createNamedParameter($name))
145
            ->set('option', $sql->createNamedParameter($option))
146
            ->set('schedule', $sql->createNamedParameter($schedule))
147
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
148
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($dataloadId)));
149
        $sql->execute();
150
        return true;
151
    }
152
153
    /**
154
     * delete a dataload
155
     *
156
     * @NoAdminRequired
157
     * @param int $dataloadId
158
     * @return bool
159
     */
160
    public function delete(int $dataloadId)
161
    {
162
        $sql = $this->db->getQueryBuilder();
163
        $sql->delete(self::TABLE_NAME)
164
            ->where($sql->expr()->eq('user_id', $sql->createNamedParameter($this->userId)))
165
            ->andWhere($sql->expr()->eq('id', $sql->createNamedParameter($dataloadId)));
166
        $sql->execute();
167
        return true;
168
    }
169
170
    /**
171
     * delete a dataload
172
     *
173
     * @NoAdminRequired
174
     * @param int $datasetId
175
     * @return bool
176
     */
177
    public function deleteByDataset(int $datasetId)
178
    {
179
        $sql = $this->db->getQueryBuilder();
180
        $sql->delete(self::TABLE_NAME)
181
            ->where($sql->expr()->eq('dataset', $sql->createNamedParameter($datasetId)));
182
        $sql->execute();
183
        return true;
184
    }
185
186
    /**
187
     * get data load by id
188
     * @param int $dataloadId
189
     * @return array
190
     */
191
    public function getDataloadById(int $dataloadId)
192
    {
193
        $sql = $this->db->getQueryBuilder();
194
        $sql->from(self::TABLE_NAME)
195
            ->select('*')
196
            ->where($sql->expr()->eq('id', $sql->createNamedParameter($dataloadId)));
197
        $statement = $sql->execute();
198
        $result = $statement->fetch();
199
        $statement->closeCursor();
200
        return $result;
201
    }
202
203
    /**
204
     * truncates fiels do DB-field size
205
     *
206
     * @param $string
207
     * @param $length
208
     * @param $dots
209
     * @return string
210
     */
211
    private function truncate($string, $length, $dots = "...")
212
    {
213
        return (strlen($string) > $length) ? mb_strcut($string, 0, $length - strlen($dots)) . $dots : $string;
214
    }
215
}