mirror of
https://github.com/anikeen-com/id.git
synced 2026-03-15 22:56:13 +00:00
refactored code
Signed-off-by: Maurice Preuß (envoyr) <hello@envoyr.com>
This commit is contained in:
84
src/Id/Resources/Address.php
Normal file
84
src/Id/Resources/Address.php
Normal file
@@ -0,0 +1,84 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
* @property null|string $company_name
|
||||
* @property null|string $first_name
|
||||
* @property null|string $last_name
|
||||
* @property null|string $address_2
|
||||
* @property null|string $address
|
||||
* @property null|string $house_number
|
||||
* @property null|string $postal_code
|
||||
* @property null|string $city
|
||||
* @property null|string $state
|
||||
* @property string $country_iso
|
||||
* @property null|string $phone_number
|
||||
* @property null|string $email
|
||||
* @property bool $primary
|
||||
* @property bool $primary_billing_address
|
||||
*/
|
||||
class Address extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Update given address from the current user.
|
||||
*
|
||||
* VAT is calculated based on the billing address and shown in the address response.
|
||||
*
|
||||
* @param array{
|
||||
* company_name: null|string,
|
||||
* first_name: string,
|
||||
* last_name: string,
|
||||
* address_2: null|string,
|
||||
* address: string,
|
||||
* house_number: null|string,
|
||||
* postal_code: string,
|
||||
* city: string,
|
||||
* state: null|string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string,
|
||||
* primary: bool,
|
||||
* primary_billing_address: bool
|
||||
* } $attributes The address data:
|
||||
* - company_name: Company name (optional)
|
||||
* - first_name: First name (required when set)
|
||||
* - last_name: Last name (required when set)
|
||||
* - address: Address line 1 (e.g. street address, P.O. Box, etc.)
|
||||
* - address_2: Address line 2 (optional, e.g. apartment number, c/o, etc.)
|
||||
* - house_number: House number (optional)
|
||||
* - postal_code: Postal code (required when set)
|
||||
* - city: City (required when set)
|
||||
* - state: State (optional, e.g. province, region, etc.)
|
||||
* - country_iso: Country ISO code (required when set, e.g. US, CA, etc.)
|
||||
* - phone_number: Phone number (optional)
|
||||
* - email: Email address (optional, e.g. for delivery notifications)
|
||||
* - primary: Whether this address should be the primary address (optional)
|
||||
* - primary_billing_address: Whether this address should be the primary billing address (optional)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function update(array $attributes = []): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/addresses/%s', $this->id), $attributes)))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete given address from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function delete(): bool
|
||||
{
|
||||
return $this->billable->request('DELETE', sprintf('v1/addresses/%s', $this->id))->success();
|
||||
}
|
||||
}
|
||||
91
src/Id/Resources/Addresses.php
Normal file
91
src/Id/Resources/Addresses.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class Addresses extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Creates a new address for the current user.
|
||||
*
|
||||
* @param array{
|
||||
* company_name: null|string,
|
||||
* first_name: string,
|
||||
* last_name: string,
|
||||
* address: string,
|
||||
* address_2: null|string,
|
||||
* house_number: null|string,
|
||||
* postal_code: string,
|
||||
* city: string,
|
||||
* state: null|string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string,
|
||||
* primary: bool,
|
||||
* primary_billing_address: bool
|
||||
* } $attributes The address data:
|
||||
* - company_name: Company name (optional)
|
||||
* - first_name: First name
|
||||
* - last_name: Last name
|
||||
* - address: Address line 1 (e.g. street address, P.O. Box, etc.)
|
||||
* - address_2: Address line 2 (optional, e.g. apartment number, c/o, etc.)
|
||||
* - house_number: House number (optional)
|
||||
* - postal_code: Postal code
|
||||
* - city: City
|
||||
* - state: State (optional, e.g. province, region, etc.)
|
||||
* - country_iso: Country ISO code (e.g. US, CA, etc.)
|
||||
* - phone_number: Phone number (optional)
|
||||
* - email: Email address (optional, e.g. for delivery notifications)
|
||||
* - primary: Whether this address should be the primary address (optional)
|
||||
* - primary_billing_address: Whether this address should be the primary billing address (optional)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function create(array $attributes = []): Address
|
||||
{
|
||||
return (new Address($this->billable->request('POST', 'v1/addresses', $attributes)))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?Address
|
||||
{
|
||||
$result = $this->billable->request('GET', sprintf('v1/addresses/%s', $id));
|
||||
|
||||
return $result->success() ?
|
||||
(new Address($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default address from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function defaultBillingAddress(): Address
|
||||
{
|
||||
return (new Address($this->billable->request('GET', sprintf('v1/addresses/%s', $this->billable->getUserData()->billing_address_id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if the current user has a default billing address.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function hasDefaultBillingAddress(): bool
|
||||
{
|
||||
return $this->billable->getUserData()->billing_address_id !== null;
|
||||
}
|
||||
}
|
||||
51
src/Id/Resources/BaseCollection.php
Normal file
51
src/Id/Resources/BaseCollection.php
Normal file
@@ -0,0 +1,51 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use JsonSerializable;
|
||||
|
||||
abstract class BaseCollection implements JsonSerializable
|
||||
{
|
||||
public function __construct(protected Result $result)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of resources as an array.
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return (array) $this->result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of resources as a JSON string.
|
||||
*/
|
||||
public function jsonSerialize(): array
|
||||
{
|
||||
return $this->toArray();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of resources.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function get(): Result
|
||||
{
|
||||
return $this->result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the Resource based on the ID.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
abstract public function find(string $id): ?BaseResource;
|
||||
}
|
||||
33
src/Id/Resources/BaseResource.php
Normal file
33
src/Id/Resources/BaseResource.php
Normal file
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\MagicProperties;
|
||||
use Anikeen\Id\Result;
|
||||
use JsonSerializable;
|
||||
|
||||
abstract class BaseResource implements JsonSerializable
|
||||
{
|
||||
use MagicProperties;
|
||||
|
||||
public function __construct(protected Result $result)
|
||||
{
|
||||
$this->setMagicProperties($this->result->data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of resources as an array.
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return (array) $this->result->data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the collection of resources as a JSON string.
|
||||
*/
|
||||
public function jsonSerialize(): array
|
||||
{
|
||||
return $this->toArray();
|
||||
}
|
||||
}
|
||||
18
src/Id/Resources/Countries.php
Normal file
18
src/Id/Resources/Countries.php
Normal file
@@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
|
||||
class Countries extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?BaseResource
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
26
src/Id/Resources/Invoice.php
Normal file
26
src/Id/Resources/Invoice.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
*/
|
||||
class Invoice extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Get temporary download url from given invoice.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function getInvoiceTemporaryUrl(): string
|
||||
{
|
||||
return $this->billable->request('PUT', sprintf('v1/invoices/%s', $this->id))->data->temporary_url;
|
||||
}
|
||||
}
|
||||
26
src/Id/Resources/Invoices.php
Normal file
26
src/Id/Resources/Invoices.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class Invoices extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?Invoice
|
||||
{
|
||||
$result = $this->billable->request('GET', sprintf('v1/invoices/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new Invoice($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
115
src/Id/Resources/Order.php
Normal file
115
src/Id/Resources/Order.php
Normal file
@@ -0,0 +1,115 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
*/
|
||||
class Order extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Update given order from the current user.
|
||||
*
|
||||
* VAT is calculated based on the billing address and shown in the order response.
|
||||
*
|
||||
* The billing and shipping addresses are each persisted as standalone Address entities
|
||||
* in the database, but are also embedded (deep-copied) into the Order object itself
|
||||
* rather than merely referenced. This guarantees that the order retains its own snapshot
|
||||
* of both addresses for future reference.
|
||||
*
|
||||
* @param array{
|
||||
* billing_address: array{
|
||||
* company_name: null|string,
|
||||
* first_name: null|string,
|
||||
* last_name: null|string,
|
||||
* address: null|string,
|
||||
* address_2: null|string,
|
||||
* house_number: null|string,
|
||||
* city: null|string,
|
||||
* state: null|string,
|
||||
* postal_code: null|string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string
|
||||
* },
|
||||
* shipping_address: null|array{
|
||||
* company_name: null|string,
|
||||
* first_name: string,
|
||||
* last_name: string,
|
||||
* address: null|string,
|
||||
* address_2: string,
|
||||
* house_number: null|string,
|
||||
* city: string,
|
||||
* state: string,
|
||||
* postal_code: string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string
|
||||
* }
|
||||
* } $attributes The order data:
|
||||
* - billing_address: Billing address (ISO 3166-1 alpha-2 country code)
|
||||
* - shipping_address: Shipping address (first name, last name, ISO 3166-1 alpha-2 country code)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function update(array $attributes = []): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/orders/%s', $this->id), $attributes)))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checkout given order from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function checkout(string $orderId): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/orders/%s/checkout', $this->id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Revoke given order from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function revoke(string $orderId): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/orders/%s/revoke', $this->id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete given order from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function delete(): bool
|
||||
{
|
||||
return $this->billable->request('DELETE', sprintf('v1/orders/%s', $this->id))->success();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get order items from given order.
|
||||
*
|
||||
* @param string $orderId The order ID.
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function orderItems(string $orderId): OrderItems
|
||||
{
|
||||
return (new OrderItems($this->billable->request('GET', sprintf('v1/orders/%s/items', $this->id))))
|
||||
->setBillable($this->billable)
|
||||
->setParent($this);
|
||||
}
|
||||
}
|
||||
54
src/Id/Resources/OrderItem.php
Normal file
54
src/Id/Resources/OrderItem.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Concerns\HasParent;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
*/
|
||||
class OrderItem extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
use HasParent;
|
||||
|
||||
/**
|
||||
* Update given order item from given order.
|
||||
*
|
||||
* VAT is calculated based on the billing address and shown in the order item response.
|
||||
*
|
||||
* @param array{
|
||||
* items: array<array{
|
||||
* type: string,
|
||||
* name: string,
|
||||
* description: string,
|
||||
* price: float|int,
|
||||
* unit: string,
|
||||
* units: int
|
||||
* }>
|
||||
* } $attributes The order data:
|
||||
* - items: Array of order items, each with type, name, description, price, unit, and quantity
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function update(array $attributes = []): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id), $attributes)))
|
||||
->setBillable($this->billable)
|
||||
->setParent($this->parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete given order item from given order.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function delete(): bool
|
||||
{
|
||||
return $this->billable->request('DELETE', sprintf('v1/orders/%s/items/%s', $this->parent->id, $this->id))->success();
|
||||
}
|
||||
}
|
||||
57
src/Id/Resources/OrderItems.php
Normal file
57
src/Id/Resources/OrderItems.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Concerns\HasParent;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class OrderItems extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
use HasParent;
|
||||
|
||||
/**
|
||||
* Create a new order item for given order.
|
||||
*
|
||||
* VAT is calculated based on the billing address and shown in the order item response.
|
||||
*
|
||||
* @param string $orderId The order ID.
|
||||
* @param array{
|
||||
* items: array<array{
|
||||
* type: string,
|
||||
* name: string,
|
||||
* description: string,
|
||||
* price: float|int,
|
||||
* unit: string,
|
||||
* units: int
|
||||
* }>
|
||||
* } $attributes The order data:
|
||||
* - items: Array of order items, each with type, name, description, price, unit, and quantity
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function create(string $orderId, array $attributes = []): OrderItem
|
||||
{
|
||||
return (new OrderItem($this->billable->request('POST', sprintf('v1/orders/%s', $orderId), $attributes)))
|
||||
->setBillable($this->billable)
|
||||
->setParent($this->parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?OrderItem
|
||||
{
|
||||
/** @var Result $result */
|
||||
$result = $this->parent->request('GET', sprintf('v1/orders/%s/items/%s', $this->parent->id, $id));
|
||||
|
||||
return $result->success() ?
|
||||
(new OrderItem($result))
|
||||
->setBillable($this->billable)
|
||||
->setParent($this->parent)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
90
src/Id/Resources/Orders.php
Normal file
90
src/Id/Resources/Orders.php
Normal file
@@ -0,0 +1,90 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class Orders extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Creates a new order for the current user.
|
||||
*
|
||||
* VAT is calculated based on the billing address and shown in the order response.
|
||||
*
|
||||
* The billing and shipping addresses are each persisted as standalone Address entities
|
||||
* in the database, but are also embedded (deep-copied) into the Order object itself
|
||||
* rather than merely referenced. This guarantees that the order retains its own snapshot
|
||||
* of both addresses for future reference.
|
||||
*
|
||||
* @param array{
|
||||
* billing_address: array{
|
||||
* company_name: null|string,
|
||||
* first_name: null|string,
|
||||
* last_name: null|string,
|
||||
* address: null|string,
|
||||
* address_2: null|string,
|
||||
* house_number: null|string,
|
||||
* city: null|string,
|
||||
* state: null|string,
|
||||
* postal_code: null|string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string
|
||||
* },
|
||||
* shipping_address: null|array{
|
||||
* company_name: null|string,
|
||||
* first_name: string,
|
||||
* last_name: string,
|
||||
* address: null|string,
|
||||
* address_2: string,
|
||||
* house_number: null|string,
|
||||
* city: string,
|
||||
* state: string,
|
||||
* postal_code: string,
|
||||
* country_iso: string,
|
||||
* phone_number: null|string,
|
||||
* email: null|string
|
||||
* },
|
||||
* items: array<array{
|
||||
* type: string,
|
||||
* name: string,
|
||||
* description: string,
|
||||
* price: float|int,
|
||||
* unit: string,
|
||||
* units: int
|
||||
* }>
|
||||
* } $attributes The order data:
|
||||
* - billing_address: Billing address (ISO 3166-1 alpha-2 country code)
|
||||
* - shipping_address: Shipping address (first name, last name, ISO 3166-1 alpha-2 country code)
|
||||
* - items: Array of order items (each with type, name, price, unit, units, and quantity)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function create(array $attributes = []): Order
|
||||
{
|
||||
return (new Order($this->billable->request('POST', 'v1/orders', $attributes)))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get given order from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function find(string $id): ?Order
|
||||
{
|
||||
/** @var Result $result */
|
||||
$result = $this->billable->request('GET', sprintf('v1/orders/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new Order($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
10
src/Id/Resources/PaymentMethod.php
Normal file
10
src/Id/Resources/PaymentMethod.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
|
||||
class PaymentMethod extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
}
|
||||
49
src/Id/Resources/PaymentMethods.php
Normal file
49
src/Id/Resources/PaymentMethods.php
Normal file
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class PaymentMethods extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Check if current user has at least one payment method.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function hasPaymentMethod(): bool
|
||||
{
|
||||
return $this->result->count() > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get default payment method from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function defaultPaymentMethod(): PaymentMethod
|
||||
{
|
||||
return (new PaymentMethod($this->billable->request('GET', 'v1/payment-methods/default')))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?PaymentMethod
|
||||
{
|
||||
$result = $this->billable->request('GET', sprintf('v1/payment-methods/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new PaymentMethod($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
26
src/Id/Resources/SshKey.php
Normal file
26
src/Id/Resources/SshKey.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasParent;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
*/
|
||||
class SshKey extends BaseResource
|
||||
{
|
||||
use HasParent;
|
||||
|
||||
/**
|
||||
* Deletes a given ssh key for the currently authed user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function delete(): bool
|
||||
{
|
||||
return $this->parent->delete(sprintf('v1/ssh-keys/%s', $this->id))->success();
|
||||
}
|
||||
}
|
||||
43
src/Id/Resources/SshKeys.php
Normal file
43
src/Id/Resources/SshKeys.php
Normal file
@@ -0,0 +1,43 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasParent;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class SshKeys extends BaseCollection
|
||||
{
|
||||
use HasParent;
|
||||
|
||||
/**
|
||||
* Creates ssh key for the currently authed user.
|
||||
*
|
||||
* @param string $publicKey The public key to be added
|
||||
* @param string|null $name The name of the key (optional)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function create(string $publicKey, ?string $name = null): SshKey
|
||||
{
|
||||
return (new SshKey($this->parent->post('v1/ssh-keys', [
|
||||
'public_key' => $publicKey,
|
||||
'name' => $name,
|
||||
])))->setParent($this->parent);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?SshKey
|
||||
{
|
||||
/** @var Result $result */
|
||||
$result = $this->parent->get(sprintf('v1/ssh-keys/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new SshKey($result))
|
||||
->setParent($this->parent)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
62
src/Id/Resources/Subscription.php
Normal file
62
src/Id/Resources/Subscription.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
/**
|
||||
* @property string $id
|
||||
*/
|
||||
class Subscription extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Force given subscription to check out (trusted apps only).
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function checkout(): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/subscriptions/%s/checkout', $this->id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Revoke a given running subscription from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function revoke(): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/subscriptions/%s/revoke', $this->id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resume a given running subscription from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function resume(): self
|
||||
{
|
||||
return (new self($this->billable->request('PUT', sprintf('v1/subscriptions/%s/resume', $this->id))))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a given subscription from the current user.
|
||||
*
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function delete(): bool
|
||||
{
|
||||
return $this->billable->request('DELETE', sprintf('v1/subscriptions/%s', $this->id))->success();
|
||||
}
|
||||
}
|
||||
58
src/Id/Resources/Subscriptions.php
Normal file
58
src/Id/Resources/Subscriptions.php
Normal file
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class Subscriptions extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Create a new subscription for the current user.
|
||||
*
|
||||
* @param array{
|
||||
* name: null,
|
||||
* description: string,
|
||||
* unit: string,
|
||||
* price: float,
|
||||
* vat: null|float,
|
||||
* payload: null|array,
|
||||
* ends_at: null|string,
|
||||
* webhook_url: null|string,
|
||||
* webhook_secret: null|string
|
||||
* } $attributes The subscription data:
|
||||
* - name: The name
|
||||
* - description: The description
|
||||
* - unit: The unit (e.g. "hour", "day", "week", "month", "year")
|
||||
* - price: The price per unit
|
||||
* - vat: The VAT (optional)
|
||||
* - payload: The payload (optional)
|
||||
* - ends_at: The end date (optional)
|
||||
* - webhook_url: The webhook URL (optional)
|
||||
* - webhook_secret: The webhook secret (optional)
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
*/
|
||||
public function create(array $attributes): Subscription
|
||||
{
|
||||
return (new Subscription($this->billable->request('POST', 'v1/subscriptions', $attributes)))
|
||||
->setBillable($this->billable);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?Subscription
|
||||
{
|
||||
$result = $this->billable->request('GET', sprintf('v1/subscriptions/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new Subscription($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
10
src/Id/Resources/Transaction.php
Normal file
10
src/Id/Resources/Transaction.php
Normal file
@@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
|
||||
class Transaction extends BaseResource
|
||||
{
|
||||
use HasBillable;
|
||||
}
|
||||
39
src/Id/Resources/Transactions.php
Normal file
39
src/Id/Resources/Transactions.php
Normal file
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
namespace Anikeen\Id\Resources;
|
||||
|
||||
use Anikeen\Id\Concerns\HasBillable;
|
||||
use Anikeen\Id\Exceptions\RequestRequiresClientIdException;
|
||||
use Anikeen\Id\Result;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
|
||||
class Transactions extends BaseCollection
|
||||
{
|
||||
use HasBillable;
|
||||
|
||||
/**
|
||||
* Create a new transaction for the current user.
|
||||
*
|
||||
* @param array $attributes The attributes for the transaction.
|
||||
* @throws RequestRequiresClientIdException
|
||||
* @throws GuzzleException
|
||||
* @todo Add type hinting for the attributes array.
|
||||
*/
|
||||
public function create(array $attributes = []): Transaction
|
||||
{
|
||||
return new Transaction($this->billable->request('POST', 'v1/transactions', $attributes));
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
public function find(string $id): ?Transaction
|
||||
{
|
||||
$result = $this->billable->request('GET', sprintf('v1/transactions/%s', $id));
|
||||
|
||||
return $result->success()
|
||||
? (new Transaction($result))
|
||||
->setBillable($this->billable)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user