Browse Source

Add project creation activity log

pull/72/head
Nafies Luthfi 5 years ago
parent
commit
0eb87d3ccc
  1. 1
      app/Entities/Projects/Project.php
  2. 15
      app/Events/Projects/Created.php
  3. 5
      app/Events/Projects/Updated.php
  4. 24
      app/Listeners/Projects/LogProjectCreationActivity.php
  5. 3
      app/Listeners/Projects/LogProjectUpdateActivity.php
  6. 3
      app/Providers/EventServiceProvider.php
  7. 26
      tests/Unit/Models/ActivityTest.php

1
app/Entities/Projects/Project.php

@ -24,6 +24,7 @@ class Project extends Model
* @var array * @var array
*/ */
protected $dispatchesEvents = [ protected $dispatchesEvents = [
'created' => 'App\Events\Projects\Created',
'updated' => 'App\Events\Projects\Updated', 'updated' => 'App\Events\Projects\Updated',
]; ];

15
app/Events/Projects/Created.php

@ -0,0 +1,15 @@
<?php
namespace App\Events\Projects;
use App\Entities\Projects\Project;
class Created
{
public $project;
public function __construct(Project $project)
{
$this->project = $project;
}
}

5
app/Events/Projects/Updated.php

@ -8,11 +8,6 @@ class Updated
{ {
public $project; public $project;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Project $project) public function __construct(Project $project)
{ {
$this->project = $project; $this->project = $project;

24
app/Listeners/Projects/LogProjectCreationActivity.php

@ -0,0 +1,24 @@
<?php
namespace App\Listeners\Projects;
use App\Entities\Users\Activity;
use App\Events\Projects\Created;
class LogProjectCreationActivity
{
public function handle(Created $event)
{
$project = $event->project;
$activityEntry = [
'type' => 'project_created',
'parent_id' => null,
'user_id' => auth()->id(),
'object_id' => $project->id,
'object_type' => 'projects',
];
Activity::create($activityEntry);
}
}

3
app/Listeners/Projects/LogProjectUpdateActivity.php

@ -15,13 +15,10 @@ class LogProjectUpdateActivity
*/ */
public function handle(Updated $event) public function handle(Updated $event)
{ {
// dd($event->project->fresh()->toArray(), $event->project->getOriginal(), $event->project->getDirty());
$project = $event->project; $project = $event->project;
// dd($project->getOriginal(), $project->getChanges());
$originalProject = $project->getOriginal(); $originalProject = $project->getOriginal();
$attributeChanges = $project->getChanges(); $attributeChanges = $project->getChanges();
$attributeKeys = array_keys($project->getChanges()); $attributeKeys = array_keys($project->getChanges());
// dd($attributeChanges, $attributeKeys);
$activityEntry = [ $activityEntry = [
'type' => 'project_updated', 'type' => 'project_updated',

3
app/Providers/EventServiceProvider.php

@ -13,6 +13,9 @@ class EventServiceProvider extends ServiceProvider
* @var array * @var array
*/ */
protected $listen = [ protected $listen = [
'App\Events\Projects\Created' => [
'App\Listeners\Projects\LogProjectCreationActivity',
],
'App\Events\Projects\Updated' => [ 'App\Events\Projects\Updated' => [
'App\Listeners\Projects\LogProjectUpdateActivity', 'App\Listeners\Projects\LogProjectUpdateActivity',
], ],

26
tests/Unit/Models/ActivityTest.php

@ -11,7 +11,23 @@ class ActivityTest extends TestCase
use RefreshDatabase; use RefreshDatabase;
/** @test */ /** @test */
public function it_records_project_data_update()
public function it_creates_project_creation_activities()
{
$admin = $this->adminUserSigningIn();
$project = factory(Project::class)->create(['name' => 'New Project']);
$this->seeInDatabase('user_activities', [
'type' => 'project_created',
'parent_id' => null,
'user_id' => $admin->id,
'object_id' => $project->id,
'object_type' => 'projects',
'data' => null,
]);
}
/** @test */
public function it_records_project_data_update_activities()
{ {
$admin = $this->adminUserSigningIn(); $admin = $this->adminUserSigningIn();
$project = factory(Project::class)->create(['name' => 'New Project']); $project = factory(Project::class)->create(['name' => 'New Project']);
@ -26,12 +42,8 @@ class ActivityTest extends TestCase
'object_id' => $project->id, 'object_id' => $project->id,
'object_type' => 'projects', 'object_type' => 'projects',
'data' => json_encode([ 'data' => json_encode([
'before' => [
'name' => 'New Project',
],
'after' => [
'name' => 'Updated project',
],
'before' => ['name' => 'New Project'],
'after' => ['name' => 'Updated project'],
'notes' => null, 'notes' => null,
]), ]),
]); ]);

Loading…
Cancel
Save