From 2a0bc92dcde5e9d96648f9566addf16ca6259562 Mon Sep 17 00:00:00 2001 From: Matt Elliott Date: Thu, 31 Oct 2024 10:37:53 -0600 Subject: [PATCH] feat: add the ability to retrieve a contact via user ID --- src/Requests/Contacts/ContactRetrieveRequest.php | 14 ++++++++++---- src/Resources/ContactResource.php | 6 +++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/Requests/Contacts/ContactRetrieveRequest.php b/src/Requests/Contacts/ContactRetrieveRequest.php index a4cada7..e17f194 100644 --- a/src/Requests/Contacts/ContactRetrieveRequest.php +++ b/src/Requests/Contacts/ContactRetrieveRequest.php @@ -13,8 +13,13 @@ class ContactRetrieveRequest extends Request { protected Method $method = Method::GET; - public function __construct(protected readonly string $email) - { + public function __construct( + protected readonly string|null $email = null, + protected readonly string|null $userId = null + ) { + if (($email === null && $userId === null) || ($email !== null && $userId !== null)) { + throw new \InvalidArgumentException('Exactly one of email or userId must be provided'); + } } public function createDtoFromResponse(Response $response): Contact|null @@ -31,9 +36,10 @@ public function createDtoFromResponse(Response $response): Contact|null protected function defaultQuery(): array { - return [ + return array_filter([ 'email' => $this->email, - ]; + 'userId' => $this->userId, + ]); } public function resolveEndpoint(): string diff --git a/src/Resources/ContactResource.php b/src/Resources/ContactResource.php index 7e92107..b364e04 100644 --- a/src/Resources/ContactResource.php +++ b/src/Resources/ContactResource.php @@ -46,10 +46,10 @@ public function delete(string|null $email = null, string|null $userId = null): C return $response; } - public function retrieve(string $email): Contact + public function retrieve(?string $email = null, ?string $userId = null): Contact|null { - /** @var Contact $contact */ - $contact = $this->connector->send(new ContactRetrieveRequest($email))->dto(); + /** @var Contact|null $contact */ + $contact = $this->connector->send(new ContactRetrieveRequest($email, $userId))->dto(); return $contact; }