Add day table
parent
bac7071f52
commit
61ebfb3f83
|
@ -5,7 +5,5 @@ return [
|
||||||
|
|
||||||
// API
|
// API
|
||||||
['name' => 'api#list', 'url' => '/api/list', 'verb' => 'GET'],
|
['name' => 'api#list', 'url' => '/api/list', 'verb' => 'GET'],
|
||||||
['name' => 'api#listafter', 'url' => '/api/list/after/{time}', 'verb' => 'GET'],
|
|
||||||
['name' => 'api#listbefore', 'url' => '/api/list/before/{time}', 'verb' => 'GET'],
|
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
|
|
|
@ -70,45 +70,6 @@ class ApiController extends Controller {
|
||||||
return new JSONResponse($list, Http::STATUS_OK);
|
return new JSONResponse($list, Http::STATUS_OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*
|
|
||||||
* @return JSONResponse
|
|
||||||
*/
|
|
||||||
public function listafter(string $time): JSONResponse {
|
|
||||||
$user = $this->userSession->getUser();
|
|
||||||
if (is_null($user)) {
|
|
||||||
return new JSONResponse([], Http::STATUS_PRECONDITION_FAILED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!is_numeric($time)) {
|
|
||||||
return new JSONResponse([], Http::STATUS_PRECONDITION_FAILED);
|
|
||||||
}
|
|
||||||
|
|
||||||
$list = \OCA\BetterPhotos\Db\Util::getAfter($this->connection, $user->getUID(), intval($time));
|
|
||||||
return new JSONResponse($list, Http::STATUS_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @NoAdminRequired
|
|
||||||
* @NoCSRFRequired
|
|
||||||
*
|
|
||||||
* @return JSONResponse
|
|
||||||
*/
|
|
||||||
public function listbefore(string $time): JSONResponse {
|
|
||||||
$user = $this->userSession->getUser();
|
|
||||||
if (is_null($user)) {
|
|
||||||
return new JSONResponse([], Http::STATUS_PRECONDITION_FAILED);
|
|
||||||
}
|
|
||||||
if (!is_numeric($time)) {
|
|
||||||
return new JSONResponse([], Http::STATUS_PRECONDITION_FAILED);
|
|
||||||
}
|
|
||||||
$list = \OCA\BetterPhotos\Db\Util::getBefore($this->connection, $user->getUID(), intval($time));
|
|
||||||
return new JSONResponse($list, Http::STATUS_OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @NoAdminRequired
|
* @NoAdminRequired
|
||||||
*
|
*
|
||||||
|
|
|
@ -36,39 +36,51 @@ class Util {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$qb = $this->connection->getQueryBuilder();
|
// Get parameters
|
||||||
$qb->select('*')
|
$fileId = $file->getId();
|
||||||
->from('betterphotos')
|
$dateTaken = $this->getDateTaken($file);
|
||||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user)))
|
$dayId = 0;
|
||||||
->andWhere($qb->expr()->eq('file_id', $qb->createNamedParameter($file->getId())))
|
|
||||||
->setMaxResults(1);;
|
|
||||||
$result = $qb->executeQuery();
|
|
||||||
$row = $result->fetch();
|
|
||||||
|
|
||||||
if ($row !== false) {
|
// Insert or update file
|
||||||
if ($update) {
|
// todo: update dateTaken and dayId if needed
|
||||||
$qb = $this->connection->getQueryBuilder();
|
$sql = 'INSERT IGNORE
|
||||||
$qb->update('betterphotos')
|
INTO oc_betterphotos (user_id, file_id, date_taken, day_id)
|
||||||
->set('date_taken', $qb->createNamedParameter($this->getDateTaken($file), IQueryBuilder::PARAM_INT))
|
VALUES (?, ?, ?, ?)';
|
||||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($row['id'])));
|
$res = $this->connection->executeStatement($sql, [
|
||||||
$qb->executeStatement();
|
$user, $fileId, $dateTaken, $dayId,
|
||||||
}
|
]);
|
||||||
|
|
||||||
return;
|
// Update day table
|
||||||
|
if ($res === 1) {
|
||||||
|
$sql = 'INSERT
|
||||||
|
INTO oc_betterphotos_day (user_id, day_id, count)
|
||||||
|
VALUES (?, ?, 1)
|
||||||
|
ON DUPLICATE KEY
|
||||||
|
UPDATE count = count + 1';
|
||||||
|
$this->connection->executeStatement($sql, [
|
||||||
|
$user, $dayId,
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
$qb->insert('betterphotos')
|
|
||||||
->setValue('user_id', $qb->createNamedParameter($user))
|
|
||||||
->setValue('file_id', $qb->createNamedParameter($file->getId()))
|
|
||||||
->setValue('date_taken', $qb->createNamedParameter($this->getDateTaken($file), IQueryBuilder::PARAM_INT));
|
|
||||||
$qb->executeStatement();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function deleteFile(File $file) {
|
public function deleteFile(File $file) {
|
||||||
$qb = $this->connection->getQueryBuilder();
|
$sql = 'DELETE
|
||||||
$qb->delete('betterphotos')
|
FROM oc_betterphotos
|
||||||
->where($qb->expr()->eq('file_id', $qb->createNamedParameter($file->getId())));
|
WHERE file_id = ?
|
||||||
$qb->executeStatement();
|
RETURNING *';
|
||||||
|
$res = $this->connection->executeQuery($sql, [$file->getId()], [\PDO::PARAM_INT]);
|
||||||
|
$rows = $res->fetchAll();
|
||||||
|
|
||||||
|
foreach ($rows as $row) {
|
||||||
|
$dayId = $row['day_id'];
|
||||||
|
$userId = $row['user_id'];
|
||||||
|
$sql = 'UPDATE oc_betterphotos_day
|
||||||
|
SET count = count - 1
|
||||||
|
WHERE user_id = ? AND day_id = ?';
|
||||||
|
$this->connection->executeStatement($sql, [$userId, $dayId], [
|
||||||
|
\PDO::PARAM_STR, \PDO::PARAM_INT,
|
||||||
|
]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function getListQuery(
|
private static function getListQuery(
|
||||||
|
@ -93,28 +105,4 @@ class Util {
|
||||||
$rows = $result->fetchAll();
|
$rows = $result->fetchAll();
|
||||||
return $rows;
|
return $rows;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function getAfter(
|
|
||||||
IDBConnection $connection,
|
|
||||||
string $user,
|
|
||||||
int $time,
|
|
||||||
): array {
|
|
||||||
$qb = self::getListQuery($connection, $user);
|
|
||||||
$qb->andWhere($qb->expr()->gte('date_taken', $qb->createNamedParameter($time, IQueryBuilder::PARAM_INT)));
|
|
||||||
$result = $qb->executeQuery();
|
|
||||||
$rows = $result->fetchAll();
|
|
||||||
return $rows;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getBefore(
|
|
||||||
IDBConnection $connection,
|
|
||||||
string $user,
|
|
||||||
int $time,
|
|
||||||
): array {
|
|
||||||
$qb = self::getListQuery($connection, $user);
|
|
||||||
$qb->andWhere($qb->expr()->lte('date_taken', $qb->createNamedParameter($time, IQueryBuilder::PARAM_INT)));
|
|
||||||
$result = $qb->executeQuery();
|
|
||||||
$rows = $result->fetchAll();
|
|
||||||
return $rows;
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -37,10 +37,39 @@
|
||||||
'notnull' => true,
|
'notnull' => true,
|
||||||
'length' => 20,
|
'length' => 20,
|
||||||
]);
|
]);
|
||||||
|
$table->addColumn('day_id', Types::INTEGER, [
|
||||||
|
'notnull' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
$table->setPrimaryKey(['id']);
|
$table->setPrimaryKey(['id']);
|
||||||
$table->addIndex(['user_id'], 'betterphotos_user_id_index');
|
$table->addIndex(['user_id'], 'betterphotos_user_id_index');
|
||||||
|
$table->addIndex(['day_id'], 'betterphotos_day_id_index');
|
||||||
|
$table->addUniqueIndex(['user_id', 'file_id'], 'betterphotos_day_uf_ui');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!$schema->hasTable('betterphotos_day')) {
|
||||||
|
$table = $schema->createTable('betterphotos_day');
|
||||||
|
$table->addColumn('id', 'integer', [
|
||||||
|
'autoincrement' => true,
|
||||||
|
'notnull' => true,
|
||||||
|
]);
|
||||||
|
$table->addColumn('user_id', 'string', [
|
||||||
|
'notnull' => true,
|
||||||
|
'length' => 200,
|
||||||
|
]);
|
||||||
|
$table->addColumn('count', Types::INTEGER, [
|
||||||
|
'notnull' => true,
|
||||||
|
'default' => 0,
|
||||||
|
]);
|
||||||
|
$table->addColumn('day_id', Types::INTEGER, [
|
||||||
|
'notnull' => true,
|
||||||
|
]);
|
||||||
|
|
||||||
|
$table->setPrimaryKey(['id']);
|
||||||
|
$table->addIndex(['user_id'], 'betterphotos_day_user_id_index');
|
||||||
|
$table->addUniqueIndex(['user_id', 'day_id'], 'betterphotos_day_ud_ui');
|
||||||
|
}
|
||||||
|
|
||||||
return $schema;
|
return $schema;
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue