2025-08-18 09:49:21 +08:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
/**
|
2025-11-28 18:25:52 +08:00
|
|
|
* AccountRepo.php@Pay
|
2025-08-18 09:49:21 +08:00
|
|
|
*
|
|
|
|
|
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
|
|
|
|
|
* Powered by PhpStorm
|
|
|
|
|
* Created on 2025/8/17
|
|
|
|
|
*/
|
2025-11-28 18:25:52 +08:00
|
|
|
|
2025-08-18 09:49:21 +08:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
|
2025-08-18 14:41:06 +08:00
|
|
|
namespace Singularity\HDK\Pay\Infrastructure\Repository;
|
2025-08-18 09:49:21 +08:00
|
|
|
|
2025-09-02 10:24:48 +08:00
|
|
|
use Carbon\Carbon;
|
2025-08-18 09:49:21 +08:00
|
|
|
use Hyperf\Codec\Json;
|
2025-09-17 20:03:45 +08:00
|
|
|
use Singularity\HDK\Pay\Application\Command\InitialAccountCmd;
|
2025-08-27 11:06:52 +08:00
|
|
|
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\AccountBalance;
|
|
|
|
|
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\PointsBalance;
|
2025-08-18 09:49:21 +08:00
|
|
|
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
|
|
|
|
|
use Singularity\HDK\Pay\Domain\Account\Repository\AccountRepoInterface;
|
2025-11-28 18:25:52 +08:00
|
|
|
use Singularity\HDK\Pay\Domain\Account\ValueObject\Email;
|
2025-08-18 09:49:21 +08:00
|
|
|
|
2025-11-28 18:25:52 +08:00
|
|
|
final class AccountRepo extends AbstractRepo implements AccountRepoInterface
|
2025-08-18 09:49:21 +08:00
|
|
|
{
|
|
|
|
|
public function getAccount(string $uid): AccountBalance
|
|
|
|
|
{
|
|
|
|
|
$response = $this->requestService->requestGet(
|
|
|
|
|
url: "/rpc/v2/account/$uid/balance",
|
2025-08-18 14:08:30 +08:00
|
|
|
params: [
|
2025-08-18 14:23:14 +08:00
|
|
|
'type' => join(',', PointType::values()),
|
2025-08-18 14:08:30 +08:00
|
|
|
],
|
2025-08-18 09:49:21 +08:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$content = $response->getBody()->getContents();
|
|
|
|
|
$result = Json::decode($content);
|
|
|
|
|
|
|
|
|
|
return new AccountBalance(
|
|
|
|
|
uid: $result['uid'],
|
|
|
|
|
pointsBalances: array_map(
|
|
|
|
|
callback: fn($pointBalance)
|
2025-11-28 18:25:52 +08:00
|
|
|
=> new PointsBalance(
|
2025-08-18 09:49:21 +08:00
|
|
|
type: PointType::from($pointBalance['name']),
|
|
|
|
|
total: $pointBalance['total'],
|
|
|
|
|
cost: $pointBalance['cost'],
|
|
|
|
|
amount: $pointBalance['amount'],
|
|
|
|
|
version: $pointBalance['version'],
|
2025-11-28 18:25:52 +08:00
|
|
|
expiredAt: isset($pointBalance['expired_at']) ? new Carbon($pointBalance['expired_at']) : null,
|
2025-08-18 09:49:21 +08:00
|
|
|
),
|
|
|
|
|
array: $result['point_balance'],
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function getPointBalance(string $uid, PointType $pointType): PointsBalance
|
|
|
|
|
{
|
|
|
|
|
$response = $this->requestService->requestGet(
|
|
|
|
|
url: "/rpc/v2/account/$uid/balance/$pointType->value",
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$content = $response->getBody()->getContents();
|
|
|
|
|
$result = Json::decode($content);
|
|
|
|
|
|
|
|
|
|
return new PointsBalance(
|
|
|
|
|
type: PointType::from($result['name']),
|
|
|
|
|
total: $result['total'],
|
|
|
|
|
cost: $result['cost'],
|
|
|
|
|
amount: $result['amount'],
|
|
|
|
|
version: $result['version'],
|
2025-11-28 18:25:52 +08:00
|
|
|
expiredAt: isset($result['expired_at']) ? new Carbon($result['expired_at']) : null,
|
2025-08-18 09:49:21 +08:00
|
|
|
);
|
|
|
|
|
}
|
2025-09-17 20:03:45 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @inheritDoc
|
|
|
|
|
*/
|
|
|
|
|
public function initial(InitialAccountCmd $cmd): void
|
|
|
|
|
{
|
|
|
|
|
$uid = $cmd->uid;
|
|
|
|
|
|
|
|
|
|
$this->requestService->requestPost(
|
|
|
|
|
url: "/rpc/v2/account/$uid/balance",
|
|
|
|
|
data: $cmd->pointsBalances
|
|
|
|
|
);
|
|
|
|
|
}
|
2025-11-28 18:25:52 +08:00
|
|
|
|
|
|
|
|
public function getEmail(string $uid): Email
|
|
|
|
|
{
|
|
|
|
|
$response = $this->requestService->requestGet(
|
|
|
|
|
url: "/rpc/v2/account/$uid/inv-email"
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
$content = $response->getBody()->getContents();
|
|
|
|
|
$result = Json::decode($content);
|
|
|
|
|
|
|
|
|
|
return new Email($result['email']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function updateEmail(string $uid, Email $email): void
|
|
|
|
|
{
|
|
|
|
|
$this->requestService->requestPut(
|
|
|
|
|
url: "/rpc/v2/account/$uid/inv-email",
|
|
|
|
|
data: [
|
|
|
|
|
'email' => $email->getValue()
|
|
|
|
|
]
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|