refactor code

This commit is contained in:
2025-09-21 17:12:19 +00:00
parent c641ec725d
commit 25248e7822
37 changed files with 180 additions and 143 deletions

View File

@@ -22,7 +22,8 @@
"firebase/php-jwt": "^6.0"
},
"require-dev": {
"phpunit/phpunit": "^8.0|^9.0"
"phpunit/phpunit": "^8.0|^9.0",
"laravel/framework": "^11.0|^12.0"
},
"autoload": {
"psr-4": {

View File

@@ -327,7 +327,7 @@ class AnikeenId
* @throws GuzzleException
* @throws RequestRequiresClientIdException
*/
public function request(string $method, string $path, null|array $payload = null, array $parameters = [], ?Paginator $paginator = null): Result
public function request(string $method, string $path, null|array $payload = null, array $parameters = [], ?Paginator $paginator = null, bool $useClientSecret = false): Result
{
if ($paginator !== null) {
$parameters[$paginator->action] = $paginator->cursor();
@@ -335,7 +335,7 @@ class AnikeenId
try {
$response = $this->client->request($method, $path, [
'headers' => $this->buildHeaders((bool)$payload),
'headers' => $this->buildHeaders((bool)$payload, $useClientSecret),
'query' => Query::build($parameters),
'json' => $payload ?: null,
]);
@@ -353,14 +353,14 @@ class AnikeenId
*
* @throws RequestRequiresClientIdException
*/
private function buildHeaders(bool $json = false): array
private function buildHeaders(bool $json = false, bool $useClientSecret = false): array
{
$headers = [
'Client-ID' => $this->getClientId(),
'Accept' => 'application/json',
];
if ($this->token) {
$headers['Authorization'] = 'Bearer ' . $this->token;
if ($bearerToken = $useClientSecret ? $this->getClientSecret() : $this->getToken()) {
$headers['Authorization'] = 'Bearer ' . $bearerToken;
}
if ($json) {
$headers['Content-Type'] = 'application/json';

View File

@@ -2,7 +2,6 @@
namespace Anikeen\Id;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Concerns\ManagesAddresses;
use Anikeen\Id\Concerns\ManagesBalance;
use Anikeen\Id\Concerns\ManagesCountries;
@@ -13,8 +12,6 @@ use Anikeen\Id\Concerns\ManagesProfile;
use Anikeen\Id\Concerns\ManagesSubscriptions;
use Anikeen\Id\Concerns\ManagesTaxation;
use Anikeen\Id\Concerns\ManagesTransactions;
use Anikeen\Id\Helpers\Paginator;
use stdClass;
use Throwable;
trait Billable
@@ -29,31 +26,27 @@ trait Billable
use ManagesSubscriptions;
use ManagesTaxation;
use ManagesTransactions;
use Request;
/**
* Get the currently authenticated user.
*
* @throws Throwable
*/
public function getUserData(): stdClass
public function getUserData(): object
{
if (!isset($this->userDataCache)) {
$this->userDataCache = $this->request('GET', 'v1/user')->data;
$this->userDataCache = $this->anikeenId()->request('GET', 'v1/user')->data;
}
return $this->userDataCache;
}
/**
* Make a request to the Anikeen API.
* Get the AnikeenId class.
*
* @throws Throwable
*/
public function request(string $method, string $path, null|array $payload = null, array $parameters = [], ?Paginator $paginator = null): Result
public function anikeenId(): AnikeenId
{
$anikeenId = new AnikeenId();
$anikeenId->withToken($this->{AnikeenId::getAccessTokenField()});
return $anikeenId->request($method, $path, $payload, $parameters, $paginator);
return app(AnikeenId::class)->withToken($this->{AnikeenId::getAccessTokenField()});
}
}

View File

@@ -2,18 +2,21 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\Contracts\Billable;
use Illuminate\Database\Eloquent\Model;
trait HasBillable
{
public mixed $billable;
public Billable|Model $billable;
public function setBillable(mixed $billable): self
public function setBillable(Billable|Model $billable): self
{
$this->billable = $billable;
return $this;
}
public function getBillable(): mixed
public function getBillable(): Billable
{
return $this->billable;
}

View File

@@ -2,14 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Addresses;
use Throwable;
trait ManagesAddresses
{
use Request;
use HasBillable;
/**
* Get addresses from the current user.
@@ -19,7 +17,8 @@ trait ManagesAddresses
public function addresses(): Addresses
{
if (!isset($this->addressesCache)) {
$this->addressesCache = Addresses::builder(fn() => $this->request('GET', 'v1/addresses'))
$this->addressesCache = Addresses::builder(fn() => $this->anikeenId()
->request('GET', 'v1/addresses'))
->setBillable($this);
}
@@ -29,8 +28,8 @@ trait ManagesAddresses
/**
* Check if the current user has a default billing address.
*
* @see \Anikeen\Id\Resources\Addresses::hasDefaultBillingAddress()
* @throws Throwable
* @see \Anikeen\Id\Resources\Addresses::hasDefaultBillingAddress()
*/
public function hasDefaultBillingAddress(): bool
{

View File

@@ -2,13 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Resources\Transaction;
use Throwable;
trait ManagesBalance
{
use Request;
use HasBillable;
/**
* Get balance from the current user.
@@ -40,10 +39,12 @@ trait ManagesBalance
*/
public function charge(float $amount, string $paymentMethodId, array $options = []): Transaction
{
return new Transaction(fn() => $this->request('POST', 'billing/charge', [
return (new Transaction(fn() => $this->anikeenId()
->request('POST', 'billing/charge', [
'amount' => $amount,
'payment_method_id' => $paymentMethodId,
'options' => $options,
]));
])))
->setBillable($this);
}
}

View File

@@ -2,14 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Countries;
use Throwable;
trait ManagesCountries
{
use Request;
use HasBillable;
/**
* Get available countries for the current user.
@@ -19,7 +17,8 @@ trait ManagesCountries
public function countries(): Countries
{
if (!isset($this->countriesCache)) {
$this->countriesCache = Countries::builder(fn() => $this->request('GET', 'v1/countries'))
$this->countriesCache = Countries::builder(fn() => $this->anikeenId()
->request('GET', 'v1/countries'))
->setBillable($this);
}

View File

@@ -2,14 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Invoices;
use Throwable;
trait ManagesInvoices
{
use Request;
use HasBillable;
/**
* Get invoices from the current user.
@@ -19,7 +17,8 @@ trait ManagesInvoices
public function invoices(array $parameters = []): Invoices
{
if (!isset($this->invoicesCache)) {
$this->invoicesCache = Invoices::builder(fn() => $this->request('GET', 'v1/invoices', [], $parameters))
$this->invoicesCache = Invoices::builder(fn() => $this->anikeenId()
->request('GET', 'v1/invoices', [], $parameters))
->setBillable($this);
}

View File

@@ -2,15 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Orders;
use Anikeen\Id\Result;
use Throwable;
trait ManagesOrders
{
use Request;
use HasBillable;
/**
* Get orders from the current user.
@@ -20,7 +17,8 @@ trait ManagesOrders
public function orders(array $parameters = []): Orders
{
if (!isset($this->ordersCache)) {
$this->ordersCache = Orders::builder(fn() => $this->request('GET', 'v1/orders', [], $parameters))
$this->ordersCache = Orders::builder(fn() => $this->anikeenId()
->request('GET', 'v1/orders', [], $parameters))
->setBillable($this);
}

View File

@@ -2,8 +2,6 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\PaymentMethod;
use Anikeen\Id\Resources\PaymentMethods;
use Anikeen\Id\Result;
@@ -11,7 +9,7 @@ use Throwable;
trait ManagesPaymentMethods
{
use Request;
use HasBillable;
/**
* Get payment methods from the current user.
@@ -20,10 +18,10 @@ trait ManagesPaymentMethods
*/
public function paymentMethods(): PaymentMethods
{
if (!isset($this->paymentMethodsCache)) {;
$this->paymentMethodsCache = PaymentMethods::builder(
fn() => $this->request('GET', 'v1/payment-methods')
)->setBillable($this);
if (!isset($this->paymentMethodsCache)) {
$this->paymentMethodsCache = PaymentMethods::builder(fn() => $this->anikeenId()
->request('GET', 'v1/payment-methods'))
->setBillable($this);
}
return $this->paymentMethodsCache;
@@ -32,8 +30,8 @@ trait ManagesPaymentMethods
/**
* Check if current user has at least one payment method.
*
* @see \Anikeen\Id\Resources\PaymentMethods::hasPaymentMethod()
* @throws Throwable
* @see \Anikeen\Id\Resources\PaymentMethods::hasPaymentMethod()
*/
public function hasPaymentMethod(): ?PaymentMethod
{
@@ -43,8 +41,8 @@ trait ManagesPaymentMethods
/**
* Get default payment method from the current user.
*
* @see \Anikeen\Id\Resources\PaymentMethods::defaultPaymentMethod()
* @throws Throwable
* @see \Anikeen\Id\Resources\PaymentMethods::defaultPaymentMethod()
*/
public function defaultPaymentMethod(): ?PaymentMethod
{
@@ -54,8 +52,8 @@ trait ManagesPaymentMethods
/**
* Check if the current user has a default payment method.
*
* @see \Anikeen\Id\Resources\PaymentMethods::hasDefaultPaymentMethod()
* @throws Throwable
* @see \Anikeen\Id\Resources\PaymentMethods::hasDefaultPaymentMethod()
*/
public function hasDefaultPaymentMethod(): bool
{
@@ -71,10 +69,13 @@ trait ManagesPaymentMethods
*/
public function billingPortalUrl(?string $returnUrl = null, array $options = []): string
{
return $this->request('POST', 'v1/billing/portal', [
return $this->anikeenId()
->request('POST', 'v1/billing/portal', [
'return_url' => $returnUrl,
'options' => $options,
])->data->url;
])
->data
->url;
}
/**
@@ -85,7 +86,8 @@ trait ManagesPaymentMethods
*/
public function createSetupIntent(array $options = []): Result
{
return $this->request('POST', 'v1/payment-methods', [
return $this->anikeenId()
->request('POST', 'v1/payment-methods', [
'options' => $options,
]);
}

View File

@@ -3,7 +3,6 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Post;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Result;
use Throwable;

View File

@@ -2,14 +2,11 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Result;
use Throwable;
trait ManagesProfile
{
use Request;
use HasBillable;
/**
* Get the profile url for the current user.
@@ -21,7 +18,7 @@ trait ManagesProfile
*/
public function profilePortalUrl(?string $returnUrl = null, array $options = []): string
{
return $this->request('POST', 'v1/user/profile', [
return $this->anikeenId()->request('POST', 'v1/user/profile', [
'return_url' => $returnUrl,
'options' => $options,
])->data->url;

View File

@@ -4,7 +4,6 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Get;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\SshKeys;
use Throwable;

View File

@@ -2,14 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Subscriptions;
use Throwable;
trait ManagesSubscriptions
{
use Request;
use HasBillable;
/**
* Get subscriptions from the current user.
@@ -19,7 +17,8 @@ trait ManagesSubscriptions
public function subscriptions(): Subscriptions
{
if (!isset($this->subscriptionsCache)) {
$this->subscriptionsCache = Subscriptions::builder(fn() => $this->request('GET', 'v1/subscriptions'))
$this->subscriptionsCache = Subscriptions::builder(fn() => $this->anikeenId()
->request('GET', 'v1/subscriptions'))
->setBillable($this);
}

View File

@@ -2,13 +2,11 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Throwable;
trait ManagesTaxation
{
use Request;
use HasBillable;
/**
* Get VAT for the current user.

View File

@@ -2,15 +2,12 @@
namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Request;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Resources\Transactions;
use Anikeen\Id\Result;
use Throwable;
trait ManagesTransactions
{
use Request;
use HasBillable;
/**
* Get transactions from the current user.
@@ -20,7 +17,8 @@ trait ManagesTransactions
public function transactions(): Transactions
{
if (!isset($this->transactionsCache)) {
$this->transactionsCache = Transactions::builder(fn() => $this->request('GET', 'v1/transactions'))
$this->transactionsCache = Transactions::builder(fn() => $this->anikeenId()
->request('GET', 'v1/transactions'))
->setBillable($this);
}

View File

@@ -5,7 +5,6 @@ namespace Anikeen\Id\Concerns;
use Anikeen\Id\ApiOperations\Get;
use Anikeen\Id\ApiOperations\Post;
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
use Anikeen\Id\Result;
use Throwable;

View File

@@ -0,0 +1,12 @@
<?php
namespace Anikeen\Id\Contracts;
use Anikeen\Id\AnikeenId;
interface Billable
{
public function getUserData(): object;
public function anikeenId(): AnikeenId;
}

View File

@@ -9,7 +9,7 @@ use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
use stdClass;
abstract class CheckCredentials
abstract class CheckCredentials extends UseParameters
{
/**
* Handle an incoming request.

View File

@@ -8,7 +8,7 @@ use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CheckForAnyScope
class CheckForAnyScope extends UseParameters
{
/**
* Handle the incoming request.

View File

@@ -8,7 +8,7 @@ use Illuminate\Auth\AuthenticationException;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class CheckScopes
class CheckScopes extends UseParameters
{
/**
* Handle the incoming request.

View File

@@ -0,0 +1,20 @@
<?php
namespace Anikeen\Id\Http\Middleware;
abstract class UseParameters
{
/**
* Specify the parameters for the middleware.
*
* @param string[]|string $param
*/
public static function using(array|string $param, string ...$params): string
{
if (is_array($param)) {
return static::class . ':' . implode(',', $param);
}
return static::class . ':' . implode(',', [$param, ...$params]);
}
}

View File

@@ -23,9 +23,9 @@ trait OauthTrait
],
]);
$result = new Result($response, null);
$result = new Result($response, null, $this);
} catch (RequestException $exception) {
$result = new Result($exception->getResponse(), $exception);
$result = new Result($exception->getResponse(), $exception, $this);
}
$result->anikeenId = $this;

View File

@@ -65,7 +65,8 @@ class Address extends BaseResource
*/
public function update(array $attributes = []): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/addresses/%s', $this->id), $attributes)))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/addresses/%s', $this->id), $attributes)))
->setBillable($this->billable);
}
@@ -76,6 +77,7 @@ class Address extends BaseResource
*/
public function delete(): bool
{
return $this->billable->request('DELETE', sprintf('v1/addresses/%s', $this->id))->success();
return $this->billable->anikeenId()
->request('DELETE', sprintf('v1/addresses/%s', $this->id))->success();
}
}

View File

@@ -46,7 +46,8 @@ class Addresses extends BaseCollection
*/
public function create(array $attributes = []): Address
{
return (new Address(fn() => $this->billable->request('POST', 'v1/addresses', $attributes)))
return (new Address(fn() => $this->billable->anikeenId()
->request('POST', 'v1/addresses', $attributes)))
->setBillable($this->billable);
}
@@ -55,7 +56,8 @@ class Addresses extends BaseCollection
*/
public function find(string $id): ?Address
{
return (new Address(fn() => $this->billable->request('GET', sprintf('v1/addresses/%s', $id))))
return (new Address(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/addresses/%s', $id))))
->setBillable($this->billable);
}
@@ -66,7 +68,8 @@ class Addresses extends BaseCollection
*/
public function defaultBillingAddress(): Address
{
return (new Address(fn() => $this->billable->request('GET', sprintf('v1/addresses/%s', $this->billable->getUserData()->billing_address_id))))
return (new Address(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/addresses/%s', $this->billable->getUserData()->billing_address_id))))
->setBillable($this->billable);
}

View File

@@ -4,7 +4,6 @@ namespace Anikeen\Id\Resources;
use Anikeen\Id\AnikeenId;
use Anikeen\Id\Exceptions\CollectionException;
use Anikeen\Id\Exceptions\ResourceException;
use Anikeen\Id\Helpers\Paginator;
use Anikeen\Id\Result;
use Closure;

View File

@@ -19,6 +19,9 @@ class Invoice extends BaseResource
*/
public function getInvoiceTemporaryUrl(): string
{
return $this->billable->request('PUT', sprintf('v1/invoices/%s', $this->id))->data->temporary_url;
return $this->billable->anikeenId()
->request('PUT', sprintf('v1/invoices/%s', $this->id))
->data
->temporary_url;
}
}

View File

@@ -13,7 +13,8 @@ class Invoices extends BaseCollection
*/
public function find(string $id): ?Invoice
{
return (new Invoice(fn() => $this->billable->request('GET', sprintf('v1/invoices/%s', $id))))
return (new Invoice(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/invoices/%s', $id))))
->setBillable($this->billable);
}
}

View File

@@ -58,7 +58,8 @@ class Order extends BaseResource
*/
public function update(array $attributes = []): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/orders/%s', $this->id), $attributes)))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/orders/%s', $this->id), $attributes)))
->setBillable($this->billable);
}
@@ -69,7 +70,8 @@ class Order extends BaseResource
*/
public function checkout(): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/orders/%s/checkout', $this->id))))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/orders/%s/checkout', $this->id))))
->setBillable($this->billable);
}
@@ -80,7 +82,8 @@ class Order extends BaseResource
*/
public function revoke(): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/orders/%s/revoke', $this->id))))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/orders/%s/revoke', $this->id))))
->setBillable($this->billable);
}
@@ -91,7 +94,8 @@ class Order extends BaseResource
*/
public function delete(): bool
{
return $this->billable->request('DELETE', sprintf('v1/orders/%s', $this->id))->success();
return $this->billable->anikeenId()
->request('DELETE', sprintf('v1/orders/%s', $this->id))->success();
}
/**
@@ -101,7 +105,8 @@ class Order extends BaseResource
*/
public function orderItems(array $parameters = []): OrderItems
{
return OrderItems::builder(fn() => $this->billable->request('GET', sprintf('v1/orders/%s/items', $this->id), [], $parameters))
return OrderItems::builder(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/orders/%s/items', $this->id), [], $parameters))
->setBillable($this->billable)
->setParent($this);
}

View File

@@ -34,7 +34,8 @@ class OrderItem extends BaseResource
*/
public function update(array $attributes = []): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id), $attributes)))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id), $attributes)))
->setBillable($this->billable)
->setParent($this->parent);
}
@@ -46,6 +47,7 @@ class OrderItem extends BaseResource
*/
public function delete(): bool
{
return $this->billable->request('DELETE', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id))->success();
return $this->billable->anikeenId()
->request('DELETE', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id))->success();
}
}

