diff --git a/src/BigCommerce/ResourceModels/Redirect/Redirect.php b/src/BigCommerce/ResourceModels/Redirect/Redirect.php index 32859432..f9853f86 100644 --- a/src/BigCommerce/ResourceModels/Redirect/Redirect.php +++ b/src/BigCommerce/ResourceModels/Redirect/Redirect.php @@ -5,6 +5,25 @@ use BigCommerce\ApiV3\ResourceModels\ResourceModel; use stdClass; +/** + * Redirect Resource + * + * Represents the request object for redirect objects. + * + * Contains a convenience method for simply redirecting to a product or category + * + * ```php + * $api = new BigCommerce\ApiV3\Client($_ENV['hash'], $_ENV['CLIENT_ID'], $_ENV['ACCESS_TOKEN']); + * + * $productRedirect = new Redirect(); + * $productRedirect->site_id = 1000; + * $productRedirect->from_path = '/cool-product.html'; + * $productRedirect->toProduct(123); + * + * $api->redirects()->upsert([$productRedirect]); + * ``` + * + */ class Redirect extends ResourceModel { public string $from_path; @@ -20,4 +39,14 @@ public function __construct(?stdClass $optionObject = null) parent::__construct($optionObject); } + + public function toProduct(int $productId): void + { + $this->to = RedirectTo::buildRedirectTo(RedirectTo::TYPE__PRODUCT, $productId); + } + + public function toCategory(int $categoryId): void + { + $this->to = RedirectTo::buildRedirectTo(RedirectTo::TYPE__CATEGORY, $categoryId); + } } diff --git a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php index 62901728..efa19890 100644 --- a/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php +++ b/src/BigCommerce/ResourceModels/Redirect/RedirectTo.php @@ -15,5 +15,15 @@ class RedirectTo extends ResourceModel public string $type; public ?int $entity_id; - public string $url; + public ?string $url; + + public static function buildRedirectTo(string $type, ?int $entityId = null, ?string $url = null): RedirectTo + { + $redirectTo = new self(); + $redirectTo->type = $type; + $redirectTo->entity_id = $entityId; + $redirectTo->url = $url; + + return $redirectTo; + } } diff --git a/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php b/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php index c646d42c..13b03a6b 100644 --- a/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php +++ b/tests/BigCommerce/Api/Redirects/RedirectsApiTest.php @@ -14,10 +14,10 @@ public function testCanUpsertRedirects() $redirect = new Redirect(); $redirect->from_path = '/old-url'; $redirect->site_id = 0; - $redirect->to = new RedirectTo(); - $redirect->to->type = RedirectTo::TYPE__PRODUCT; - $redirect->to->entity_id = 0; - $redirect->to->url = '/new-url'; + $redirect->toProduct(1); + + $this->assertEquals(RedirectTo::TYPE__PRODUCT, $redirect->to->type); + $this->assertEquals(1, $redirect->to->entity_id); $this->getApi()->redirects()->upsert([$redirect]); $this->assertEquals('storefront/redirects', $this->getLastRequestPath());