Completed
Push — master ( 1e5bea...c96873 )
by Thijs
14s queued 10s
created

ManagesAccounts::updateOrCreateAccount()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 14

Duplication

Lines 14
Ratio 100 %

Importance

Changes 0
Metric Value
dl 14
loc 14
rs 9.7998
c 0
b 0
f 0
cc 3
nc 3
nop 2
1
<?php
2
3
namespace TestMonitor\ActiveCampaign\Actions;
4
5
use TestMonitor\ActiveCampaign\Resources\Account;
6
7
trait ManagesAccounts
8
{
9
    use ImplementsActions;
10
11
    /**
12
     * Get all accounts.
13
     *
14
     * @return array
15
     */
16
    public function accounts()
17
    {
18
        return $this->transformCollection(
19
            $this->get('accounts'),
20
            Account::class,
21
            'accounts'
22
        );
23
    }
24
25
    /**
26
     * Find account by name.
27
     *
28
     * @param string $name
29
     *
30
     * @return Account|null
31
     */
32
    public function findAccount($name)
33
    {
34
        $accounts = $this->transformCollection(
35
            $this->get('accounts', ['query' => ['search' => $name]]),
36
            Account::class,
37
            'accounts'
38
        );
39
40
        return array_shift($accounts);
41
    }
42
43
    /**
44
     * Create new account.
45
     *
46
     * @param array $data
47
     *
48
     * @return Account|null
49
     */
50
    public function createAccount(array $data = [])
51
    {
52
        $accounts = $this->transformCollection(
53
            $this->post('accounts', ['json' => ['account' => $data]]),
54
            Account::class
55
        );
56
57
        return array_shift($accounts);
58
    }
59
60
    /**
61
     * Update an account.
62
     *
63
     * @param int $accountId
64
     * @param array $data
65
     *
66
     * @return Account|null
67
     */
68
    public function updateAccount($accountId, array $data = [])
69
    {
70
        $accounts = $this->transformCollection(
71
            $this->put("accounts/{$accountId}", ['json' => ['account' => $data]]),
72
            Account::class
73
        );
74
75
        return array_shift($accounts);
76
    }
77
78
    /**
79
     * Find or create an account.
80
     *
81
     * @param string $name
82
     * @param array $data
83
     *
84
     * @return Account
85
     */
86 View Code Duplication
    public function findOrCreateAccount($name, array $data = [])
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
87
    {
88
        $account = $this->findAccount($name);
89
90
        if ($account instanceof Account) {
91
            return $account;
92
        }
93
94
        if (empty($data)) {
95
            $data = ['name' => $name];
96
        }
97
98
        return $this->createAccount($data);
99
    }
100
101
    /**
102
     * Update or create an account.
103
     *
104
     * @param string $name
105
     * @param array $data
106
     *
107
     * @return Account
108
     */
109 View Code Duplication
    public function updateOrCreateAccount($name, array $data = [])
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
110
    {
111
        $account = $this->findAccount($name);
112
113
        if ($account instanceof Account) {
114
            return $this->updateAccount($account->id, $data);
115
        }
116
117
        if (empty($data)) {
118
            $data = ['name' => $name];
119
        }
120
121
        return $this->createAccount($data);
122
    }
123
}
124