View File

@@ -4,7 +4,6 @@ namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasBillable;
use Anikeen\Id\Concerns\HasParent;
use Anikeen\Id\Result;
use Throwable;
class OrderItems extends BaseCollection
@@ -33,7 +32,8 @@ class OrderItems extends BaseCollection
*/
public function create(string $orderId, array $attributes = []): OrderItem
{
return (new OrderItem(fn() => $this->billable->request('POST', sprintf('v1/orders/%s', $orderId), $attributes)))
return (new OrderItem(fn() => $this->billable->anikeenId()
->request('POST', sprintf('v1/orders/%s', $orderId), $attributes)))
->setBillable($this->billable)
->setParent($this->parent);
}
@@ -43,7 +43,8 @@ class OrderItems extends BaseCollection
*/
public function find(string $id): ?OrderItem
{
return (new OrderItem(fn() => $this->parent->request('GET', sprintf('v1/orders/%s/items/%s', $this->parent->id, $id))))
return (new OrderItem(fn() => $this->parent->anikeenId()
->request('GET', sprintf('v1/orders/%s/items/%s', $this->parent->id, $id))))
->setBillable($this->billable)
->setParent($this->parent);
}

View File

@@ -3,7 +3,6 @@
namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasBillable;
use Anikeen\Id\Result;
use Throwable;
class Orders extends BaseCollection
@@ -65,7 +64,8 @@ class Orders extends BaseCollection
*/
public function create(array $attributes = []): Order
{
return (new Order(fn() => $this->billable->request('POST', 'v1/orders', $attributes)))
return (new Order(fn() => $this->billable->anikeenId()
->request('POST', 'v1/orders', $attributes)))
->setBillable($this->billable);
}
@@ -76,7 +76,8 @@ class Orders extends BaseCollection
*/
public function find(string $id): ?Order
{
return (new Order(fn() => $this->billable->request('GET', sprintf('v1/orders/%s', $id))))
return (new Order(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/orders/%s', $id))))
->setBillable($this->billable);
}
}

View File

@@ -37,7 +37,8 @@ class PaymentMethods extends BaseCollection
public function defaultPaymentMethod(): PaymentMethod
{
if (!isset($this->defaultPaymentMethodCache)) {
$this->defaultPaymentMethodCache = (new PaymentMethod(fn() => $this->billable->request('GET', 'v1/payment-methods/default')))
$this->defaultPaymentMethodCache = (new PaymentMethod(fn() => $this->billable->anikeenId()
->request('GET', 'v1/payment-methods/default')))
->setBillable($this->billable);
}
@@ -46,10 +47,13 @@ class PaymentMethods extends BaseCollection
/**
* {@inheritDoc}
*
* @throws Throwable
*/
public function find(string $id): ?PaymentMethod
{
return (new PaymentMethod(fn() => $this->billable->request('GET', sprintf('v1/payment-methods/%s', $id))))
return (new PaymentMethod(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/payment-methods/%s', $id))))
->setBillable($this->billable);
}
}

View File

@@ -3,7 +3,6 @@
namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasParent;
use Anikeen\Id\Result;
use Throwable;
class SshKeys extends BaseCollection

View File

@@ -3,6 +3,7 @@
namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasBillable;
use Anikeen\Id\Contracts\AppTokenRepository;
use Throwable;
/**
@@ -50,7 +51,8 @@ class Subscription extends BaseResource
*/
public function update(array $attributes): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/subscriptions/%s', $this->id), $attributes)))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/subscriptions/%s', $this->id), $attributes)))
->setBillable($this->billable);
}
@@ -61,7 +63,8 @@ class Subscription extends BaseResource
*/
public function checkout(): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/subscriptions/%s/checkout', $this->id))))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/subscriptions/%s/checkout', $this->id))))
->setBillable($this->billable);
}
@@ -76,7 +79,8 @@ class Subscription extends BaseResource
'refund' => $refund,
];
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/subscriptions/%s/revoke', $this->id), $attributes)))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/subscriptions/%s/revoke', $this->id), $attributes)))
->setBillable($this->billable);
}
@@ -87,7 +91,8 @@ class Subscription extends BaseResource
*/
public function pause(): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/subscriptions/%s/pause', $this->id))))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/subscriptions/%s/pause', $this->id))))
->setBillable($this->billable);
}
@@ -98,17 +103,8 @@ class Subscription extends BaseResource
*/
public function resume(): self
{
return (new self(fn() => $this->billable->request('PUT', sprintf('v1/subscriptions/%s/resume', $this->id))))
return (new self(fn() => $this->billable->anikeenId()
->request('PUT', sprintf('v1/subscriptions/%s/resume', $this->id))))
->setBillable($this->billable);
}
/**
* Delete a given subscription from the current user.
*
* @throws Throwable
*/
public function delete(): bool
{
return $this->billable->request('DELETE', sprintf('v1/subscriptions/%s', $this->id))->success();
}
}

