Passed
Push — master ( cbc220...e09a18 )
by Marcel
03:45
created

DataloadMapper::commit()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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