forked from smsapi/smsapi-php-client
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathContactsHttpFeature.php
More file actions
91 lines (72 loc) · 3.09 KB
/
ContactsHttpFeature.php
File metadata and controls
91 lines (72 loc) · 3.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
<?php
declare(strict_types=1);
namespace Smsapi\Client\Feature\Contacts;
use Smsapi\Client\Feature\Contacts\Fields\ContactsFieldsFeature;
use Smsapi\Client\Feature\Contacts\Fields\ContactsFieldsHttpFeature;
use Smsapi\Client\Feature\Data\DataFactoryProvider;
use Smsapi\Client\Infrastructure\RequestExecutor\RestRequestExecutor;
use Smsapi\Client\Feature\Contacts\Bag\CreateContactBag;
use Smsapi\Client\Feature\Contacts\Bag\DeleteContactBag;
use Smsapi\Client\Feature\Contacts\Bag\FindContactBag;
use Smsapi\Client\Feature\Contacts\Bag\FindContactsBag;
use Smsapi\Client\Feature\Contacts\Bag\UpdateContactBag;
use Smsapi\Client\Feature\Contacts\Data\Contact;
use Smsapi\Client\Feature\Contacts\Groups\ContactsGroupsFeature;
use Smsapi\Client\Feature\Contacts\Groups\ContactsGroupsHttpFeature;
/**
* @internal
*/
class ContactsHttpFeature implements ContactsFeature
{
private $restRequestExecutor;
private $dataFactoryProvider;
public function __construct(RestRequestExecutor $restRequestExecutor, DataFactoryProvider $dataFactoryProvider)
{
$this->restRequestExecutor = $restRequestExecutor;
$this->dataFactoryProvider = $dataFactoryProvider;
}
/**
* @param FindContactsBag|null $findContactsBag
*/
public function findContacts($findContactsBag = null): array
{
$result = $this->restRequestExecutor->read('contacts', (array)$findContactsBag);
return array_map(
[$this->dataFactoryProvider->provideContactFactory(), 'createFromObject'],
$result->collection
);
}
public function findContact(FindContactBag $findContactBag): Contact
{
$result = $this->restRequestExecutor->read('contacts/' . $findContactBag->contactId, []);
return $this->dataFactoryProvider->provideContactFactory()->createFromObject($result);
}
public function createContact(CreateContactBag $createContactBag): Contact
{
$result = $this->restRequestExecutor->create('contacts', (array)$createContactBag);
return $this->dataFactoryProvider->provideContactFactory()->createFromObject($result);
}
public function updateContact(UpdateContactBag $updateContactBag): Contact
{
$contactId = $updateContactBag->contactId;
unset($updateContactBag->contactId);
$result = $this->restRequestExecutor->update('contacts/' . $contactId, (array)$updateContactBag);
return $this->dataFactoryProvider->provideContactFactory()->createFromObject($result);
}
public function deleteContact(DeleteContactBag $deleteContactBag)
{
$this->restRequestExecutor->delete('contacts/' . $deleteContactBag->contactId, []);
}
public function deleteContacts()
{
$this->restRequestExecutor->delete('contacts', []);
}
public function groupsFeature(): ContactsGroupsFeature
{
return new ContactsGroupsHttpFeature($this->restRequestExecutor, $this->dataFactoryProvider);
}
public function fieldsFeature(): ContactsFieldsFeature
{
return new ContactsFieldsHttpFeature($this->restRequestExecutor, $this->dataFactoryProvider);
}
}