View File

@@ -3,6 +3,8 @@
namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasBillable;
use Anikeen\Id\Contracts\AppTokenRepository;
use Anikeen\Id\Exceptions\ResourceException;
use Throwable;
class Subscriptions extends BaseCollection
@@ -38,16 +40,20 @@ class Subscriptions extends BaseCollection
*/
public function create(array $attributes): Subscription
{
return (new Subscription(fn() => $this->billable->request('POST', 'v1/subscriptions', $attributes)))
return (new Subscription(fn() => $this->billable->anikeenId()
->request('POST', 'v1/subscriptions', $attributes)))
->setBillable($this->billable);
}
/**
* {@inheritDoc}
*
* @throws ResourceException
*/
public function find(string $id): ?Subscription
{
return (new Subscription(fn() => $this->billable->request('GET', sprintf('v1/subscriptions/%s', $id))))
return (new Subscription(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/subscriptions/%s', $id))))
->setBillable($this->billable);
}
}

View File

@@ -3,8 +3,6 @@
namespace Anikeen\Id\Resources;
use Anikeen\Id\Concerns\HasBillable;
use Anikeen\Id\Exceptions\ResourceException;
use Throwable;
class Transactions extends BaseCollection
{
@@ -15,7 +13,8 @@ class Transactions extends BaseCollection
*/
public function find(string $id): ?Transaction
{
return (new Transaction(fn() => $this->billable->request('GET', sprintf('v1/transactions/%s', $id))))
return (new Transaction(fn() => $this->billable->anikeenId()
->request('GET', sprintf('v1/transactions/%s', $id))))
->setBillable($this->billable);
}
}