Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
64.29% covered (warning)
64.29%
9 / 14
66.67% covered (warning)
66.67%
2 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
StockIOProductDTO
64.29% covered (warning)
64.29%
9 / 14
66.67% covered (warning)
66.67%
2 / 3
4.73
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 toArray
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 fromRequest
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Domain\StockIO\DTOs;
4
5use App\Models\Product\Product;
6use Domain\Shared\Interfaces\DataTransferObjectInterface;
7use Illuminate\Foundation\Http\FormRequest;
8use Domain\StockIO\Enums\StockProductStatusEnum;
9
10readonly final class StockIOProductDTO implements DataTransferObjectInterface
11{
12    public Product $product;
13    public float $amount;
14    public bool $picked;
15    public StockProductStatusEnum $status;
16    public ?DataTransferObjectInterface $dataTransferObject;
17
18
19    public function __construct(array $args)
20    {
21        $this->product = $args['product'];
22        $this->amount = $args['amount'];
23        $this->dataTransferObject = $args['integration_dto'] ?? null;
24        $this->status = isset($args['status']) ? StockProductStatusEnum::tryFrom($args['status']) : StockProductStatusEnum::PENDING;
25    }
26
27    public function toArray(): array
28    {
29        return [
30            'product_id' => $this->product->getKey(),
31            'amount' => $this->amount,
32            'status' => $this->status->value,
33        ];
34    }
35
36    public static function fromRequest(FormRequest $request): StockIOProductDTO
37    {
38        return new self([
39            'product' => Product::find($request->validated('product_id')),
40            'amount' => $request->validated('amount'),
41            'status' => $request->validated('status'),
42        ]);
43    }
44}