Skip to content

Commit 82fb210

Browse files
author
Gautier Deleglise
committed
🚧 model events
1 parent 3de7e51 commit 82fb210

File tree

8 files changed

+603
-53
lines changed

8 files changed

+603
-53
lines changed

src/Concerns/PerformsRestOperations.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,11 @@ public function destroy(DestroyRequest $request)
138138
foreach ($models as $model) {
139139
self::newResource()->authorizeTo('delete', $model);
140140

141+
$resource->beforeDestroying($request, $model);
142+
141143
$resource->performDelete($request, $model);
144+
145+
$resource->afterDestroying($request, $model);
142146
}
143147

144148
$this->afterDestroy($request);
@@ -171,7 +175,11 @@ public function restore(RestoreRequest $request)
171175
foreach ($models as $model) {
172176
self::newResource()->authorizeTo('restore', $model);
173177

178+
$resource->beforeRestoring($request, $model);
179+
174180
$resource->performRestore($request, $model);
181+
182+
$resource->afterRestoring($request, $model);
175183
}
176184

177185
$this->afterRestore($request);
@@ -205,7 +213,11 @@ public function forceDelete(ForceDestroyRequest $request)
205213
foreach ($models as $model) {
206214
self::newResource()->authorizeTo('forceDelete', $model);
207215

216+
$resource->beforeForceDestroying($request, $model);
217+
208218
$resource->performForceDelete($request, $model);
219+
220+
$resource->afterForceDestroying($request, $model);
209221
}
210222

211223
$this->afterForceDestroy($request);

src/Concerns/Resource/HasResourceHooks.php

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@
33
namespace Lomkit\Rest\Concerns\Resource;
44

55
use Illuminate\Database\Eloquent\Model;
6+
use Lomkit\Rest\Http\Requests\DestroyRequest;
67
use Lomkit\Rest\Http\Requests\MutateRequest;
78

89
trait HasResourceHooks
910
{
11+
// @TODO: PHP DOC
12+
// @TODO: separate functioning by types ? beforeCreating, beforeUpdating, etc ? seems more logical
1013
public function beforeMutating(MutateRequest $request, array $requestBody, Model $model): void
1114
{
1215
//
@@ -16,4 +19,34 @@ public function afterMutating(MutateRequest $request, array $requestBody, Model
1619
{
1720
//
1821
}
22+
23+
public function beforeDestroying(DestroyRequest $request, Model $model): void
24+
{
25+
//
26+
}
27+
28+
public function afterDestroying(DestroyRequest $request, Model $model): void
29+
{
30+
//
31+
}
32+
33+
public function beforeRestoring(MutateRequest $request, Model $model): void
34+
{
35+
//
36+
}
37+
38+
public function afterRestoring(MutateRequest $request, Model $model): void
39+
{
40+
//
41+
}
42+
43+
public function beforeForceDestroying(MutateRequest $request, Model $model): void
44+
{
45+
//
46+
}
47+
48+
public function afterForceDestroying(MutateRequest $request, Model $model): void
49+
{
50+
//
51+
}
1952
}

src/Query/Traits/PerformMutation.php

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Illuminate\Database\Eloquent\Model;
66
use Lomkit\Rest\Http\Requests\MutateRequest;
77
use Lomkit\Rest\Http\Requests\RestRequest;
8+
use Lomkit\Rest\Tests\Support\Rest\Resources\BelongsToManyWithHooksResource;
89

910
trait PerformMutation
1011
{
@@ -55,39 +56,23 @@ public function applyMutation(array $mutation = [], $attributes = [])
5556

5657
if ($mutation['operation'] === 'create') {
5758
$model = $this->resource::newModel();
58-
59-
$this->resource->authorizeTo('create', $model);
60-
61-
return $this->mutateModel(
62-
$model,
63-
$allAttributes,
64-
$mutation
65-
);
66-
}
67-
68-
if (in_array($mutation['operation'], ['update', 'touch', 'sync'])) {
59+
} else {
6960
$model = $this->resource::newModel()::findOrFail($mutation['key']);
61+
}
7062

71-
$this
72-
->resource
73-
->beforeMutating(app(MutateRequest::class), $mutation, $model);
74-
63+
if ($mutation['operation'] === 'create') {
64+
$this->resource->authorizeTo('create', $model);
65+
} elseif ($mutation['operation'] === 'update') {
7566
$this->resource->authorizeTo('update', $model);
76-
77-
return $this->mutateModel(
78-
$model,
79-
$allAttributes,
80-
$mutation
81-
);
67+
} else {
68+
$this->resource->authorizeTo('view', $model);
8269
}
8370

84-
$newModel = $this->resource::newModel()::findOrFail($mutation['key']);
85-
86-
$newModel
87-
->forceFill($allAttributes)
88-
->save();
89-
90-
return $newModel;
71+
return $this->mutateModel(
72+
$model,
73+
$allAttributes,
74+
$mutation
75+
);
9176
}
9277

9378
/**

0 commit comments

Comments
 (0)