diff --git a/README.md b/README.md index 11e648b..4a22d18 100644 --- a/README.md +++ b/README.md @@ -244,7 +244,23 @@ ChartMogul\Customer::connectSubscriptions("cus_5915ee5a-babd-406b-b8ce-d207133fb ]); ``` -OR +OR (Recommended) + +```php +use ChartMogul\Metrics\Customers\Subscription; + +// Fetch customer subscriptions +$subscriptions = $customer->subscriptions(); + +// Connect subscriptions +Subscription::connect( + "ds_ade45e52-47a4-231a-1ed2-eb6b9e541213", // data source UUID + "cus_5915ee5a-babd-406b-b8ce-d207133fb4cb", // customer UUID + $subscriptions->entries // array of Subscription objects +); +``` + +OR (Deprecated) ```php $subscription1->connect("cus_5915ee5a-babd-406b-b8ce-d207133fb4cb", $subscriptions); @@ -268,7 +284,23 @@ ChartMogul\Customer::disconnectSubscriptions("cus_5915ee5a-babd-406b-b8ce-d20713 ]); ``` -OR +OR (Recommended) + +```php +use ChartMogul\Metrics\Customers\Subscription; + +// Fetch customer subscriptions +$subscriptions = $customer->subscriptions(); + +// Disconnect subscriptions +Subscription::disconnect( + "ds_ade45e52-47a4-231a-1ed2-eb6b9e541213", // data source UUID + "cus_5915ee5a-babd-406b-b8ce-d207133fb4cb", // customer UUID + $subscriptions->entries // array of Subscription objects +); +``` + +OR (Deprecated) ```php $subscription1->disconnect("cus_5915ee5a-babd-406b-b8ce-d207133fb4cb", $subscriptions); @@ -912,6 +944,8 @@ The same can be done with Payment class. $subscriptions = $cus->subscriptions(); ``` +**Note:** The following methods are deprecated. Use `ChartMogul\Metrics\Customers\Subscription::connect()` and `ChartMogul\Metrics\Customers\Subscription::disconnect()` instead. See the Connect/Disconnect Subscriptions section above for recommended usage. + **Cancel Customer Subscriptions** ```php diff --git a/src/Metrics/Customers/Subscription.php b/src/Metrics/Customers/Subscription.php index affe3e7..f002a63 100644 --- a/src/Metrics/Customers/Subscription.php +++ b/src/Metrics/Customers/Subscription.php @@ -7,6 +7,7 @@ /** * @property-read string $id; + * @property-read string $uuid; * @property-read string $plan; * @property-read string $quantity; * @property-read string $mrr; @@ -22,6 +23,7 @@ class Subscription extends AbstractModel { protected $id; + protected $uuid; protected $external_id; protected $plan; protected $quantity; @@ -46,4 +48,71 @@ public static function all(array $options = [], ?ClientInterface $client = null) { return Subscriptions::all($options, $client); } + + /** + * Connect Subscriptions + * + * @param string $dataSourceUUID Data Source UUID + * @param string $customerUUID Customer UUID + * @param array|\ChartMogul\Resource\Collection|\Traversable $subscriptions Array or Collection of subscriptions to connect + * @param ClientInterface|null $client + * @return bool + */ + public static function connect($dataSourceUUID, $customerUUID, $subscriptions, ?ClientInterface $client = null) + { + $clientObj = $client ?? new \ChartMogul\Http\Client(); + + $arr = self::getSubscriptionsForConnectDisconnect($dataSourceUUID, $subscriptions); + + $clientObj->send( + '/v1/customers/' . $customerUUID . '/connect_subscriptions', + 'POST', + ['subscriptions' => $arr] + ); + + return true; + } + + /** + * Disconnect Subscriptions + * + * @param string $dataSourceUUID Data Source UUID + * @param string $customerUUID Customer UUID + * @param array|\ChartMogul\Resource\Collection|\Traversable $subscriptions Array or Collection of subscriptions to disconnect + * @param ClientInterface|null $client + * @return bool + */ + public static function disconnect($dataSourceUUID, $customerUUID, $subscriptions, ?ClientInterface $client = null) + { + $clientObj = $client ?? new \ChartMogul\Http\Client(); + + $arr = self::getSubscriptionsForConnectDisconnect($dataSourceUUID, $subscriptions); + + $clientObj->send( + '/v1/customers/' . $customerUUID . '/disconnect_subscriptions', + 'POST', + ['subscriptions' => $arr] + ); + + return true; + } + + /** + * Prepare subscriptions array for API request + * + * @param string $dataSourceUUID Data Source UUID + * @param array|\ChartMogul\Resource\Collection|\Traversable $subscriptions Subscriptions to prepare + * @return array + */ + private static function getSubscriptionsForConnectDisconnect($dataSourceUUID, $subscriptions) + { + $arr = []; + foreach ($subscriptions as $subscription) { + $arr[] = [ + 'data_source_uuid' => $dataSourceUUID, + 'uuid' => $subscription->uuid + ]; + } + return $arr; + } } diff --git a/src/Subscription.php b/src/Subscription.php index 09e9c4d..1b81a53 100644 --- a/src/Subscription.php +++ b/src/Subscription.php @@ -20,7 +20,9 @@ class Subscription extends AbstractResource { use CreateTrait; - use AllTrait; + use AllTrait { + AllTrait::all as private traitAll; + } /** * @ignore @@ -43,6 +45,22 @@ class Subscription extends AbstractResource protected $data_source_uuid; protected $customer_uuid; + /** + * Returns a list of objects + * + * @param array $data + * @param ClientInterface|null $client + * @return Collection|self[]|self + * @deprecated Use Customer->subscriptions() instead + */ + public static function all(array $data = [], ?ClientInterface $client = null) + { + @trigger_error( + 'Subscription::all() is deprecated. Use Customer->subscriptions() instead.', + E_USER_DEPRECATED + ); + return self::traitAll($data, $client); + } private function cancellation($payload) @@ -108,9 +126,15 @@ public static function fromArray(array $data, ?ClientInterface $client = null) * @param string $customerUUID Customer UUID * @param Subscription[] $subscriptions Array of Subscription to connect this subscription with * @return bool + * @deprecated Use \ChartMogul\Metrics\Customers\Subscription::connect() instead */ public function connect($customerUUID, array $subscriptions) { + @trigger_error( + 'Subscription->connect() is deprecated. Use \ChartMogul\Metrics\Customers\Subscription::connect() instead.', + E_USER_DEPRECATED + ); + $arr = []; for ($i = 0; $i < count($subscriptions); $i++) { $arr[$i] = $subscriptions[$i]; @@ -138,9 +162,15 @@ public function connect($customerUUID, array $subscriptions) * @param string $customerUUID Customer UUID * @param Subscription[] $subscriptions Array of Subscription to disconnect this subscription from * @return bool + * @deprecated Use \ChartMogul\Metrics\Customers\Subscription::disconnect() instead */ public function disconnect($customerUUID, array $subscriptions) { + @trigger_error( + 'Subscription->disconnect() is deprecated. Use \ChartMogul\Metrics\Customers\Subscription::disconnect() instead.', + E_USER_DEPRECATED + ); + $arr = []; for ($i = 0; $i < count($subscriptions); $i++) { $arr[$i] = $subscriptions[$i];