5
5
use Botble \Base \Http \Responses \BaseHttpResponse ;
6
6
use CSlant \Blog \Api \Http \Resources \Author \ListAuthorResource ;
7
7
use CSlant \Blog \Api \OpenApi \Schemas \Resources \Author \ListAuthorResourceSchema ;
8
+ use CSlant \Blog \Api \Services \AuthorService ;
9
+ use CSlant \Blog \Api \Services \PostService ;
8
10
use CSlant \Blog \Core \Http \Actions \Action ;
9
- use CSlant \Blog \Core \Models \User ;
10
11
use Illuminate \Http \JsonResponse ;
11
12
use Illuminate \Http \RedirectResponse ;
12
13
use Illuminate \Http \Request ;
32
33
*/
33
34
class AuthorGetListAction extends Action
34
35
{
36
+ protected AuthorService $ authorService ;
37
+
38
+ public function __construct (AuthorService $ authorService )
39
+ {
40
+ $ this ->authorService = $ authorService ;
41
+ }
42
+
35
43
/**
36
44
* @param Request $request
37
45
*
@@ -50,6 +58,22 @@ class AuthorGetListAction extends Action
50
58
summary: "Get all authors with pagination " ,
51
59
tags: ["Author " ],
52
60
parameters: [
61
+ new Parameter (
62
+ name: 'order_by ' ,
63
+ description: 'Can order by field: id, posts_count, updated_at, ... ' ,
64
+ in: 'query ' ,
65
+ required: false ,
66
+ schema: new Schema (type: 'string ' , default: 'updated_at ' )
67
+ ),
68
+ new Parameter (
69
+ name: 'order ' ,
70
+ description: 'Order direction:
71
+ ASC for ascending
72
+ DESC for descending ' ,
73
+ in: 'query ' ,
74
+ required: false ,
75
+ schema: new Schema (type: 'string ' , default: 'ASC ' , enum: ['ASC ' , 'DESC ' ])
76
+ ),
53
77
new Parameter (
54
78
name: 'per_page ' ,
55
79
description: 'Number of items per page ' ,
@@ -103,10 +127,7 @@ class AuthorGetListAction extends Action
103
127
]
104
128
public function __invoke (Request $ request ): BaseHttpResponse |JsonResponse |JsonResource |RedirectResponse
105
129
{
106
- $ users = User::query ()
107
- ->withCount ('posts ' )
108
- ->orderBy ('posts_count ' , 'DESC ' )
109
- ->paginate ($ request ->integer ('per_page ' , 10 ));
130
+ $ users = $ this ->authorService ->getAllAuthor ($ request );
110
131
111
132
return $ this
112
133
->httpResponse ()
0 commit comments