Skip to content

Commit 8552eaa

Browse files
authored
Merge pull request #77 from Lomkit/feature/hooks
feature/hooks
2 parents 94bae45 + 0063ad0 commit 8552eaa

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+1436
-96
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ Here is a quick look at what you can do using API search method:
7979
]
8080
}
8181
],
82+
"gates": ["create", "view"],
8283
"page": 2,
8384
"limit": 10
8485
}

config/rest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
/*
66
|--------------------------------------------------------------------------
7-
| Rest Automatic Gates
7+
| Rest Gates
88
|--------------------------------------------------------------------------
99
|
1010
| The following configuration option contains gates customisation. You might
1111
| want to adapt this feature to your needs.
1212
|
1313
*/
1414

15-
'automatic_gates' => [
15+
'gates' => [
1616
'enabled' => true,
1717
'key' => 'gates',
1818
// Here you can customize the keys for each gate

src/Concerns/PerformsRestOperations.php

+45-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
use Illuminate\Support\Facades\DB;
66
use Lomkit\Rest\Contracts\QueryBuilder;
77
use Lomkit\Rest\Http\Requests\DestroyRequest;
8-
use Lomkit\Rest\Http\Requests\DetailRequest;
8+
use Lomkit\Rest\Http\Requests\DetailsRequest;
99
use Lomkit\Rest\Http\Requests\ForceDestroyRequest;
1010
use Lomkit\Rest\Http\Requests\MutateRequest;
1111
use Lomkit\Rest\Http\Requests\OperateRequest;
@@ -17,14 +17,16 @@ trait PerformsRestOperations
1717
/**
1818
* Retrieve details of a resource.
1919
*
20-
* @param DetailRequest $request
20+
* @param DetailsRequest $request
2121
*
2222
* @return array
2323
*/
24-
public function details(DetailRequest $request)
24+
public function details(DetailsRequest $request)
2525
{
2626
$request->resource($resource = static::newResource());
2727

28+
$this->beforeDetails($request);
29+
2830
$resource->authorizeTo('viewAny', $resource::$model);
2931

3032
return [
@@ -43,13 +45,19 @@ public function search(SearchRequest $request)
4345
{
4446
$request->resource($resource = static::newResource());
4547

48+
$this->beforeSearch($request);
49+
4650
$query = app()->make(QueryBuilder::class, ['resource' => $resource, 'query' => null])
4751
->search($request->input('search', []));
4852

53+
$responsable = $resource->paginate($query, $request);
54+
55+
$this->afterSearch($request);
56+
4957
return $resource::newResponse()
5058
->resource($resource)
5159
->responsable(
52-
$resource->paginate($query, $request)
60+
$responsable
5361
);
5462
}
5563

@@ -64,6 +72,8 @@ public function mutate(MutateRequest $request)
6472
{
6573
$request->resource($resource = static::newResource());
6674

75+
$this->beforeMutate($request);
76+
6777
DB::beginTransaction();
6878

6979
$operations = app()->make(QueryBuilder::class, ['resource' => $resource, 'query' => null])
@@ -74,6 +84,8 @@ public function mutate(MutateRequest $request)
7484

7585
DB::commit();
7686

87+
$this->afterMutate($request);
88+
7789
return $operations;
7890
}
7991

@@ -89,10 +101,14 @@ public function operate(OperateRequest $request, $action)
89101
{
90102
$request->resource($resource = static::newResource());
91103

104+
$this->beforeOperate($request);
105+
92106
$actionInstance = $resource->action($request, $action);
93107

94108
$modelsImpacted = $actionInstance->handleRequest($request);
95109

110+
$this->afterOperate($request);
111+
96112
return response([
97113
'data' => [
98114
'impacted' => $modelsImpacted,
@@ -111,6 +127,8 @@ public function destroy(DestroyRequest $request)
111127
{
112128
$request->resource($resource = static::newResource());
113129

130+
$this->beforeDestroy($request);
131+
114132
$query = $resource->destroyQuery($request, $resource::newModel()::query());
115133

116134
$models = $query
@@ -120,9 +138,15 @@ public function destroy(DestroyRequest $request)
120138
foreach ($models as $model) {
121139
self::newResource()->authorizeTo('delete', $model);
122140

141+
$resource->destroying($request, $model);
142+
123143
$resource->performDelete($request, $model);
144+
145+
$resource->destroyed($request, $model);
124146
}
125147

148+
$this->afterDestroy($request);
149+
126150
return $resource::newResponse()
127151
->resource($resource)
128152
->responsable($models);
@@ -139,6 +163,8 @@ public function restore(RestoreRequest $request)
139163
{
140164
$request->resource($resource = static::newResource());
141165

166+
$this->beforeRestore($request);
167+
142168
$query = $resource->restoreQuery($request, $resource::newModel()::query());
143169

144170
$models = $query
@@ -149,14 +175,21 @@ public function restore(RestoreRequest $request)
149175
foreach ($models as $model) {
150176
self::newResource()->authorizeTo('restore', $model);
151177

178+
$resource->restoring($request, $model);
179+
152180
$resource->performRestore($request, $model);
181+
182+
$resource->restored($request, $model);
153183
}
154184

185+
$this->afterRestore($request);
186+
155187
return $resource::newResponse()
156188
->resource($resource)
157189
->responsable($models);
158190
}
159191

192+
// @TODO: in version upgrade, rename "forceDelete" to "forceDestroy" generally
160193
/**
161194
* Force delete resources based on the given request.
162195
*
@@ -168,6 +201,8 @@ public function forceDelete(ForceDestroyRequest $request)
168201
{
169202
$request->resource($resource = static::newResource());
170203

204+
$this->beforeForceDestroy($request);
205+
171206
$query = $resource->forceDeleteQuery($request, $resource::newModel()::query());
172207

173208
$models = $query
@@ -178,9 +213,15 @@ public function forceDelete(ForceDestroyRequest $request)
178213
foreach ($models as $model) {
179214
self::newResource()->authorizeTo('forceDelete', $model);
180215

216+
$resource->forceDestroying($request, $model);
217+
181218
$resource->performForceDelete($request, $model);
219+
220+
$resource->forceDestroyed($request, $model);
182221
}
183222

223+
$this->afterForceDestroy($request);
224+
184225
return $resource::newResponse()
185226
->resource($resource)
186227
->responsable($models);

src/Concerns/Resource/DisableAutomaticGates.php src/Concerns/Resource/DisableGates.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@
22

33
namespace Lomkit\Rest\Concerns\Resource;
44

5-
trait DisableAutomaticGates
5+
trait DisableGates
66
{
77
/**
8-
* Check if automatic gating is enabled.
8+
* Check if gating is enabled.
99
*
1010
* @return bool
1111
*/
12-
public function isAutomaticGatingEnabled(): bool
12+
public function isGatingEnabled(): bool
1313
{
1414
return false;
1515
}
+118
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?php
2+
3+
namespace Lomkit\Rest\Concerns\Resource;
4+
5+
use Illuminate\Database\Eloquent\Model;
6+
use Lomkit\Rest\Http\Requests\DestroyRequest;
7+
use Lomkit\Rest\Http\Requests\ForceDestroyRequest;
8+
use Lomkit\Rest\Http\Requests\MutateRequest;
9+
use Lomkit\Rest\Http\Requests\RestoreRequest;
10+
11+
trait HasResourceHooks
12+
{
13+
/**
14+
* Executed when a model has been "mutating".
15+
*
16+
* @param MutateRequest $request
17+
* @param array $requestBody
18+
* @param Model $model
19+
*
20+
* @return void
21+
*/
22+
public function mutating(MutateRequest $request, array $requestBody, Model $model): void
23+
{
24+
//
25+
}
26+
27+
/**
28+
* Executed when a model has been "mutated".
29+
*
30+
* @param MutateRequest $request
31+
* @param array $requestBody
32+
* @param Model $model
33+
*
34+
* @return void
35+
*/
36+
public function mutated(MutateRequest $request, array $requestBody, Model $model): void
37+
{
38+
//
39+
}
40+
41+
/**
42+
* Executed when a model has been "destroying".
43+
*
44+
* @param DestroyRequest $request
45+
* @param Model $model
46+
*
47+
* @return void
48+
*/
49+
public function destroying(DestroyRequest $request, Model $model): void
50+
{
51+
//
52+
}
53+
54+
/**
55+
* Executed when a model has been "destroyed".
56+
*
57+
* @param DestroyRequest $request
58+
* @param Model $model
59+
*
60+
* @return void
61+
*/
62+
public function destroyed(DestroyRequest $request, Model $model): void
63+
{
64+
//
65+
}
66+
67+
/**
68+
* Executed when a model has been "restoring".
69+
*
70+
* @param RestoreRequest $request
71+
* @param Model $model
72+
*
73+
* @return void
74+
*/
75+
public function restoring(RestoreRequest $request, Model $model): void
76+
{
77+
//
78+
}
79+
80+
/**
81+
* Executed when a model has been "restored".
82+
*
83+
* @param RestoreRequest $request
84+
* @param Model $model
85+
*
86+
* @return void
87+
*/
88+
public function restored(RestoreRequest $request, Model $model): void
89+
{
90+
//
91+
}
92+
93+
/**
94+
* Executed when a model has been "forceDestroying".
95+
*
96+
* @param ForceDestroyRequest $request
97+
* @param Model $model
98+
*
99+
* @return void
100+
*/
101+
public function forceDestroying(ForceDestroyRequest $request, Model $model): void
102+
{
103+
//
104+
}
105+
106+
/**
107+
* Executed when a model has been "forceDestroyed".
108+
*
109+
* @param ForceDestroyRequest $request
110+
* @param Model $model
111+
*
112+
* @return void
113+
*/
114+
public function forceDestroyed(ForceDestroyRequest $request, Model $model): void
115+
{
116+
//
117+
}
118+
}

src/Http/Controllers/Controller.php

+2
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44

55
use Lomkit\Rest\Concerns\PerformsRestOperations;
66
use Lomkit\Rest\Http\Controllers\Traits\ExtendsDocumentationOperations;
7+
use Lomkit\Rest\Http\Controllers\Traits\HasControllerHooks;
78
use Lomkit\Rest\Http\Resource;
89

910
abstract class Controller extends \Illuminate\Routing\Controller
1011
{
1112
use PerformsRestOperations;
1213
use ExtendsDocumentationOperations;
14+
use HasControllerHooks;
1315

1416
/**
1517
* The resource the entry corresponds to.

0 commit comments

Comments
 (0)