4
4
5
5
namespace App \Livewire \Discussions ;
6
6
7
- use App \Gamify \ Points \ DiscussionCreated ;
8
- use App \Models \Discussion ;
7
+ use App \Actions \ Discussion \ CreateDiscussionAction ;
8
+ use App \Data \Discussion \ CreateDiscussionData ;
9
9
use App \Models \Tag ;
10
- use App \Notifications \PostDiscussionToTelegram ;
11
10
use App \Traits \WithTagsAssociation ;
12
11
use Illuminate \Contracts \View \View ;
13
- use Illuminate \Support \Facades \Auth ;
12
+ use Livewire \Attributes \On ;
13
+ use Livewire \Attributes \Validate ;
14
14
use Livewire \Component ;
15
15
16
16
final class Create extends Component
17
17
{
18
18
use WithTagsAssociation;
19
19
20
+ #[Validate('required ' )]
20
21
public string $ title = '' ;
21
22
23
+ #[Validate('required ' )]
22
24
public string $ body = '' ;
23
25
24
- /**
25
- * @var string[]
26
- */
27
- protected $ listeners = ['markdown-x:update ' => 'onMarkdownUpdate ' ];
28
-
29
- /**
30
- * @var array<string, string[]|string>
31
- */
32
- protected $ rules = [
33
- 'title ' => ['required ' , 'max:150 ' ],
34
- 'body ' => ['required ' ],
35
- 'tags_selected ' => 'nullable|array ' ,
36
- ];
37
-
26
+ #[On('markdown-x:update ' )]
38
27
public function onMarkdownUpdate (string $ content ): void
39
28
{
40
29
$ this ->body = $ content ;
@@ -44,24 +33,13 @@ public function store(): void
44
33
{
45
34
$ this ->validate ();
46
35
47
- $ discussion = Discussion:: create ([
36
+ $ discussion = app (CreateDiscussionAction::class)-> execute (CreateDiscussionData:: from ([
48
37
'title ' => $ this ->title ,
49
- 'slug ' => $ this ->title ,
50
38
'body ' => $ this ->body ,
51
- 'user_id ' => Auth::id (),
52
- ]);
53
-
54
- if (collect ($ this ->associateTags )->isNotEmpty ()) {
55
- $ discussion ->syncTags ($ this ->associateTags );
56
- }
57
-
58
- givePoint (new DiscussionCreated ($ discussion ));
59
-
60
- if (app ()->environment ('production ' )) {
61
- Auth::user ()->notify (new PostDiscussionToTelegram ($ discussion )); // @phpstan-ignore-line
62
- }
39
+ 'tags ' => $ this ->associateTags ,
40
+ ]));
63
41
64
- $ this ->redirectRoute ('discussions.show ' , $ discussion );
42
+ $ this ->redirectRoute ('discussions.show ' , $ discussion, navigate: true );
65
43
}
66
44
67
45
public function render (): View
0 commit comments