Skip to content

Commit bb609f4

Browse files
committed
refactor
1 parent 7f43ee7 commit bb609f4

File tree

13 files changed

+112
-110
lines changed

13 files changed

+112
-110
lines changed

src/Actions/Action.php

Lines changed: 41 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ abstract class Action implements Arrayable, Form, JsonSerializable
7373
/**
7474
* Handle the action.
7575
*/
76-
abstract public function handle(Request $request, Collection $models): void;
76+
abstract public function handle(Request $request, Collection $models): mixed;
7777

7878
/**
7979
* Get the key.
@@ -200,51 +200,58 @@ public function isStandalone(): bool
200200
/**
201201
* Handle the request.
202202
*/
203-
public function handleFormRequest(Request $request, Model $model): void
203+
public function handleFormRequest(Request $request, Model $model): Response
204204
{
205205
$this->validateFormRequest($request, $model);
206206

207-
$models = match (true) {
208-
$this->isStandalone() => new Collection([$model]),
209-
$request->boolean('all') => $this->resolveQuery($request)->get(),
210-
default => $this->resolveQuery($request)->findMany($request->input('models', [])),
211-
};
212-
213-
$this->handle($request, $models);
214-
215-
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
216-
$models->each(static function (Model $model) use ($request): void {
217-
$model->recordRootEvent(
218-
Str::of(static::class)->classBasename()->headline()->value(),
219-
$request->user()
220-
);
207+
try {
208+
return DB::transaction(function () use ($request, $model): Response {
209+
$models = match (true) {
210+
$this->isStandalone() => new Collection([$model]),
211+
$request->boolean('all') => $this->resolveQuery($request)->get(),
212+
default => $this->resolveQuery($request)->findMany($request->input('models', [])),
213+
};
214+
215+
$result = $this->handle($request, $models);
216+
217+
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
218+
$models->each(static function (Model $model) use ($request): void {
219+
$model->recordRootEvent(
220+
Str::of(static::class)->classBasename()->headline()->value(),
221+
$request->user()
222+
);
223+
});
224+
}
225+
226+
return $this->formResponse($request, $model, $result);
221227
});
228+
} catch (Throwable $exception) {
229+
report($exception);
230+
231+
throw new SaveFormDataException($exception->getMessage());
222232
}
223233
}
224234

235+
/**
236+
* Make a form response.
237+
*/
238+
public function formResponse(Request $request, Model $model, mixed $result): Response
239+
{
240+
return Redirect::back()->with(
241+
sprintf('alerts.action-%s', $this->getKey()),
242+
Alert::info(__(':action was successful!', ['action' => $this->getName()]))
243+
);
244+
}
245+
225246
/**
226247
* Perform the action.
227248
*/
228249
public function perform(Request $request): Response
229250
{
230-
try {
231-
DB::beginTransaction();
232-
233-
$this->handleFormRequest($request, $this->resolveQuery($request)->getModel());
234-
235-
DB::commit();
236-
237-
return Redirect::back()->with(
238-
sprintf('alerts.action-%s', $this->getKey()),
239-
Alert::info(__(':action was successful!', ['action' => $this->getName()]))
240-
);
241-
} catch (Throwable $exception) {
242-
report($exception);
243-
244-
DB::rollBack();
245-
246-
throw new SaveFormDataException($exception->getMessage());
247-
}
251+
return $this->handleFormRequest(
252+
$request,
253+
$this->resolveQuery($request)->getModel()
254+
);
248255
}
249256

250257
/**

src/Fields/Relation.php

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
use Cone\Root\Http\Middleware\Authorize;
1616
use Cone\Root\Interfaces\Form;
1717
use Cone\Root\Root;
18+
use Cone\Root\Support\Alert;
1819
use Cone\Root\Traits\AsForm;
1920
use Cone\Root\Traits\HasRootEvents;
2021
use Cone\Root\Traits\RegistersRoutes;
@@ -32,9 +33,11 @@
3233
use Illuminate\Support\Collection;
3334
use Illuminate\Support\Facades\DB;
3435
use Illuminate\Support\Facades\Gate;
36+
use Illuminate\Support\Facades\Redirect;
3537
use Illuminate\Support\Facades\URL;
3638
use Illuminate\Support\MessageBag;
3739
use Illuminate\Support\Str;
40+
use Symfony\Component\HttpFoundation\Response;
3841
use Throwable;
3942

4043
/**
@@ -706,27 +709,27 @@ public function persist(Request $request, Model $model, mixed $value): void
706709
/**
707710
* Handle the request.
708711
*/
709-
public function handleFormRequest(Request $request, Model $model): void
712+
public function handleFormRequest(Request $request, Model $model): Response
710713
{
711714
$this->validateFormRequest($request, $model);
712715

713716
try {
714-
DB::beginTransaction();
717+
return DB::transaction(function () use ($request, $model): Response {
718+
$this->persist($request, $model, $this->getValueForHydrate($request));
715719

716-
$this->persist($request, $model, $this->getValueForHydrate($request));
720+
$model->save();
717721

718-
$model->save();
719-
720-
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
721-
$model->recordRootEvent(
722-
$model->wasRecentlyCreated ? 'Created' : 'Updated',
723-
$request->user()
724-
);
725-
}
722+
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
723+
$model->recordRootEvent(
724+
$model->wasRecentlyCreated ? 'Created' : 'Updated',
725+
$request->user()
726+
);
727+
}
726728

727-
$this->saved($request, $model);
729+
$this->saved($request, $model);
728730

729-
DB::commit();
731+
return $this->formResponse($request, $model);
732+
});
730733
} catch (Throwable $exception) {
731734
report($exception);
732735

@@ -736,6 +739,15 @@ public function handleFormRequest(Request $request, Model $model): void
736739
}
737740
}
738741

