Skip to content

Commit abff8aa

Browse files
committed
Add global Customer Settings to API (#181)
1 parent ff13855 commit abff8aa

File tree

8 files changed

+142
-0
lines changed

8 files changed

+142
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\Api\Customers;
4+
5+
use BigCommerce\ApiV3\Api\Generic\GetResource;
6+
use BigCommerce\ApiV3\Api\Generic\UpdateResource;
7+
use BigCommerce\ApiV3\Api\Generic\V3ApiBase;
8+
use BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings;
9+
use BigCommerce\ApiV3\ResponseModels\Customer\CustomerSettingsResponse;
10+
11+
class CustomerSettingsApi extends V3ApiBase
12+
{
13+
use GetResource;
14+
use UpdateResource;
15+
16+
public const CUSTOMER_SETTINGS_ENDPOINT = 'customers/settings';
17+
18+
public function get(): CustomerSettingsResponse
19+
{
20+
return new CustomerSettingsResponse($this->getResource());
21+
}
22+
23+
public function singleResourceUrl(): string
24+
{
25+
return self::CUSTOMER_SETTINGS_ENDPOINT;
26+
}
27+
28+
public function update(CustomerSettings $settings): CustomerSettingsResponse
29+
{
30+
return new CustomerSettingsResponse($this->updateResource($settings));
31+
}
32+
}

src/BigCommerce/Api/Customers/CustomersApi.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@ public function consent(): CustomerConsentApi
9393
return new CustomerConsentApi($this->getClient(), null, $this->getResourceId());
9494
}
9595

96+
public function settings(): CustomerSettingsApi
97+
{
98+
return new CustomerSettingsApi($this->getClient());
99+
}
100+
96101
public function subscriber(int $id): SubscribersApi
97102
{
98103
return new SubscribersApi($this->getClient(), $id, $this->getParentResourceId());
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResourceModels\Customer;
4+
5+
use BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings\CustomerGroupSettings;
6+
use BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings\PrivacySettings;
7+
use BigCommerce\ApiV3\ResourceModels\ResourceModel;
8+
9+
class CustomerSettings extends ResourceModel
10+
{
11+
public PrivacySettings $privacy_settings;
12+
public CustomerGroupSettings $customer_group_settings;
13+
14+
protected function beforeBuildObject(): void
15+
{
16+
$this->buildPropertyObject('privacy_settings', PrivacySettings::class);
17+
$this->buildPropertyObject('customer_group_settings', CustomerGroupSettings::class);
18+
19+
parent::beforeBuildObject();
20+
}
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings;
4+
5+
use BigCommerce\ApiV3\ResourceModels\ResourceModel;
6+
7+
class CustomerGroupSettings extends ResourceModel
8+
{
9+
public int $guest_customer_group_id;
10+
public int $default_customer_group_id;
11+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings;
4+
5+
use BigCommerce\ApiV3\ResourceModels\ResourceModel;
6+
7+
class PrivacySettings extends ResourceModel
8+
{
9+
/**
10+
* Determines if a customer requires consent for tracking privacy.
11+
*/
12+
public bool $ask_shopper_for_tracking_consent;
13+
14+
/**
15+
* The URL for a website's privacy policy.
16+
* Example: https://bigcommmerce.com/policy
17+
*/
18+
public string $policy_url;
19+
20+
public bool $ask_shopper_for_tracking_consent_on_checkout;
21+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace BigCommerce\ApiV3\ResponseModels\Customer;
4+
5+
use BigCommerce\ApiV3\ResourceModels\Customer\CustomerSettings;
6+
use BigCommerce\ApiV3\ResponseModels\SingleResourceResponse;
7+
use stdClass;
8+
9+
class CustomerSettingsResponse extends SingleResourceResponse
10+
{
11+
private CustomerSettings $customerSettings;
12+
13+
public function getCustomerSettings(): CustomerSettings
14+
{
15+
return $this->customerSettings;
16+
}
17+
18+
protected function addData(stdClass $rawData): void
19+
{
20+
$this->customerSettings = new CustomerSettings($rawData);
21+
}
22+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?php
2+
3+
namespace BigCommerce\Tests\Api\Customers;
4+
5+
use BigCommerce\Tests\BigCommerceApiTest;
6+
7+
class CustomerSettingsApiTest extends BigCommerceApiTest
8+
{
9+
public function testCanGetCustomerSettings()
10+
{
11+
$this->setReturnData('customers__settings__get.json');
12+
13+
$settings = $this->getApi()->customers()->settings()->get()->getCustomerSettings();
14+
15+
$this->assertEquals('https://bigcommmerce.com/policy', $settings->privacy_settings->policy_url);
16+
}
17+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
{
2+
"data": {
3+
"privacy_settings": {
4+
"ask_shopper_for_tracking_consent": false,
5+
"policy_url": "https://bigcommmerce.com/policy",
6+
"ask_shopper_for_tracking_consent_on_checkout": false
7+
},
8+
"customer_group_settings": {
9+
"guest_customer_group_id": 0,
10+
"default_customer_group_id": 0
11+
}
12+
}
13+
}

0 commit comments

Comments
 (0)