Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
GetAdminInvestorsAction
100.00% covered (success)
100.00%
13 / 13
100.00% covered (success)
100.00%
2 / 2
2
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
100.00% covered (success)
100.00%
11 / 11
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace App\Action\Admin;
6
7use App\Domain\Admin\Service\AdminService;
8use App\Renderer\JsonRenderer;
9use App\Support\Row;
10use Psr\Http\Message\ResponseInterface;
11use Psr\Http\Message\ServerRequestInterface;
12
13/**
14 * Get paginated list of investors for admin.
15 *
16 * GET /api/admin/investors
17 */
18final class GetAdminInvestorsAction
19{
20    private AdminService $service;
21
22    private JsonRenderer $renderer;
23
24    public function __construct(
25        AdminService $service,
26        JsonRenderer $renderer,
27    ) {
28        $this->service = $service;
29        $this->renderer = $renderer;
30    }
31
32    public function __invoke(
33        ServerRequestInterface $request,
34        ResponseInterface $response,
35    ): ResponseInterface {
36        $params = $request->getQueryParams();
37
38        $page = Row::nullableInt($params, 'page') ?? 1;
39        $limit = Row::nullableInt($params, 'limit') ?? 20;
40        $search = Row::nullableString($params, 'search');
41        $kycStatus = Row::nullableString($params, 'kycStatus');
42        $status = Row::nullableString($params, 'status');
43
44        $result = $this->service->getInvestorsList($page, $limit, $search, $kycStatus, $status);
45
46        return $this->renderer->json($response, [
47            'success' => true,
48            'data' => $result,
49        ]);
50    }
51}