diff --git a/src/Infratracture/Repository/AccountBalanceRepo.php b/src/Infratracture/Repository/AccountBalanceRepo.php index e3c09e4..76d446a 100644 --- a/src/Infratracture/Repository/AccountBalanceRepo.php +++ b/src/Infratracture/Repository/AccountBalanceRepo.php @@ -13,21 +13,20 @@ namespace Singularity\HDK\Pay\Infratracture\Repository; use GuzzleHttp\RequestOptions; use Hyperf\Codec\Json; -use Lmc\HttpConstants\Header; use Singularity\HDK\Core\Http\RequestService; use Singularity\HDK\Core\Http\RequestServiceFactory; -use Singularity\HDK\Core\I18n\Enum\Languages; use Singularity\HDK\Pay\Domain\Account\Aggregate\AccountBalance; use Singularity\HDK\Pay\Domain\Account\Aggregate\ValueObject\PointsBalance; use Singularity\HDK\Pay\Domain\Account\Enum\PointType; use Singularity\HDK\Pay\Domain\Account\Repository\AccountRepoInterface; -use Singularity\HDK\Pay\Enum\Environment; -use Singularity\HDK\Pay\Enum\Site; +use Singularity\HDK\Pay\Trait\RequestHeaderBuilder; use function Hyperf\Config\config; final class AccountBalanceRepo implements AccountRepoInterface { + use RequestHeaderBuilder; + private RequestService $requestService; public function __construct(?string $baseUrl = null) @@ -43,22 +42,10 @@ final class AccountBalanceRepo implements AccountRepoInterface $response = $this->requestService->requestGet( url: "/rpc/v2/account/$uid/balance", params: [ - 'type' => join(',', PointType::values()) + 'type' => join(',', PointType::values()), ], options: [ - 'headers' => [ - Header::CONTENT_TYPE => 'application/json', - Header::ACCEPT_LANGUAGE => $locale?->value ?? config('translation.locale', Languages::EN->value), - 'X-SP-ID' => config('app_name'), - 'X-SITE' => (match (strtoupper(config('site', Site::NorthAmerica->value))) { - 'CN' => Site::ChinaMainland, - default => Site::NorthAmerica, - })->value, - 'X-ENV' => (match (strtolower(config('app_env', Environment::Dev->value))) { - 'prod', 'production' => Environment::Prod, - default => Environment::Dev, - })->value, - ], + 'headers' => $this->headerBuilder(), ], ); @@ -87,19 +74,7 @@ final class AccountBalanceRepo implements AccountRepoInterface $response = $this->requestService->requestGet( url: "/rpc/v2/account/$uid/balance/$pointType->value", options: [ - 'headers' => [ - Header::CONTENT_TYPE => 'application/json', - Header::ACCEPT_LANGUAGE => $locale?->value ?? config('translation.locale', Languages::EN), - 'X-SP-ID' => config('app_name'), - 'X-SITE' => match (strtoupper(config('site', Site::NorthAmerica))) { - 'CN' => Site::ChinaMainland, - default => Site::NorthAmerica, - }, - 'X-ENV' => match (strtolower(config('app_env', Environment::Dev))) { - 'prod', 'production' => Environment::Prod, - default => Environment::Dev, - }, - ], + 'headers' => $this->headerBuilder(), ], ); diff --git a/src/Trait/RequestHeaderBuilder.php b/src/Trait/RequestHeaderBuilder.php new file mode 100644 index 0000000..38269e7 --- /dev/null +++ b/src/Trait/RequestHeaderBuilder.php @@ -0,0 +1,36 @@ + + * Powered by PhpStorm + * Created on 2025/8/18 + */ + +namespace Singularity\HDK\Pay\Trait; + +use Lmc\HttpConstants\Header; +use Singularity\HDK\Core\I18n\Enum\Languages; +use Singularity\HDK\Pay\Enum\Environment; +use Singularity\HDK\Pay\Enum\Site; + +use function Hyperf\Config\config; + +trait RequestHeaderBuilder { + public function headerBuilder(): array + { + return [ + Header::CONTENT_TYPE => 'application/json', + Header::ACCEPT_LANGUAGE => $locale?->value ?? config('translation.locale', Languages::EN->value), + 'X-SP-ID' => config('app_name'), + 'X-SITE' => (match (strtoupper(config('site', Site::NorthAmerica->value))) { + 'CN' => Site::ChinaMainland, + default => Site::NorthAmerica, + })->value, + 'X-ENV' => (match (strtolower(config('app_env', Environment::Dev->value))) { + 'prod', 'production' => Environment::Prod, + default => Environment::Dev, + })->value, + ]; + } +} \ No newline at end of file diff --git a/tests/Feature/Account/QueryPointBalanceTest.php b/tests/Feature/Account/QueryPointBalanceTest.php new file mode 100644 index 0000000..b3bb6c2 --- /dev/null +++ b/tests/Feature/Account/QueryPointBalanceTest.php @@ -0,0 +1,24 @@ + + * Powered by PhpStorm + * Created on 2025/8/18 + */ + +use Singularity\HDK\Pay\Domain\Account\Aggregate\ValueObject\PointsBalance; +use Singularity\HDK\Pay\Domain\Account\Enum\PointType; +use Singularity\HDK\Pay\Infratracture\Repository\AccountBalanceRepo; + +use function Hyperf\Support\make; + +it('should query point balance', function () { + $uid = 'cn3221'; + $repo = make(AccountBalanceRepo::class); + $point_balance = $repo->getPointBalance($uid, PointType::EMA); + expect($point_balance) + ->toBeInstanceOf(PointsBalance::class) + ->and($point_balance->getType())->toBe(PointType::EMA); +})->only();