apiClient->request( Method::POST, 'recipients', $command->toArray(), $this->apiClient->getDefaultQueryParams() ); return Recipient::fromArray($data); } /** * Gets a recipient by ID using Value Object (RECOMMENDED) */ public function get(RecipientId $recipientId): Recipient { $data = $this->apiClient->request(Method::GET, "recipients/{$recipientId->value}"); return Recipient::fromArray($data); } /** * Updates a recipient using Command pattern (RECOMMENDED) */ public function updateWithCommand(UpdateRecipientCommand $command): Recipient { $data = $this->apiClient->request( Method::PATCH, "recipients/{$command->id->value}", $command->toArray() ); return Recipient::fromArray($data); } /** * Deletes a recipient using Value Object (RECOMMENDED) */ public function delete(RecipientId $recipientId): void { $this->apiClient->sendRawRequest(Method::DELETE, "recipients/{$recipientId->value}"); } /** * Searches for recipients with filters (RECOMMENDED) * @return Recipient[] */ public function search(array $filter = [], int $page = 1, int $perPage = 50): array { $queryParams = [ 'page' => $page, 'per_page' => $perPage ]; if (!empty($filter)) { $queryParams = array_merge($queryParams, $filter); } $apiResponse = $this->apiClient->request(Method::GET, 'recipients', [], $queryParams); $recipients = $apiResponse['_embedded']['recipients'] ?? []; return array_map( fn(array $item) => Recipient::fromArray($item), $recipients ); } /** * Finds a specific recipient by email (RECOMMENDED) */ public function findByEmail(string $email, ?RecipientListId $recipientListId = null): ?Recipient { $filter = ['email' => $email]; if ($recipientListId !== null) { $filter['recipientlist_id'] = $recipientListId->value; } $recipients = $this->search($filter, 1, 1); return empty($recipients) ? null : $recipients[0]; } /** * Checks if a recipient exists (RECOMMENDED) */ public function exists(string $email, ?RecipientListId $recipientListId = null): bool { return $this->findByEmail($email, $recipientListId) !== null; } }