Skip to content

Commit e378a10

Browse files
feat:[lar-140] remove user point when thread or discussion are deleted
1 parent 0dacf1f commit e378a10

File tree

5 files changed

+61
-23
lines changed

5 files changed

+61
-23
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Actions\Discussion;
6+
7+
use App\Gamify\Points\DiscussionCreated;
8+
use App\Models\Discussion;
9+
use Illuminate\Support\Facades\DB;
10+
11+
final class DeleteDiscussionAction
12+
{
13+
public function execute(Discussion $discussion): void
14+
{
15+
DB::beginTransaction();
16+
17+
undoPoint(new DiscussionCreated($discussion));
18+
$discussion->delete();
19+
20+
DB::commit();
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Actions\Forum;
6+
7+
use App\Gamify\Points\ThreadCreated;
8+
use App\Models\Thread;
9+
use Illuminate\Support\Facades\DB;
10+
11+
final class DeleteThreadAction
12+
{
13+
public function execute(Thread $thread): void
14+
{
15+
DB::beginTransaction();
16+
17+
undoPoint(new ThreadCreated($thread));
18+
$thread->delete();
19+
20+
DB::commit();
21+
}
22+
}

app/Livewire/Pages/Discussions/SingleDiscussion.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
namespace App\Livewire\Pages\Discussions;
66

77
use App\Actions\Discussion\ConvertDiscussionToThreadAction;
8-
use App\Gamify\Points\DiscussionCreated;
8+
use App\Actions\Discussion\DeleteDiscussionAction;
99
use App\Models\Discussion;
1010
use Filament\Actions\Action;
1111
use Filament\Actions\Concerns\InteractsWithActions;
@@ -14,7 +14,6 @@
1414
use Filament\Forms\Concerns\InteractsWithForms;
1515
use Filament\Forms\Contracts\HasForms;
1616
use Illuminate\Contracts\View\View;
17-
use Illuminate\Support\Facades\DB;
1817
use Livewire\Component;
1918

2019
final class SingleDiscussion extends Component implements HasActions, HasForms
@@ -83,13 +82,8 @@ public function deleteAction(): Action
8382
->requiresConfirmation()
8483
->successNotificationTitle(__('notifications.discussion.deleted'))
8584
->action(function (): void {
86-
DB::beginTransaction();
8785

88-
undoPoint(new DiscussionCreated($this->discussion));
89-
90-
$this->discussion->delete();
91-
92-
DB::commit();
86+
app(DeleteDiscussionAction::class)->execute($this->discussion);
9387

9488
$this->redirectRoute('discussions.index', navigate: true);
9589
});

app/Livewire/Pages/Forum/DetailThread.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44

55
namespace App\Livewire\Pages\Forum;
66

7-
use App\Gamify\Points\ThreadCreated;
7+
use App\Actions\Forum\DeleteThreadAction;
88
use App\Models\Thread;
99
use Filament\Actions\Action;
1010
use Filament\Actions\Concerns\InteractsWithActions;
1111
use Filament\Actions\Contracts\HasActions;
1212
use Filament\Forms\Concerns\InteractsWithForms;
1313
use Filament\Forms\Contracts\HasForms;
1414
use Illuminate\Contracts\View\View;
15-
use Illuminate\Support\Facades\DB;
1615
use Livewire\Attributes\Layout;
1716
use Livewire\Attributes\On;
1817
use Livewire\Component;
@@ -55,12 +54,8 @@ public function deleteAction(): Action
5554
->authorize('delete', $this->thread)
5655
->requiresConfirmation()
5756
->action(function (): void {
58-
DB::beginTransaction();
5957

60-
undoPoint(new ThreadCreated($this->thread));
61-
$this->thread->delete();
62-
63-
DB::commit();
58+
app(DeleteThreadAction::class)->execute($this->thread);
6459

6560
$this->redirectRoute('forum.index', navigate: true);
6661
});

tests/Feature/Livewire/Pages/Discussion/SIngleDiscussionTest.php renamed to tests/Feature/Livewire/Pages/Discussion/SingleDiscussionTest.php

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,25 @@
22

33
declare(strict_types=1);
44

5-
use App\Gamify\Points\DiscussionCreated;
5+
use App\Actions\Discussion\CreateDiscussionAction;
6+
use App\Data\CreateDiscussionData;
67
use App\Livewire\Pages\Discussions\SingleDiscussion;
7-
use App\Models\Discussion;
8-
use App\Models\Tag;
8+
use Illuminate\Support\Facades\Notification;
99
use Livewire\Livewire;
1010

11+
beforeEach(function (): void {
12+
Notification::fake();
13+
});
14+
1115
it('delete user action can remove discussion point ', function (): void {
1216
$user = $this->login();
13-
$discussion = Discussion::factory()->create(['user_id' => $user->id]);
14-
$tags = Tag::factory()->count(3)->create();
15-
16-
$discussion->tags()->attach($tags->modelKeys());
17+
$discussionData = CreateDiscussionData::from([
18+
'title' => 'Discussion title',
19+
'body' => 'Discussion body',
20+
'tags' => [],
21+
]);
1722

18-
givePoint(new DiscussionCreated($discussion));
23+
$discussion = app(CreateDiscussionAction::class)->execute($discussionData);
1924

2025
Livewire::test(SingleDiscussion::class, ['discussion' => $discussion])
2126
->callAction('deleteAction')

0 commit comments

Comments
 (0)