mirror of
https://github.com/nextcloud/server.git
synced 2026-06-08 16:26:59 -04:00
feat(files_reminders): create or update
Signed-off-by: Christopher Ng <chrng8@gmail.com>
(cherry picked from commit 887058591c)
This commit is contained in:
parent
e99f1b011a
commit
f4c7759257
4 changed files with 27 additions and 17 deletions
|
|
@ -30,7 +30,7 @@ $requirements = [
|
|||
|
||||
return [
|
||||
'ocs' => [
|
||||
['name' => 'Api#get', 'url' => '/api/v{version}/get', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
['name' => 'Api#create', 'url' => '/api/v{version}/create', 'verb' => 'POST', 'requirements' => $requirements],
|
||||
['name' => 'Api#get', 'url' => '/api/v{version}/get/{fileId}', 'verb' => 'GET', 'requirements' => $requirements],
|
||||
['name' => 'Api#set', 'url' => '/api/v{version}/set/{fileId}', 'verb' => 'PUT', 'requirements' => $requirements],
|
||||
],
|
||||
];
|
||||
|
|
|
|||
|
|
@ -83,7 +83,7 @@ class ApiController extends OCSController {
|
|||
*
|
||||
* @param string $dueDate ISO 8601 formatted date time string
|
||||
*/
|
||||
public function create(int $fileId, string $dueDate): JSONResponse {
|
||||
public function set(int $fileId, string $dueDate): JSONResponse {
|
||||
try {
|
||||
$dueDate = (new DateTime($dueDate))->setTimezone(new DateTimeZone('UTC'));
|
||||
} catch (Exception $e) {
|
||||
|
|
@ -97,7 +97,7 @@ class ApiController extends OCSController {
|
|||
}
|
||||
|
||||
try {
|
||||
$this->reminderService->create($user, $fileId, $dueDate);
|
||||
$this->reminderService->createOrUpdate($user, $fileId, $dueDate);
|
||||
return new JSONResponse([], Http::STATUS_OK);
|
||||
} catch (Throwable $th) {
|
||||
$this->logger->error($th->getMessage(), ['exception' => $th]);
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function find(int $id): Reminder {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->where($qb->expr()->eq('id', $qb->createNamedParameter($id, IQueryBuilder::PARAM_INT)));
|
||||
|
||||
|
|
@ -69,7 +69,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function findDueForUser(IUser $user, int $fileId): Reminder {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user->getUID(), IQueryBuilder::PARAM_STR)))
|
||||
->andWhere($qb->expr()->eq('file_id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)))
|
||||
|
|
@ -86,7 +86,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function findAll() {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->orderBy('due_date', 'ASC');
|
||||
|
||||
|
|
@ -99,7 +99,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function findAllForUser(IUser $user) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user->getUID(), IQueryBuilder::PARAM_STR)))
|
||||
->orderBy('due_date', 'ASC');
|
||||
|
|
@ -113,7 +113,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function findOverdue() {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->where($qb->expr()->lt('due_date', $qb->createFunction('NOW()')))
|
||||
->andWhere($qb->expr()->eq('notified', $qb->createNamedParameter(false, IQueryBuilder::PARAM_BOOL)))
|
||||
|
|
@ -128,7 +128,7 @@ class ReminderMapper extends QBMapper {
|
|||
public function findNotified(?int $limit = null) {
|
||||
$qb = $this->db->getQueryBuilder();
|
||||
|
||||
$qb->select('user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
$qb->select('id', 'user_id', 'file_id', 'due_date', 'updated_at', 'created_at', 'notified')
|
||||
->from($this->getTableName())
|
||||
->where($qb->expr()->eq('notified', $qb->createNamedParameter(true, IQueryBuilder::PARAM_BOOL)))
|
||||
->orderBy('due_date', 'ASC')
|
||||
|
|
|
|||
|
|
@ -78,13 +78,23 @@ class ReminderService {
|
|||
);
|
||||
}
|
||||
|
||||
public function create(IUser $user, int $fileId, DateTime $dueDate): void {
|
||||
$reminder = new Reminder();
|
||||
$reminder->setUserId($user->getUID());
|
||||
$reminder->setFileId($fileId);
|
||||
$reminder->setDueDate($dueDate);
|
||||
$reminder->setCreatedAt(new DateTime('now', new DateTimeZone('UTC')));
|
||||
$this->reminderMapper->insert($reminder);
|
||||
public function createOrUpdate(IUser $user, int $fileId, DateTime $dueDate): void {
|
||||
$now = new DateTime('now', new DateTimeZone('UTC'));
|
||||
try {
|
||||
$reminder = $this->reminderMapper->findDueForUser($user, $fileId);
|
||||
$reminder->setDueDate($dueDate);
|
||||
$reminder->setUpdatedAt($now);
|
||||
$this->reminderMapper->update($reminder);
|
||||
} catch (DoesNotExistException $e) {
|
||||
// Create new reminder if no reminder is found
|
||||
$reminder = new Reminder();
|
||||
$reminder->setUserId($user->getUID());
|
||||
$reminder->setFileId($fileId);
|
||||
$reminder->setDueDate($dueDate);
|
||||
$reminder->setUpdatedAt($now);
|
||||
$reminder->setCreatedAt($now);
|
||||
$this->reminderMapper->insert($reminder);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue