Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
GetInvestorByUserIdAction
100.00% covered (success)
100.00%
26 / 26
100.00% covered (success)
100.00%
2 / 2
3
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 __invoke
100.00% covered (success)
100.00%
25 / 25
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare(strict_types=1);
4
5namespace App\Action\Investor;
6
7use App\Domain\Investor\Service\InvestorService;
8use App\Renderer\JsonRenderer;
9use InvalidArgumentException;
10use Psr\Http\Message\ResponseInterface;
11use Psr\Http\Message\ServerRequestInterface;
12
13final readonly class GetInvestorByUserIdAction
14{
15    public function __construct(
16        private InvestorService $investorService,
17        private JsonRenderer $renderer,
18    ) {}
19
20    /**
21     * @param array<string, string> $args
22     * @param ServerRequestInterface $request
23     * @param ResponseInterface $response
24     */
25    public function __invoke(
26        ServerRequestInterface $request,
27        ResponseInterface $response,
28        array $args,
29    ): ResponseInterface {
30        $userId = (int)$args['userId'];
31
32        if ($userId <= 0) {
33            throw new InvalidArgumentException('Invalid user ID');
34        }
35
36        // Get investor by user ID
37        $investor = $this->investorService->getInvestorByUserId($userId);
38
39        return $this->renderer->json($response, [
40            'success' => true,
41            'data' => [
42                'investorId' => $investor->investorId,
43                'firstName' => $investor->firstName,
44                'lastName' => $investor->lastName,
45                'email' => $investor->email,
46                'phone' => $investor->phone,
47                'dateOfBirth' => $investor->dateOfBirth,
48                'addressLine1' => $investor->addressLine1,
49                'addressLine2' => $investor->addressLine2,
50                'city' => $investor->city,
51                'state' => $investor->state,
52                'zipCode' => $investor->zipCode,
53                'country' => $investor->country,
54                'kycStatus' => $investor->kycStatus,
55                'status' => $investor->status,
56                'createdAt' => $investor->createdAt,
57                'updatedAt' => $investor->updatedAt,
58            ],
59        ]);
60    }
61}