Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
InvestorData
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
2 / 2
10
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
 fromRow
100.00% covered (success)
100.00%
19 / 19
100.00% covered (success)
100.00%
1 / 1
9
1<?php
2
3declare(strict_types=1);
4
5namespace App\Domain\Investor\Data;
6
7final readonly class InvestorData
8{
9    public function __construct(
10        public int $investorId,
11        public string $firstName,
12        public string $lastName,
13        public string $email,
14        public ?string $phone,
15        public string $dateOfBirth,
16        public ?string $ssnEncrypted,
17        public ?string $addressLine1,
18        public ?string $addressLine2,
19        public ?string $city,
20        public ?string $state,
21        public ?string $zipCode,
22        public string $country,
23        public string $kycStatus,
24        public string $status,
25        public string $createdAt,
26        public ?string $updatedAt,
27    ) {}
28
29    /**
30     * @param array<string, mixed> $data
31     */
32    public static function fromRow(array $data): self
33    {
34        return new self(
35            investorId: (int)$data['investorId'],
36            firstName: (string)$data['firstName'],
37            lastName: (string)$data['lastName'],
38            email: (string)$data['email'],
39            phone: isset($data['phone']) ? (string)$data['phone'] : null,
40            dateOfBirth: (string)$data['dateOfBirth'],
41            ssnEncrypted: isset($data['ssnEncrypted']) ? (string)$data['ssnEncrypted'] : null,
42            addressLine1: isset($data['addressLine1']) ? (string)$data['addressLine1'] : null,
43            addressLine2: isset($data['addressLine2']) ? (string)$data['addressLine2'] : null,
44            city: isset($data['city']) ? (string)$data['city'] : null,
45            state: isset($data['state']) ? (string)$data['state'] : null,
46            zipCode: isset($data['zipCode']) ? (string)$data['zipCode'] : null,
47            country: (string)($data['country'] ?? 'USA'),
48            kycStatus: (string)($data['kycStatus'] ?? 'pending'),
49            status: (string)($data['status'] ?? 'active'),
50            createdAt: (string)$data['createdAt'],
51            updatedAt: isset($data['updatedAt']) ? (string)$data['updatedAt'] : null,
52        );
53    }
54}