Skip to content

Commit 28b9f09

Browse files
committed
♻️ better validation errors
1 parent c42c50c commit 28b9f09

22 files changed

+348
-162
lines changed

src/Concerns/PerformsQueries.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
trait PerformsQueries
1010
{
1111
/**
12-
* Build a query for searching resource.
12+
* Build a "search" query for fetching resource.
1313
*
1414
* @param \Lomkit\Rest\Http\Requests\RestRequest $request
1515
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
1616
* @return \Illuminate\Contracts\Database\Eloquent\Builder
1717
*/
18-
public function searchQuery(RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
18+
public function searchQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
1919
return $query;
2020
}
2121

@@ -26,7 +26,7 @@ public function searchQuery(RestRequest $request, \Illuminate\Contracts\Database
2626
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
2727
* @return \Illuminate\Contracts\Database\Eloquent\Builder
2828
*/
29-
public function mutateQuery(RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
29+
public function mutateQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
3030
return $query;
3131
}
3232

@@ -37,7 +37,7 @@ public function mutateQuery(RestRequest $request, \Illuminate\Contracts\Database
3737
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
3838
* @return \Illuminate\Contracts\Database\Eloquent\Builder
3939
*/
40-
public function destroyQuery(RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
40+
public function destroyQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
4141
{
4242
return $query;
4343
}
@@ -49,7 +49,7 @@ public function destroyQuery(RestRequest $request, \Illuminate\Contracts\Databas
4949
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
5050
* @return \Illuminate\Contracts\Database\Eloquent\Builder
5151
*/
52-
public function restoreQuery(RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
52+
public function restoreQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
5353
{
5454
return $query;
5555
}
@@ -61,7 +61,7 @@ public function restoreQuery(RestRequest $request, \Illuminate\Contracts\Databas
6161
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
6262
* @return \Illuminate\Contracts\Database\Eloquent\Builder
6363
*/
64-
public function forceDeleteQuery(RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
64+
public function forceDeleteQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query)
6565
{
6666
return $query;
6767
}

src/Console/stubs/base-resource.stub

+13-2
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,24 @@ use Lomkit\Rest\Http\Resource as RestResource;
77
abstract class Resource extends RestResource
88
{
99
/**
10-
* Build a query for fetching resource.
10+
* Build a "search" query for fetching resource.
1111
*
1212
* @param \Lomkit\Rest\Http\Requests\RestRequest $request
1313
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
1414
* @return \Illuminate\Contracts\Database\Eloquent\Builder
1515
*/
16-
public function fetchQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
16+
public function searchQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
17+
return $query;
18+
}
19+
20+
/**
21+
* Build a query for mutating resource.
22+
*
23+
* @param \Lomkit\Rest\Http\Requests\RestRequest $request
24+
* @param \Illuminate\Contracts\Database\Eloquent\Builder $query
25+
* @return \Illuminate\Contracts\Database\Eloquent\Builder
26+
*/
27+
public function mutateQuery(\Lomkit\Rest\Http\Requests\RestRequest $request, \Illuminate\Contracts\Database\Eloquent\Builder $query) {
1728
return $query;
1829
}
1930

src/Http/Requests/ActionsRequest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use Lomkit\Rest\Relations\MorphToMany;
1919
use Lomkit\Rest\Rules\CustomRulable;
2020
use Lomkit\Rest\Rules\Includable;
21-
use Lomkit\Rest\Rules\RequiredRelation;
21+
use Lomkit\Rest\Rules\RequiredRelationOnCreation;
2222

2323
class ActionsRequest extends RestRequest
2424
{

src/Http/Requests/DetailRequest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
use Lomkit\Rest\Rules\ActionField;
2323
use Lomkit\Rest\Rules\CustomRulable;
2424
use Lomkit\Rest\Rules\Includable;
25-
use Lomkit\Rest\Rules\RequiredRelation;
25+
use Lomkit\Rest\Rules\RequiredRelationOnCreation;
2626
use Symfony\Component\HttpKernel\Exception\HttpException;
2727

2828
class DetailRequest extends RestRequest

src/Http/Requests/MutateRequest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use Lomkit\Rest\Relations\MorphToMany;
1919
use Lomkit\Rest\Rules\CustomRulable;
2020
use Lomkit\Rest\Rules\Includable;
21-
use Lomkit\Rest\Rules\RequiredRelation;
21+
use Lomkit\Rest\Rules\RequiredRelationOnCreation;
2222

2323
class MutateRequest extends RestRequest
2424
{

src/Http/Requests/OperateRequest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
use Lomkit\Rest\Rules\ActionField;
2323
use Lomkit\Rest\Rules\CustomRulable;
2424
use Lomkit\Rest\Rules\Includable;
25-
use Lomkit\Rest\Rules\RequiredRelation;
25+
use Lomkit\Rest\Rules\RequiredRelationOnCreation;
2626
use Symfony\Component\HttpKernel\Exception\HttpException;
2727

2828
class OperateRequest extends RestRequest

src/Relations/Relation.php

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
use Lomkit\Rest\Http\Resource;
1313
use Lomkit\Rest\Relations\Traits\Constrained;
1414
use Lomkit\Rest\Relations\Traits\Mutates;
15-
use Lomkit\Rest\Rules\RequiredRelation;
15+
use Lomkit\Rest\Rules\RequiredRelationOnCreation;
1616

1717
class Relation implements \JsonSerializable
1818
{
@@ -89,11 +89,10 @@ public function rules(Resource $resource, string $prefix) {
8989
if ($this->isRequiredOnCreation(
9090
app()->make(RestRequest::class)
9191
)) {
92-
$rules[$prefix] = RequiredRelation::make()->resource($resource);
92+
$rules[$prefix] = [RequiredRelationOnCreation::make()->resource($resource)];
9393
}
9494

9595
if (in_array(HasPivotFields::class, class_uses_recursive($this), true)) {
96-
9796
$pivotPrefix = $prefix;
9897
if ($this->hasMultipleEntries()) {
9998
$pivotPrefix .= '.*';

src/Rules/ActionField.php

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Illuminate\Contracts\Validation\DataAwareRule;
77
use Illuminate\Contracts\Validation\Rule;
8+
use Illuminate\Contracts\Validation\ValidationRule;
89
use Illuminate\Contracts\Validation\ValidatorAwareRule;
910
use Illuminate\Support\Arr;
1011
use Illuminate\Support\Facades\Validator;
@@ -13,7 +14,7 @@
1314
use Lomkit\Rest\Http\Requests\SearchRequest;
1415
use Lomkit\Rest\Http\Resource;
1516

16-
class ActionField implements Rule, DataAwareRule, ValidatorAwareRule
17+
class ActionField implements ValidationRule, DataAwareRule, ValidatorAwareRule
1718
{
1819

1920
use Makeable;
@@ -59,20 +60,6 @@ public function action(\Lomkit\Rest\Actions\Action $action)
5960
return $this;
6061
}
6162

62-
public function passes($attribute, $value)
63-
{
64-
$validator = Validator::make(
65-
$this->data,
66-
$this->buildValidationRules($attribute, $value)
67-
);
68-
69-
if ($validator->fails()) {
70-
return $this->fail($validator->messages()->all());
71-
}
72-
73-
return true;
74-
}
75-
7663
/**
7764
* Build the array of underlying validation rules based on the current state.
7865
*
@@ -143,4 +130,14 @@ public function setData($data)
143130

144131
return $this;
145132
}
133+
134+
public function validate(string $attribute, mixed $value, Closure $fail): void
135+
{
136+
$validator = Validator::make(
137+
$this->data,
138+
$this->buildValidationRules($attribute, $value)
139+
);
140+
141+
$validator->validate();
142+
}
146143
}

src/Rules/AggregateFilterable.php

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
use Closure;
66
use Illuminate\Contracts\Validation\DataAwareRule;
77
use Illuminate\Contracts\Validation\Rule;
8+
use Illuminate\Contracts\Validation\ValidationRule;
89
use Illuminate\Contracts\Validation\ValidatorAwareRule;
910
use Illuminate\Support\Arr;
1011
use Illuminate\Support\Facades\Validator;
1112
use Lomkit\Rest\Concerns\Makeable;
1213
use Lomkit\Rest\Http\Requests\SearchRequest;
1314
use Lomkit\Rest\Http\Resource;
1415

15-
class AggregateFilterable implements Rule, DataAwareRule, ValidatorAwareRule
16+
class AggregateFilterable implements ValidationRule, DataAwareRule, ValidatorAwareRule
1617
{
1718

1819
use Makeable;
@@ -58,20 +59,6 @@ public function resource($resource)
5859
return $this;
5960
}
6061

61-
public function passes($attribute, $value)
62-
{
63-
$validator = Validator::make(
64-
$this->data,
65-
$this->buildValidationRules($attribute, $value)
66-
);
67-
68-
if ($validator->fails()) {
69-
return $this->fail($validator->messages()->all());
70-
}
71-
72-
return true;
73-
}
74-
7562
/**
7663
* Build the array of underlying validation rules based on the current state.
7764
*
@@ -142,4 +129,14 @@ public function setData($data)
142129

143130
return $this;
144131
}
132+
133+
public function validate(string $attribute, mixed $value, Closure $fail): void
134+
{
135+
$validator = Validator::make(
136+
$this->data,
137+
$this->buildValidationRules($attribute, $value)
138+
);
139+
140+
$validator->validate();
141+
}
145142
}

src/Rules/CustomRulable.php

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Illuminate\Contracts\Validation\DataAwareRule;
77
use Illuminate\Contracts\Validation\Rule;
8+
use Illuminate\Contracts\Validation\ValidationRule;
89
use Illuminate\Contracts\Validation\ValidatorAwareRule;
910
use Illuminate\Support\Arr;
1011
use Illuminate\Support\Facades\Validator;
@@ -13,7 +14,7 @@
1314
use Lomkit\Rest\Http\Requests\SearchRequest;
1415
use Lomkit\Rest\Http\Resource;
1516

16-
class CustomRulable implements Rule, DataAwareRule, ValidatorAwareRule
17+
class CustomRulable implements ValidationRule, DataAwareRule, ValidatorAwareRule
1718
{
1819

1920
use Makeable;
@@ -59,20 +60,6 @@ public function resource($resource)
5960
return $this;
6061
}
6162

62-
public function passes($attribute, $value)
63-
{
64-
$validator = Validator::make(
65-
$this->data,
66-
$this->buildValidationRules($attribute, $value)
67-
);
68-
69-
if ($validator->fails()) {
70-
return $this->fail($validator->messages()->all());
71-
}
72-
73-
return true;
74-
}
75-
7663
/**
7764
* Build the array of underlying validation rules based on the current state.
7865
*
@@ -155,4 +142,14 @@ public function setData($data)
155142

156143
return $this;
157144
}
145+
146+
public function validate(string $attribute, mixed $value, Closure $fail): void
147+
{
148+
$validator = Validator::make(
149+
$this->data,
150+
$this->buildValidationRules($attribute, $value)
151+
);
152+
153+
$validator->validate();
154+
}
158155
}

src/Rules/Instruction.php

+12-15
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Illuminate\Contracts\Validation\DataAwareRule;
77
use Illuminate\Contracts\Validation\Rule;
8+
use Illuminate\Contracts\Validation\ValidationRule;
89
use Illuminate\Contracts\Validation\ValidatorAwareRule;
910
use Illuminate\Support\Arr;
1011
use Illuminate\Support\Facades\Validator;
@@ -13,7 +14,7 @@
1314
use Lomkit\Rest\Http\Requests\SearchRequest;
1415
use Lomkit\Rest\Http\Resource;
1516

16-
class Instruction implements Rule, DataAwareRule, ValidatorAwareRule
17+
class Instruction implements ValidationRule, DataAwareRule, ValidatorAwareRule
1718
{
1819

1920
use Makeable;
@@ -59,20 +60,6 @@ public function resource($resource)
5960
return $this;
6061
}
6162

62-
public function passes($attribute, $value)
63-
{
64-
$validator = Validator::make(
65-
$this->data,
66-
$this->buildValidationRules($attribute, $value)
67-
);
68-
69-
if ($validator->fails()) {
70-
return $this->fail($validator->messages()->all());
71-
}
72-
73-
return true;
74-
}
75-
7663
/**
7764
* Build the array of underlying validation rules based on the current state.
7865
*
@@ -158,4 +145,14 @@ public function setData($data)
158145

159146
return $this;
160147
}
148+
149+
public function validate(string $attribute, mixed $value, Closure $fail): void
150+
{
151+
$validator = Validator::make(
152+
$this->data,
153+
$this->buildValidationRules($attribute, $value)
154+
);
155+
156+
$validator->validate();
157+
}
161158
}

0 commit comments

Comments
 (0)