Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
63.16% covered (warning)
63.16%
12 / 19
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
RequestSearchDTO
63.16% covered (warning)
63.16%
12 / 19
66.67% covered (warning)
66.67%
2 / 3
3.45
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 toArray
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
2
 fromRequest
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3namespace Domain\Request\DTOs;
4
5use Domain\Shared\Interfaces\DataTransferObjectInterface;
6use Domain\Shared\Traits\DateRangeDTOTrait;
7use Illuminate\Foundation\Http\FormRequest;
8
9readonly final class RequestSearchDTO implements DataTransferObjectInterface
10{
11    use DateRangeDTOTrait;
12
13    public ?array $status;
14    public ?array $requesters;
15    public ?string $request_number;
16    /** @var null|\Carbon\Carbon[] */
17    public ?array $created_at;
18    /** @var null|\Carbon\Carbon[] */
19    public ?array $updated_at;
20
21    public function __construct(array $args)
22    {
23        $this->status       = $args['status'] ?? [];
24        $this->requesters = $args['requesters'] ?? null;
25        $this->request_number = $args['request_number'] ?? null;
26        $this->created_at = $args['created_at'] ?? null;
27        $this->updated_at = $args['updated_at'] ?? null;
28    }
29
30    public function toArray(): array
31    {
32        return [
33            'status'       => $this->status,
34            'requesters' => $this->requesters,
35            'request_number' => $this->request_number,
36            'created_at' => $this->created_at,
37            'updated_at' => $this->updated_at,
38        ];
39    }
40
41    public static function fromRequest(FormRequest $request): RequestSearchDTO
42    {
43        return new self([
44            'status'       => $request->validated('status'),
45            'requesters' => $request->validated('requesters'),
46            'request_number' => $request->validated('request_number'),
47            'created_at' => self::processDate($request->validated('created_at')),
48            'updated_at' => self::processDate($request->validated('updated_at')),
49        ]);
50    }
51}