Skip to content

Commit f3b3d51

Browse files
authored
Merge pull request #78 from cslant/feature/add-form-resquest-and-optimize
Feature/add form request and optimize
2 parents 360c329 + dcdb9d9 commit f3b3d51

7 files changed

+112
-16
lines changed

src/Http/Actions/Author/AuthorGetListAction.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public function __construct(AuthorService $authorService)
6161
new Parameter(
6262
name: 'is_super',
6363
description: 'is_super direction:
64-
0 for admin
64+
0 for normal user
6565
1 for super admin',
6666
in: 'query',
6767
required: false,
@@ -136,7 +136,7 @@ public function __construct(AuthorService $authorService)
136136
]
137137
public function __invoke(AuthorGetListRequest $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
138138
{
139-
$filters = FilterAuthor::setFilters((array) $request->validated());
139+
$filters = FilterAuthor::setFilters($request->validated());
140140

141141
$users = $this->authorService->getAllAuthor($filters);
142142

src/Http/Actions/Author/AuthorGetProfileAction.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -78,14 +78,14 @@ class AuthorGetProfileAction extends Action
7878
),
7979
new Parameter(
8080
name: 'per_page',
81-
description: 'Number of items per page',
81+
description: 'Number of items per page (Use for the collection of posts)',
8282
in: 'query',
8383
required: false,
8484
schema: new Schema(type: 'integer', default: 10)
8585
),
8686
new Parameter(
8787
name: 'page',
88-
description: 'Page number',
88+
description: 'Page number (Use for the collection of posts)',
8989
in: 'query',
9090
required: false,
9191
schema: new Schema(type: 'integer', default: 1)

src/Http/Actions/Post/PostGetCustomFiltersAction.php

+15-4
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
namespace CSlant\Blog\Api\Http\Actions\Post;
44

55
use Botble\Base\Http\Responses\BaseHttpResponse;
6+
use CSlant\Blog\Api\Http\Requests\Post\PostGetFiltersRequest;
67
use CSlant\Blog\Api\Http\Resources\Post\ListPostResource;
78
use CSlant\Blog\Api\OpenApi\Schemas\Resources\Post\PostListResourceSchema;
89
use CSlant\Blog\Api\Services\PostService;
910
use CSlant\Blog\Core\Http\Actions\Action;
1011
use CSlant\Blog\Core\Supports\Base\FilterPost;
1112
use Illuminate\Http\JsonResponse;
1213
use Illuminate\Http\RedirectResponse;
13-
use Illuminate\Http\Request;
1414
use Illuminate\Http\Resources\Json\JsonResource;
1515
use OpenApi\Attributes\Get;
1616
use OpenApi\Attributes\Items;
@@ -41,7 +41,7 @@ public function __construct(PostService $postService)
4141
}
4242

4343
/**
44-
* @param Request $request
44+
* @param PostGetFiltersRequest $request
4545
*
4646
* @group Blog
4747
*
@@ -103,6 +103,17 @@ public function __construct(PostService $postService)
103103
default: null
104104
)
105105
),
106+
new Parameter(
107+
name: 'include',
108+
description: 'Filter posts by include post IDs.',
109+
in: 'query',
110+
required: false,
111+
schema: new Schema(
112+
type: 'array',
113+
items: new Items(description: 'Input the include post ID', type: 'integer'),
114+
default: null
115+
)
116+
),
106117
new Parameter(
107118
name: 'author',
108119
description: 'Filter posts by author IDs',
@@ -213,9 +224,9 @@ enum: [0, 1],
213224
]
214225
)
215226
]
216-
public function __invoke(Request $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
227+
public function __invoke(PostGetFiltersRequest $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
217228
{
218-
$filters = FilterPost::setFilters($request->input());
229+
$filters = FilterPost::setFilters($request->validated());
219230

220231
$data = $this->postService->getCustomFilters((array) $filters);
221232

src/Http/Actions/Tag/TagGetFiltersAction.php

+4-6
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
namespace CSlant\Blog\Api\Http\Actions\Tag;
44

55
use Botble\Base\Http\Responses\BaseHttpResponse;
6+
use CSlant\Blog\Api\Http\Requests\Tag\TagGetFiltersRequest;
67
use CSlant\Blog\Api\Http\Resources\Tag\TagResource;
78
use CSlant\Blog\Api\OpenApi\Schemas\Resources\Tag\TagModelResourceSchema;
89
use CSlant\Blog\Api\Services\TagService;
910
use CSlant\Blog\Api\Supports\FilterTag;
1011
use CSlant\Blog\Core\Http\Actions\Action;
1112
use Illuminate\Http\JsonResponse;
1213
use Illuminate\Http\RedirectResponse;
13-
use Illuminate\Http\Request;
1414
use Illuminate\Http\Resources\Json\JsonResource;
1515
use OpenApi\Attributes\Get;
1616
use OpenApi\Attributes\JsonContent;
@@ -40,7 +40,7 @@ public function __construct(TagService $tagService)
4040
}
4141

4242
/**
43-
* @param Request $request
43+
* @param TagGetFiltersRequest $request
4444
*
4545
* @group Blog
4646
*
@@ -132,11 +132,9 @@ public function __construct(TagService $tagService)
132132
]
133133
)
134134
]
135-
public function __invoke(Request $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
135+
public function __invoke(TagGetFiltersRequest $request): BaseHttpResponse|JsonResponse|JsonResource|RedirectResponse
136136
{
137-
/** @var array<string, mixed> $input */
138-
$input = (array) $request->input();
139-
$filters = FilterTag::setFilters($input);
137+
$filters = FilterTag::setFilters($request->validated());
140138

141139
$data = $this->tagService->getFilters($filters);
142140

src/Http/Requests/Author/AuthorGetListRequest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ public function rules(): array
2525
{
2626
return [
2727
'is_super' => 'nullable|digits_between:0,1',
28-
'page' => 'nullable|numeric|between:1,100',
28+
'page' => 'nullable|numeric',
2929
'order_by' => 'nullable|string',
3030
'order' => 'nullable|string|in:asc,desc,ASC,DESC',
31-
'per_page' => 'nullable|numeric',
31+
'per_page' => 'nullable|numeric|between:1,100',
3232
];
3333
}
3434
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
namespace CSlant\Blog\Api\Http\Requests\Post;
4+
5+
use CSlant\Blog\Api\Http\Requests\JsonFormRequest;
6+
7+
class PostGetFiltersRequest extends JsonFormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize(): bool
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array<string, mixed>
23+
*/
24+
public function rules(): array
25+
{
26+
return [
27+
'tags' => 'nullable|array',
28+
'tags.*' => 'nullable|integer|exists:tags,id',
29+
30+
'categories' => 'nullable|array',
31+
'categories.*' => 'nullable|integer|exists:categories,id',
32+
'categories_exclude' => 'nullable|array',
33+
'categories_exclude.*' => 'nullable|integer|exists:categories,id',
34+
35+
'exclude' => 'nullable|array',
36+
'exclude.*' => 'nullable|integer|exists:posts,id',
37+
'include' => 'nullable|array',
38+
'include.*' => 'nullable|integer|exists:posts,id',
39+
40+
'author' => 'nullable|array',
41+
'author.*' => 'nullable|integer|exists:users,id',
42+
'author_exclude' => 'nullable|array',
43+
'author_exclude.*' => 'nullable|integer|exists:users,id',
44+
45+
'featured' => 'nullable|numeric|in:0,1',
46+
'search' => 'nullable|string|max:255',
47+
'order_by' => 'nullable|string',
48+
'order' => 'nullable|string|in:asc,desc,ASC,DESC',
49+
'page' => 'nullable|numeric',
50+
'per_page' => 'nullable|numeric|between:1,100',
51+
];
52+
}
53+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
3+
namespace CSlant\Blog\Api\Http\Requests\Tag;
4+
5+
use CSlant\Blog\Api\Http\Requests\JsonFormRequest;
6+
7+
class TagGetFiltersRequest extends JsonFormRequest
8+
{
9+
/**
10+
* Determine if the user is authorized to make this request.
11+
*
12+
* @return bool
13+
*/
14+
public function authorize(): bool
15+
{
16+
return true;
17+
}
18+
19+
/**
20+
* Get the validation rules that apply to the request.
21+
*
22+
* @return array<string, mixed>
23+
*/
24+
public function rules(): array
25+
{
26+
return [
27+
'search' => 'nullable|string|max:255',
28+
'order_by' => 'nullable|string',
29+
'order' => 'nullable|string|in:asc,desc,ASC,DESC',
30+
'page' => 'nullable|numeric',
31+
'per_page' => 'nullable|numeric|between:1,100',
32+
];
33+
}
34+
}

0 commit comments

Comments
 (0)