742+
/**
743+
* Make a form response.
744+
*/
745+
public function formResponse(Request $request, Model $model): Response
746+
{
747+
return Redirect::to($this->relatedUrl($model))
748+
->with('alerts.relation-saved', Alert::success(__('The relation has been saved!')));
749+
}
750+
739751
/**
740752
* Handle the saved form event.
741753
*/

src/Http/Controllers/BelongsToManyController.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,7 @@ public function store(Request $request, Model $model): RedirectResponse
2929

3030
$pivot->incrementing = true;
3131

32-
$field->handleFormRequest($request, $pivot);
33-
34-
return Redirect::to($field->relatedUrl($pivot))
35-
->with('alerts.relation-created', Alert::success(__('The relation has been created!')));
32+
return $field->handleFormRequest($request, $pivot);
3633
}
3734

3835
/**
@@ -48,10 +45,7 @@ public function update(Request $request, Model $model, Model $related): Redirect
4845

4946
$pivot->setRelation('related', $related);
5047

51-
$field->handleFormRequest($request, $pivot);
52-
53-
return Redirect::to($field->relatedUrl($pivot))
54-
->with('alerts.relation-updated', Alert::success(__('The relation has been updated!')));
48+
return $field->handleFormRequest($request, $pivot);
5549
}
5650

5751
/**

src/Http/Controllers/RelationController.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,7 @@ public function store(Request $request, Model $model): RedirectResponse
5555

5656
$related = $field->getRelation($model)->make()->setRelation('related', $model);
5757

58-
$field->handleFormRequest($request, $related);
59-
60-
return Redirect::to($field->relatedUrl($related))
61-
->with('alerts.relation-created', Alert::success(__('The relation has been created!')));
58+
return $field->handleFormRequest($request, $related);
6259
}
6360

6461
/**
@@ -101,10 +98,7 @@ public function update(Request $request, Model $model, Model $related): Redirect
10198

10299
$related->setRelation('related', $model);
103100

104-
$field->handleFormRequest($request, $related);
105-
106-
return Redirect::to($field->relatedUrl($related))
107-
->with('alerts.relation-updated', Alert::success(__('The relation has been updated!')));
101+
return $field->handleFormRequest($request, $related);
108102
}
109103

110104
/**

src/Http/Controllers/ResourceController.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,7 @@ public function store(Request $request, Resource $resource): RedirectResponse
4747
{
4848
$model = $resource->getModelInstance();
4949

50-
$resource->handleFormRequest($request, $model);
51-
52-
return Redirect::to($resource->modelUrl($model))
53-
->with('alerts.resource-created', Alert::success(__('The resource has been created!')));
50+
return $resource->handleFormRequest($request, $model);
5451
}
5552

5653
/**
@@ -82,10 +79,7 @@ public function edit(Request $request, Resource $resource, Model $model): Respon
8279
*/
8380
public function update(Request $request, Resource $resource, Model $model): RedirectResponse
8481
{
85-
$resource->handleFormRequest($request, $model);
86-
87-
return Redirect::to($resource->modelUrl($model))
88-
->with('alerts.resource-updated', Alert::success(__('The resource has been updated!')));
82+
return $resource->handleFormRequest($request, $model);
8983
}
9084

