From 1cc6721c12294726937feee87adb1cc43104c51f Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Tue, 22 Mar 2022 16:33:00 +0100 Subject: [PATCH] optimize seen --- Admin/Install/db.json | 33 +++++++++++++++++++++------------ Models/TaskSeen.php | 17 +++++++---------- Models/TaskSeenMapper.php | 23 +++++++++++++++++++++-- 3 files changed, 49 insertions(+), 24 deletions(-) diff --git a/Admin/Install/db.json b/Admin/Install/db.json index 870ad33..2dc42c7 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -207,12 +207,6 @@ "foreignTable": "account", "foreignKey": "account_id" }, - "task_account_seen": { - "name": "task_account_seen", - "type": "TINYINT", - "default": 0, - "null": false - }, "task_account_duty": { "name": "task_account_duty", "type": "TINYINT", @@ -317,12 +311,8 @@ "task_seen_at": { "name": "task_seen_at", "type": "DATETIME", - "null": false - }, - "task_seen_flag": { - "name": "task_seen_flag", - "type": "TINYINT", - "null": false + "null": true, + "default": null }, "task_seen_by": { "name": "task_seen_by", @@ -337,6 +327,25 @@ "null": false, "foreignTable": "task", "foreignKey": "task_id" + }, + "task_seen_reminder": { + "name": "task_seen_reminder", + "type": "TINYINT", + "null": false + }, + "task_seen_reminder_at": { + "name": "task_seen_reminder_at", + "type": "DATETIME", + "null": true, + "default": null + }, + "task_seen_reminder_by": { + "name": "task_seen_reminder_by", + "type": "INT", + "null": true, + "default": null, + "foreignTable": "account", + "foreignKey": "account_id" } } } diff --git a/Models/TaskSeen.php b/Models/TaskSeen.php index 1d20324..f1570ca 100644 --- a/Models/TaskSeen.php +++ b/Models/TaskSeen.php @@ -14,6 +14,8 @@ declare(strict_types=1); namespace Modules\Tasks\Models; +use Modules\Admin\Models\Account; + /** * Null model * @@ -38,16 +40,11 @@ class TaskSeen public int $task = 0; - /** - * The flag allows to set a task as not seen even it was already seen. - * - * This is helpful for changes to a task or forwarding which should be signaled to the user. - * Another situation could be if a user wants to mark a task as unseen in order to check it out later on again. - * - * @var bool - * @since 1.0.0 - */ - public bool $flag = false; + public ?\DateTime $reminderAt = null; + + public bool $isRemindered = false; + + public ?Account $reminderBy = null; /** * Constructor. diff --git a/Models/TaskSeenMapper.php b/Models/TaskSeenMapper.php index 1f8ed8c..1668952 100644 --- a/Models/TaskSeenMapper.php +++ b/Models/TaskSeenMapper.php @@ -14,10 +14,14 @@ declare(strict_types=1); namespace Modules\Tasks\Models; +use Modules\Admin\Models\AccountMapper; use phpOMS\DataStorage\Database\Mapper\DataMapperFactory; /** - * Tasks mapper class. + * Task seen mapper class. + * + * This class is used to mark a task as seen. Additionally, you may set a reminder flag which can be used to highlight + * a task. * * @package Modules\Tasks\Models * @license OMS License 1.0 @@ -37,7 +41,22 @@ final class TaskSeenMapper extends DataMapperFactory 'task_seen_at' => ['name' => 'task_seen_at', 'type' => 'DateTime', 'internal' => 'seenAt'], 'task_seen_task' => ['name' => 'task_seen_task', 'type' => 'int', 'internal' => 'task'], 'task_seen_by' => ['name' => 'task_seen_by', 'type' => 'int', 'internal' => 'seenBy'], - 'task_seen_flag' => ['name' => 'task_seen_flag', 'type' => 'bool', 'internal' => 'flag'], + 'task_seen_reminder' => ['name' => 'task_seen_reminder', 'type' => 'bool', 'internal' => 'isRemindered'], + 'task_seen_reminder_at' => ['name' => 'task_seen_reminder_at', 'type' => 'DateTime', 'internal' => 'reminderAt'], + 'task_seen_reminder_by' => ['name' => 'task_seen_reminder_by', 'type' => 'int', 'internal' => 'reminderBy'], + ]; + + /** + * Belongs to. + * + * @var array + * @since 1.0.0 + */ + public const BELONGS_TO = [ + 'reminderBy' => [ + 'mapper' => AccountMapper::class, + 'external' => 'task_seen_reminder_by', + ], ]; /**