From 27fc9a2b299b47c180fc0ff3510b2275a3d67ac9 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 7 Mar 2021 21:20:44 +0800 Subject: [PATCH] Add task update activity log --- app/Entities/Projects/Task.php | 1 + app/Events/Tasks/Updated.php | 15 ++++++++ app/Listeners/Tasks/LogTaskUpdateActivity.php | 52 +++++++++++++++++++++++++++ app/Providers/EventServiceProvider.php | 3 ++ tests/Unit/Models/ActivityTest.php | 28 +++++++++++++++ 5 files changed, 99 insertions(+) create mode 100644 app/Events/Tasks/Updated.php create mode 100644 app/Listeners/Tasks/LogTaskUpdateActivity.php diff --git a/app/Entities/Projects/Task.php b/app/Entities/Projects/Task.php index fde2605..4b209cd 100755 --- a/app/Entities/Projects/Task.php +++ b/app/Entities/Projects/Task.php @@ -13,6 +13,7 @@ class Task extends Model */ protected $dispatchesEvents = [ 'created' => 'App\Events\Tasks\Created', + 'updated' => 'App\Events\Tasks\Updated', ]; protected $guarded = ['id', 'created_at', 'updated_at']; diff --git a/app/Events/Tasks/Updated.php b/app/Events/Tasks/Updated.php new file mode 100644 index 0000000..3b6da9d --- /dev/null +++ b/app/Events/Tasks/Updated.php @@ -0,0 +1,15 @@ +task = $task; + } +} diff --git a/app/Listeners/Tasks/LogTaskUpdateActivity.php b/app/Listeners/Tasks/LogTaskUpdateActivity.php new file mode 100644 index 0000000..f9b3bb2 --- /dev/null +++ b/app/Listeners/Tasks/LogTaskUpdateActivity.php @@ -0,0 +1,52 @@ +task; + $originalTask = $task->getOriginal(); + $attributeChanges = $task->getChanges(); + $attributeKeys = array_keys($task->getChanges()); + + $activityEntry = [ + 'type' => 'task_updated', + 'parent_id' => null, + 'user_id' => auth()->id(), + 'object_id' => $task->id, + 'object_type' => 'tasks', + 'data' => [ + 'before' => $this->getBeforeValues($originalTask, $attributeKeys), + 'after' => $this->getAfterValues($task->toArray(), $attributeKeys), + 'notes' => null, + ], + ]; + + Activity::create($activityEntry); + } + + private function getBeforeValues(array $originalTask, array $attributeKeys) + { + $beforeValues = []; + foreach ($attributeKeys as $attributeKey) { + $beforeValues[$attributeKey] = $originalTask[$attributeKey]; + } + + return $beforeValues; + } + + private function getAfterValues(array $task, array $attributeKeys) + { + $afterValues = []; + foreach ($attributeKeys as $attributeKey) { + $afterValues[$attributeKey] = $task[$attributeKey]; + } + + return $afterValues; + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 66fd7e8..0888522 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -31,6 +31,9 @@ class EventServiceProvider extends ServiceProvider 'App\Events\Tasks\Created' => [ 'App\Listeners\Tasks\LogTaskCreationActivity', ], + 'App\Events\Tasks\Updated' => [ + 'App\Listeners\Tasks\LogTaskUpdateActivity', + ], ]; /** diff --git a/tests/Unit/Models/ActivityTest.php b/tests/Unit/Models/ActivityTest.php index 7977fb1..ed0afc6 100644 --- a/tests/Unit/Models/ActivityTest.php +++ b/tests/Unit/Models/ActivityTest.php @@ -134,4 +134,32 @@ class ActivityTest extends TestCase 'data' => null, ]); } + + /** @test */ + public function it_records_task_data_update_activities() + { + $admin = $this->adminUserSigningIn(); + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id]); + $task = factory(Task::class)->create([ + 'name' => 'New Task', + 'job_id' => $job->id, + ]); + + $task->name = 'Updated task'; + $task->save(); + + $this->seeInDatabase('user_activities', [ + 'type' => 'task_updated', + 'parent_id' => null, + 'user_id' => $admin->id, + 'object_id' => $task->id, + 'object_type' => 'tasks', + 'data' => json_encode([ + 'before' => ['name' => 'New Task'], + 'after' => ['name' => 'Updated task'], + 'notes' => null, + ]), + ]); + } }