Passed
Push — master ( 4f0c15...22d199 )
by Laurens
01:48
created

TransactionFactory   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 35
Duplicated Lines 0 %

Test Coverage

Coverage 70%

Importance

Changes 0
Metric Value
wmc 4
eloc 18
dl 0
loc 35
ccs 14
cts 20
cp 0.7
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A fromSubscriptionArray() 0 9 2
A fromData() 0 12 1
A __construct() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LauLamanApps\eCurring\Resource\Factory;
6
7
use DateTimeImmutable;
8
use LauLamanApps\eCurring\eCurringClientInterface;
9
use LauLamanApps\eCurring\Resource\Curser\Pagination;
10
use LauLamanApps\eCurring\Resource\Factory\Transaction\EventFactoryInterface;
11
use LauLamanApps\eCurring\Resource\Subscription;
12
use LauLamanApps\eCurring\Resource\Transaction;
13
use LauLamanApps\eCurring\Resource\Transaction\PaymentMethod;
14
use LauLamanApps\eCurring\Resource\Transaction\Status;
15
use LauLamanApps\eCurring\Resource\TransactionCollection;
16
use Money\Money;
17
use Ramsey\Uuid\Uuid;
18
19
final class TransactionFactory extends AbstractFactory implements TransactionFactoryInterface
20
{
21
    /**
22
     * @var EventFactoryInterface
23
     */
24
    private $eventFactory;
25
26 1
    public function __construct(EventFactoryInterface $eventFactory)
27
    {
28 1
        $this->eventFactory = $eventFactory;
29 1
    }
30
31
    public function fromSubscriptionArray(eCurringClientInterface $client, array $data, Subscription $subscription, Pagination $page): TransactionCollection
32
    {
33
        $transactions = [];
34
        foreach ($data['data'] as $data) {
35
            $transactions[] = $this->fromData($data);
36
        }
37
        $totalPages = $this->extractInteger('total', $data['meta']);
38
39
        return new TransactionCollection($subscription, $client, $page->getNumber(), $totalPages, $transactions);
40
    }
41
42 1
    public function fromData(array $data): Transaction
43
    {
44 1
        return Transaction::fromData(
45 1
            Uuid::fromString($data['id']),
46 1
            Status::get($data['attributes']['status']),
47 1
            new DateTimeImmutable($data['attributes']['scheduled_on']),
48 1
            Money::EUR($this->extractFloat('amount', $data['attributes'])*100),
49 1
            PaymentMethod::get($data['attributes']['payment_method']),
50 1
            $this->extractDateTimeImmutableOrNull('due_date', $data['attributes']),
51 1
            $this->extractDateTimeImmutableOrNull('canceled_on', $data['attributes']),
52 1
            $this->extractStringOrNull('webhook_url', $data['attributes']),
53 1
            ...$this->eventFactory->fromArray($data['attributes']['history'])
54
        );
55
    }
56
}
57