136 lines
3.7 KiB
PHP

<?php
namespace Mollie\Api\EndpointCollection;
use Mollie\Api\Exceptions\RequestException;
use Mollie\Api\Factories\CreateWebhookRequestFactory;
use Mollie\Api\Factories\UpdateWebhookRequestFactory;
use Mollie\Api\Http\Requests\DeleteWebhookRequest;
use Mollie\Api\Http\Requests\GetPaginatedWebhooksRequest;
use Mollie\Api\Http\Requests\GetWebhookRequest;
use Mollie\Api\Http\Requests\TestWebhookRequest;
use Mollie\Api\Resources\AnyResource;
use Mollie\Api\Resources\LazyCollection;
use Mollie\Api\Resources\Webhook;
use Mollie\Api\Resources\WebhookCollection;
class WebhookEndpointCollection extends EndpointCollection
{
/**
* Creates a webhook in Mollie.
*
* @param array $payload An array containing details on the webhook.
*
* @throws RequestException
*/
public function create(array $payload = [], bool $test = false): Webhook
{
$request = CreateWebhookRequestFactory::new()
->withPayload($payload)
->create();
/** @var Webhook */
return $this->send($request->test($test));
}
/**
* Retrieve a webhook from Mollie.
*
* Will throw an ApiException if the webhook id is invalid or the resource cannot be found.
*
* @throws RequestException
*/
public function get(string $id, bool $test = false): Webhook
{
/** @var Webhook */
return $this->send((new GetWebhookRequest($id))->test($test));
}
/**
* Update a webhook.
*
* @throws RequestException
*/
public function update(string $id, array $payload = [], bool $test = false): Webhook
{
$request = UpdateWebhookRequestFactory::new($id)
->withPayload($payload)
->create();
/** @var Webhook */
return $this->send($request->test($test));
}
/**
* Delete a webhook from Mollie.
*
* @throws RequestException
*/
public function delete(string $id, bool $test = false): void
{
$this->send((new DeleteWebhookRequest($id))->test($test));
}
/**
* Test a webhook by sending a test event.
*
* @throws RequestException
*/
public function test(string $id, bool $test = false): AnyResource
{
/** @var AnyResource */
return $this->send((new TestWebhookRequest($id))->test($test));
}
/**
* Retrieves a collection of webhooks from Mollie.
*
* @throws RequestException
*/
public function page(
?string $from = null,
?int $limit = null,
?string $sort = null,
?string $eventTypes = null
): WebhookCollection {
$request = new GetPaginatedWebhooksRequest(
$from,
$limit,
$sort,
$eventTypes
);
/** @var WebhookCollection */
return $this->send($request);
}
/**
* Create an iterator for iterating over webhooks retrieved from Mollie.
*
* @param string|null $from The first webhook ID you want to include in your list.
* @param bool $iterateBackwards Set to true for reverse order iteration (default is false).
*/
public function iterator(
?string $from = null,
?int $limit = null,
?string $sort = null,
?string $eventTypes = null,
bool $iterateBackwards = false,
bool $test = false
): LazyCollection {
$request = new GetPaginatedWebhooksRequest(
$from,
$limit,
$sort,
$eventTypes
);
return $this->send(
$request
->useIterator()
->setIterationDirection($iterateBackwards)
->test($test)
);
}
}