Skip to content

Commit

Permalink
docs: updated to fat requests
Browse files Browse the repository at this point in the history
  • Loading branch information
Naoray committed Feb 5, 2025
1 parent 5c630ee commit dfe3c07
Show file tree
Hide file tree
Showing 32 changed files with 90 additions and 179 deletions.
28 changes: 12 additions & 16 deletions docs/endpoint-collections.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,28 +37,27 @@ $payment = $mollie->payments->create([
]);
```

**Advanced: Using typed payloads/queries**
This approach provides full IDE support and type safety:
**Advanced: Using typed array params**
You can use dedicated `Data` objects to add partial type safety to your parameters.

```php
use Mollie\Api\Http\Data\Money;
use Mollie\Api\Http\Data\CreatePaymentPayload;

$payment = $mollie->payments->create(
new CreatePaymentPayload(
description: 'My first API payment',
amount: new Money('EUR', '10.00')
)
);
$payment = $mollie->payments->create([
'description' => 'My first API payment',
'amount' => new Money('EUR', '10.00')
]);
```

If you have an array and need to interact with the payload or query, you can use a dedicated factory to convert the array into a typed class.
If you're starting with an array and need to convert it into a structured request, you can use a specific factory designed for this purpose.

```php
use Mollie\Api\Http\Data\Money;
use Mollie\Api\Factories\CreatePaymentPayloadFactory;
use Mollie\Api\Factories\CreatePaymentRequestFactory;

