feat(account): 添加初始化账户余额功能

- 新增 InitialAccountCmd 类用于处理初始账户命令
- 在 AccountRepoInterface 接口中添加 initial 方法
- 实现 AccountBalanceRepo 类中的 initial 方法
- 添加单元测试 InitialAccountBalanceTest 以验证初始化功能
This commit is contained in:
李东云
2025-09-17 20:03:45 +08:00
parent a59d979076
commit 87b09ef34c
4 changed files with 123 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
<?php
/**
* InitialAccountBalanceTest.php@Pay
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2025/9/17
*/
use Carbon\Carbon;
use Singularity\HDK\Pay\Application\Command\InitialAccountCmd;
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
use Singularity\HDK\Pay\Infrastructure\Repository\AccountBalanceRepo;
use function Hyperf\Support\make;
it('should initial account balance', function () {
$uid = uniqid('TDD');
$data = [
[
'type' => 'aligner',
'basic' => 0,
'bonus' => 40,
'expired_at' => Carbon::now()->addYear()->toDateTimeString(),
'version' => 'Trial',
],
[
'type' => 'ema',
'basic' => 0,
'bonus' => 1,
'expired_at' => Carbon::now()->addYear()->toDateTimeString(),
'version' => 'trial',
],
];
$cmd = new InitialAccountCmd($uid);
foreach ($data as $point_balance) {
$cmd->addPointsBalance(
type: PointType::from($point_balance['type']),
basic: $point_balance['basic'] ?? 0,
bonus: $point_balance['bonus'] ?? 0,
expiredAt: isset($point_balance['expired_at']) ? new Carbon($point_balance['expired_at']) : null,
version: $point_balance['version'] ?? 0,
);
}
$repo = make(AccountBalanceRepo::class);
$repo->initial($cmd);
expect(true)->toBeTrue();
});