9185
/**

src/Interfaces/Form.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
use Illuminate\Contracts\Support\MessageBag;
88
use Illuminate\Database\Eloquent\Model;
99
use Illuminate\Http\Request;
10+
use Symfony\Component\HttpFoundation\Response;
1011

1112
interface Form
1213
{
1314
/**
1415
* Handle the request.
1516
*/
16-
public function handleFormRequest(Request $request, Model $model): void;
17+
public function handleFormRequest(Request $request, Model $model): Response;
1718

1819
/**
1920
* Validate the request.

src/Resources/Resource.php

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
use Cone\Root\Http\Middleware\Authorize;
2424
use Cone\Root\Interfaces\Form;
2525
use Cone\Root\Root;
26+
use Cone\Root\Support\Alert;
2627
use Cone\Root\Traits\AsForm;
2728
use Cone\Root\Traits\Authorizable;
2829
use Cone\Root\Traits\HasRootEvents;
@@ -45,8 +46,10 @@
4546
use Illuminate\Support\Collection;
4647
use Illuminate\Support\Facades\DB;
4748
use Illuminate\Support\Facades\Gate;
49+
use Illuminate\Support\Facades\Redirect;
4850
use Illuminate\Support\Facades\URL;
4951
use Illuminate\Support\Str;
52+
use Symfony\Component\HttpFoundation\Response;
5053
use Throwable;
5154

5255
abstract class Resource implements Arrayable, Form
@@ -513,42 +516,49 @@ public function mapModel(Request $request, Model $model): array
513516
/**
514517
* Handle the request.
515518
*/
516-
public function handleFormRequest(Request $request, Model $model): void
519+
public function handleFormRequest(Request $request, Model $model): Response
517520
{
518521
$this->validateFormRequest($request, $model);
519522

520523
try {
521-
DB::beginTransaction();
522-
523-
$this->resolveFields($request)
524-
->authorized($request, $model)
525-
->visible($request->isMethod('POST') ? 'create' : 'update')
526-
->subResource(false)
527-
->persist($request, $model);
524+
return DB::transaction(function () use ($request, $model): Response {
525+
$this->resolveFields($request)
526+
->authorized($request, $model)
527+
->visible($request->isMethod('POST') ? 'create' : 'update')
528+
->subResource(false)
529+
->persist($request, $model);
528530

529-
$this->saving($request, $model);
531+
$this->saving($request, $model);
530532

531-
$model->save();
533+
$model->save();
532534

533-
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
534-
$model->recordRootEvent(
535-
$model->wasRecentlyCreated ? 'Created' : 'Updated',
536-
$request->user()
537-
);
538-
}
535+
if (in_array(HasRootEvents::class, class_uses_recursive($model))) {
536+
$model->recordRootEvent(
537+
$model->wasRecentlyCreated ? 'Created' : 'Updated',
538+
$request->user()
539+
);
540+
}
539541

540-
$this->saved($request, $model);
542+
$this->saved($request, $model);
541543

542-
DB::commit();
544+
return $this->formResponse($request, $model);
545+
});
543546
} catch (Throwable $exception) {
544547
report($exception);
545548

546-
DB::rollBack();
547-
548549
throw new SaveFormDataException($exception->getMessage());
549550
}
550551
}
551552

553+
/**
554+
* Make a form response.
555+
*/
556+
public function formResponse(Request $request, Model $model): Response
557+
{
558+
return Redirect::to($this->modelUrl($model))
559+
->with('alerts.resource-saved', Alert::success(__('The resource has been saved!')));
560+
}
561+
552562
/**
553563
* Handle the saving form event.
554564
*/

src/Root.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class Root
2727
*
2828
* @var string
2929
*/
30-
public const string VERSION = '2.7.0';
30+
public const string VERSION = '2.7.1';
3131

3232
/**
3333
* The registered booting callbacks.

src/Traits/AsForm.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Illuminate\Database\Eloquent\Model;
99
use Illuminate\Http\Request;
1010
use Illuminate\Support\ViewErrorBag;
11+
use Symfony\Component\HttpFoundation\Response;
1112

1213
trait AsForm
1314
{
@@ -26,7 +27,7 @@ trait AsForm
2627
/**
2728
* Handle the request.
2829
*/
29-
abstract public function handleFormRequest(Request $request, Model $model): void;
30+
abstract public function handleFormRequest(Request $request, Model $model): Response;
3031

3132
/**
3233
* Validate the request.

stubs/Action.stub

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ class {{ class }} extends Action
1111
/**
1212
* Handle the action.
1313
*/
14-
public function handle(Request $request, Collection $models): void
14+
public function handle(Request $request, Collection $models): mixed
1515
{
1616
//
1717
}

0 commit comments

Comments
 (0)