mirror of
http://124.126.16.154:8888/singularity/hdk-pay.git
synced 2026-01-15 05:35:08 +08:00
refactor(pay): 重构账户余额查询接口并添加单元测试
- 创建 RequestHeaderBuilder Trait 以简化请求头构建逻辑 - 在 AccountBalanceRepo 中使用 RequestHeaderBuilder Trait - 添加 QueryPointBalanceTest 单元测试用例
This commit is contained in:
@@ -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(),
|
||||
],
|
||||
);
|
||||
|
||||
|
||||
36
src/Trait/RequestHeaderBuilder.php
Normal file
36
src/Trait/RequestHeaderBuilder.php
Normal file
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
/**
|
||||
* RequestHeaderBuilder.php@Pay
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* 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,
|
||||
];
|
||||
}
|
||||
}
|
||||
24
tests/Feature/Account/QueryPointBalanceTest.php
Normal file
24
tests/Feature/Account/QueryPointBalanceTest.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* QueryPointBalanceTest.php@Pay
|
||||
*
|
||||
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
||||
* 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();
|
||||
Reference in New Issue
Block a user