44
55namespace App \Livewire \Discussions ;
66
7- use App \Gamify \ Points \ DiscussionCreated ;
8- use App \Models \Discussion ;
7+ use App \Actions \ Discussion \ CreateDiscussionAction ;
8+ use App \Data \Discussion \ CreateDiscussionData ;
99use App \Models \Tag ;
10- use App \Notifications \PostDiscussionToTelegram ;
1110use App \Traits \WithTagsAssociation ;
1211use Illuminate \Contracts \View \View ;
13- use Illuminate \Support \Facades \Auth ;
12+ use Livewire \Attributes \On ;
13+ use Livewire \Attributes \Validate ;
1414use Livewire \Component ;
1515
1616final class Create extends Component
1717{
1818 use WithTagsAssociation;
1919
20+ #[Validate('required ' )]
2021 public string $ title = '' ;
2122
23+ #[Validate('required ' )]
2224 public string $ body = '' ;
2325
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 ' )]
3827 public function onMarkdownUpdate (string $ content ): void
3928 {
4029 $ this ->body = $ content ;
@@ -44,24 +33,13 @@ public function store(): void
4433 {
4534 $ this ->validate ();
4635
47- $ discussion = Discussion:: create ([
36+ $ discussion = app (CreateDiscussionAction::class)-> execute (CreateDiscussionData:: from ([
4837 'title ' => $ this ->title ,
49- 'slug ' => $ this ->title ,
5038 '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+ ]));
6341
64- $ this ->redirectRoute ('discussions.show ' , $ discussion );
42+ $ this ->redirectRoute ('discussions.show ' , $ discussion, navigate: true );
6543 }
6644
6745 public function render (): View
0 commit comments