// Fully untyped data
$createPaymentPayload = CreatePaymentPayloadFactory::new([
$createPaymentRequest = CreatePaymentRequestFactory::new([
'amount' => [
'currency' => 'EUR',
'value' => '10.00'
Expand All @@ -67,16 +66,13 @@ $createPaymentPayload = CreatePaymentPayloadFactory::new([
]);

// Partially untyped
$createPaymentPayload = CreatePaymentPayloadFactory::new([
$createPaymentRequest = CreatePaymentRequestFactory::new([
'amount' => new Money('EUR', '10.00'),
'description' => 'My first API payment'
]);

// Access payload
$createPaymentPayload->amount->...
```

This approach allows you to seamlessly convert arrays into typed objects, providing better IDE support and type safety while working with your data.
This method lets you effortlessly transform arrays into typed objects, thereby enhancing IDE support and increasing type safety while handling your data.

# Available Endpoints

Expand Down
22 changes: 8 additions & 14 deletions docs/requests.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

## Overview

The Mollie API client uses request classes to communicate with the Mollie API. Each request class handles specific API endpoints and operations.
The Mollie API client uses request classes to communicate with the Mollie API. Each request class handles specific API endpoints and operations. The response is casted into a dedicated `Mollie\Api\Resources\*` class.

## Sending a Request

Expand All @@ -25,24 +25,18 @@ To send a request using the Mollie API client, you typically need to:
```php
use Mollie\Api\MollieApiClient;
use Mollie\Api\Http\Data\Money;
use Mollie\Api\Http\Data\CreatePaymentPayload;
use Mollie\Api\Http\Requests\CreatePaymentRequest;

$mollie = new MollieApiClient();
$createPaymentRequest = new CreatePaymentRequest(
new CreatePaymentPayload(
'Test payment',
new Money('EUR', '10.00'),
'https://example.org/redirect',
'https://example.org/webhook'
)
'Test payment',
new Money('EUR', '10.00'),
'https://example.org/redirect',
'https://example.org/webhook'
);

/** @var \Mollie\Api\Http\Response $response */
$response = $mollie->send($createPaymentRequest);
/** @var \Mollie\Api\Resources\Payment $payment */
$payment = $mollie->send($createPaymentRequest);

$this->assertEquals(200, $response->status());

/** @var \Mollie\Api\Resources\Payment */
$payment = $response->toResource();
$this->assertEquals(200, $payment->getResponse()->status());
```
4 changes: 1 addition & 3 deletions src/Contracts/Resolvable.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Contracts;

interface Resolvable extends Arrayable
{
}
interface Resolvable extends Arrayable {}
9 changes: 4 additions & 5 deletions src/EndpointCollection/SessionEndpointCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,14 @@

use Mollie\Api\Exceptions\RequestException;
use Mollie\Api\Factories\SortablePaginatedQueryFactory;
use Mollie\Api\Http\Requests\CancelSessionRequest;
use Mollie\Api\Http\Requests\DynamicDeleteRequest;
use Mollie\Api\Http\Requests\DynamicGetRequest;
use Mollie\Api\Http\Requests\DynamicPaginatedRequest;
use Mollie\Api\Http\Requests\DynamicPostRequest;
use Mollie\Api\Http\Requests\DynamicPutRequest;
use Mollie\Api\Http\Requests\GetPaginatedSessionsRequest;
use Mollie\Api\Http\Requests\UpdateSessionRequest;
use Mollie\Api\Resources\LazyCollection;
use Mollie\Api\Resources\Session;
use Mollie\Api\Resources\SessionCollection;
use Mollie\Api\Utils\Arr;

class SessionEndpointCollection extends EndpointCollection
{
Expand Down Expand Up @@ -54,7 +50,6 @@ public function create(array $payload = [], array $query = []): Session
*
* Will throw a ApiException if the session id is invalid or the resource cannot be found.
*
* @param array $payload
*
* @throws RequestException
*/
Expand Down Expand Up @@ -97,6 +92,8 @@ public function page(?string $from = null, ?int $limit = null, array $filters =

$request = new DynamicPaginatedRequest('sessions', array_merge($filters, $query->toArray()));

$request->setHydratableResource(SessionCollection::class);

/** @var SessionCollection */
return $this->send($request);
}
Expand All @@ -121,6 +118,8 @@ public function iterator(

$request = new DynamicPaginatedRequest('sessions', array_merge($filters, $query->toArray()));

$request->setHydratableResource(SessionCollection::class);

return $this->send(
$request
->useIterator()
Expand Down
21 changes: 0 additions & 21 deletions src/Endpoints/CapabilityEndpoint.php

This file was deleted.

4 changes: 1 addition & 3 deletions src/Exceptions/ClientException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Exceptions;

class ClientException extends RequestException
{
}
class ClientException extends RequestException {}
4 changes: 1 addition & 3 deletions src/Exceptions/EmbeddedResourcesNotParseableException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Exceptions;

class EmbeddedResourcesNotParseableException extends MollieException
{
}
class EmbeddedResourcesNotParseableException extends MollieException {}
4 changes: 1 addition & 3 deletions src/Exceptions/LogicException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Exceptions;

class LogicException extends MollieException
{
}
class LogicException extends MollieException {}
4 changes: 1 addition & 3 deletions src/Exceptions/MollieException.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,4 @@

use Psr\Http\Client\ClientExceptionInterface;

abstract class MollieException extends \Exception implements ClientExceptionInterface
{
}
abstract class MollieException extends \Exception implements ClientExceptionInterface {}
4 changes: 1 addition & 3 deletions src/Exceptions/ServerException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Exceptions;

class ServerException extends RequestException
{
}
class ServerException extends RequestException {}
4 changes: 1 addition & 3 deletions src/Exceptions/UnrecognizedClientException.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Exceptions;

class UnrecognizedClientException extends MollieException
{
}
class UnrecognizedClientException extends MollieException {}
3 changes: 2 additions & 1 deletion src/Http/Requests/DynamicDeleteRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

namespace Mollie\Api\Http\Requests;

use Mollie\Api\Contracts\SupportsTestmodeInQuery;
use Mollie\Api\Types\Method;

class DynamicDeleteRequest extends DynamicRequest
class DynamicDeleteRequest extends DynamicRequest implements SupportsTestmodeInQuery
{
/**
* Define the HTTP method.
Expand Down
3 changes: 2 additions & 1 deletion src/Http/Requests/DynamicGetRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@

namespace Mollie\Api\Http\Requests;

use Mollie\Api\Contracts\SupportsTestmodeInQuery;
use Mollie\Api\Types\Method;

class DynamicGetRequest extends DynamicRequest
class DynamicGetRequest extends DynamicRequest implements SupportsTestmodeInQuery
{
/**
* Define the HTTP method.
Expand Down
3 changes: 2 additions & 1 deletion src/Http/Requests/DynamicPaginatedRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
namespace Mollie\Api\Http\Requests;

use Mollie\Api\Contracts\IsIteratable;
use Mollie\Api\Contracts\SupportsTestmodeInQuery;
use Mollie\Api\Traits\IsIteratableRequest;

class DynamicPaginatedRequest extends DynamicGetRequest implements IsIteratable
class DynamicPaginatedRequest extends DynamicGetRequest implements IsIteratable, SupportsTestmodeInQuery
{
use IsIteratableRequest;
}
3 changes: 2 additions & 1 deletion src/Http/Requests/DynamicPostRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
namespace Mollie\Api\Http\Requests;

use Mollie\Api\Contracts\HasPayload;
use Mollie\Api\Contracts\SupportsTestmodeInPayload;
use Mollie\Api\Traits\HasJsonPayload;
use Mollie\Api\Types\Method;

class DynamicPostRequest extends DynamicRequest implements HasPayload
class DynamicPostRequest extends DynamicRequest implements HasPayload, SupportsTestmodeInPayload
{
use HasJsonPayload;

Expand Down
3 changes: 2 additions & 1 deletion src/Http/Requests/DynamicPutRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,11 @@
namespace Mollie\Api\Http\Requests;

use Mollie\Api\Contracts\HasPayload;
use Mollie\Api\Contracts\SupportsTestmodeInPayload;
use Mollie\Api\Traits\HasJsonPayload;
use Mollie\Api\Types\Method;

class DynamicPutRequest extends DynamicRequest implements HasPayload
class DynamicPutRequest extends DynamicRequest implements HasPayload, SupportsTestmodeInPayload
{
use HasJsonPayload;

Expand Down
4 changes: 4 additions & 0 deletions src/Http/Requests/DynamicRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,14 @@

namespace Mollie\Api\Http\Requests;

use Mollie\Api\Resources\AnyResource;

abstract class DynamicRequest extends ResourceHydratableRequest
{
private string $url;

protected $hydratableResource = AnyResource::class;

public function __construct(string $url)
{
$this->url = $url;
Expand Down
19 changes: 0 additions & 19 deletions src/Http/Requests/GetPaginatedSessionsRequest.php

This file was deleted.

10 changes: 8 additions & 2 deletions src/Resources/AnyResource.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@

namespace Mollie\Api\Resources;

use Mollie\Api\Contracts\Arrayable;
use Mollie\Api\Utils\Arr;
use stdClass;

/**
* @property \Mollie\Api\MollieApiClient $connector
*/
class AnyResource extends BaseResource
class AnyResource extends BaseResource implements Arrayable
{
public array $attributes = [];
protected array $attributes = [];

/**
* @return mixed
Expand All @@ -27,4 +28,9 @@ public function fill($attributes): void
{
$this->attributes = $attributes instanceof stdClass ? (array) $attributes : $attributes;
}

public function toArray(): array
{
return $this->attributes;
}
}
40 changes: 0 additions & 40 deletions src/Resources/Capability.php

This file was deleted.

4 changes: 1 addition & 3 deletions src/Resources/IssuerCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,4 @@

namespace Mollie\Api\Resources;

class IssuerCollection extends BaseCollection
{
}
class IssuerCollection extends BaseCollection {}
Loading

0 comments on commit dfe3c07

Please sign in to comment.