Compare commits

...

6 Commits

Author SHA1 Message Date
李东云
48e6fafe8e chore(release): 1.9.2 2025-09-19 09:45:32 +08:00
李东云
874a6f4fa9 feat(Account): 添加新的积分类型
- 新增 ScanToModel 积分类型
- 用于奖励完成扫描取模的用户
2025-09-19 09:45:18 +08:00
李东云
8ac850fc62 chore(release): 1.9.1 2025-09-17 20:35:04 +08:00
李东云
8f8f7b08b0 fix(account): 修复初始账户命令和测试
- 修改 InitialAccountCmd 类的属性和方法
- 更新 addPointsBalance 方法的参数和返回值
- 调整测试数据和测试逻辑以适应新的命令结构
2025-09-17 20:34:51 +08:00
李东云
203dd34353 chore(release): 1.9.0 2025-09-17 20:04:00 +08:00
李东云
87b09ef34c feat(account): 添加初始化账户余额功能
- 新增 InitialAccountCmd 类用于处理初始账户命令
- 在 AccountRepoInterface 接口中添加 initial 方法
- 实现 AccountBalanceRepo 类中的 initial 方法
- 添加单元测试 InitialAccountBalanceTest 以验证初始化功能
2025-09-17 20:03:45 +08:00
7 changed files with 149 additions and 1 deletions

View File

@@ -1,4 +1,25 @@
# 版本更新日志
### [1.9.2](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.9.1...v1.9.2) (2025-09-19)
### ✨ Features | 新功能
* **Account:** 添加新的积分类型 ([874a6f4](http://124.126.16.154:8888/singularity/hdk-pay/commit/874a6f4fa96b09a4c6c652b6d285d4b6631a3c66))
### [1.9.1](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.9.0...v1.9.1) (2025-09-17)
### 🐛 Bug Fixes | Bug 修复
* **account:** 修复初始账户命令和测试 ([8f8f7b0](http://124.126.16.154:8888/singularity/hdk-pay/commit/8f8f7b08b03d9b810bb09ce4b1f15a27cbd43e68))
## [1.9.0](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.8.2...v1.9.0) (2025-09-17)
### ✨ Features | 新功能
* **account:** 添加初始化账户余额功能 ([87b09ef](http://124.126.16.154:8888/singularity/hdk-pay/commit/87b09ef34cd3427816ef2c357406a74975ada8a9))
### [1.8.2](http://124.126.16.154:8888/singularity/hdk-pay/compare/v1.8.1...v1.8.2) (2025-09-17)

View File

@@ -70,5 +70,5 @@
"url": "https://mirrors.aliyun.com/composer/"
}
},
"version": "1.8.2"
"version": "1.9.2"
}

View File

@@ -0,0 +1,40 @@
<?php
/**
* InitialAccountCmd.php@Pay
*
* @author 李东云 <Dongyun.Li@LuxCreo.Ai>
* Powered by PhpStorm
* Created on 2025/9/17
*/
declare(strict_types=1);
namespace Singularity\HDK\Pay\Application\Command;
use Carbon\Carbon;
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
final class InitialAccountCmd
{
public array $pointsBalances;
public function __construct(
public readonly string $uid,
) {}
public function addPointsBalance(
PointType $type,
float $basic = 0.0,
float $bonus = 0.0,
?Carbon $expiredAt = null,
?string $version = null,
): array {
return $this->pointsBalances[] = [
'type' => $type->value,
'basic' => $basic,
'bonus' => $bonus,
'expired_at' => $expiredAt->toDateTimeString(),
'version' => $version,
];
}
}

View File

@@ -16,11 +16,15 @@ enum PointType: string
case EMA = 'ema';
case FtaiAligner = 'aligner';
case FtaiRetainer = 'retainer';
case Aligner4D = 'aligner-4d';
case NightguardAi = 'nightguard-ai';
case ScanToModel = 'scan-to-model';
public static function values(): array
{
return [

View File

@@ -11,13 +11,29 @@ declare(strict_types=1);
namespace Singularity\HDK\Pay\Domain\Account\Repository;
use Singularity\HDK\Pay\Application\Command\InitialAccountCmd;
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\AccountBalance;
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\PointsBalance;
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
interface AccountRepoInterface
{
/**
* @param string $uid
* @return AccountBalance
*/
public function getAccount(string $uid): AccountBalance;
/**
* @param string $uid
* @param PointType $pointType
* @return PointsBalance
*/
public function getPointBalance(string $uid, PointType $pointType): PointsBalance;
/**
* @param InitialAccountCmd $cmd
* @return void
*/
public function initial(InitialAccountCmd $cmd): void;
}

View File

@@ -13,6 +13,7 @@ namespace Singularity\HDK\Pay\Infrastructure\Repository;
use Carbon\Carbon;
use Hyperf\Codec\Json;
use Singularity\HDK\Pay\Application\Command\InitialAccountCmd;
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\AccountBalance;
use Singularity\HDK\Pay\Domain\Account\Aggregate\Account\PointsBalance;
use Singularity\HDK\Pay\Domain\Account\Enum\PointType;
@@ -67,4 +68,17 @@ final class AccountBalanceRepo extends AbstractRepo implements AccountRepoInterf
expiredAt: isset($result['expired_at']) ? new Carbon($result['expired_at']): null,
);
}
/**
* @inheritDoc
*/
public function initial(InitialAccountCmd $cmd): void
{
$uid = $cmd->uid;
$this->requestService->requestPost(
url: "/rpc/v2/account/$uid/balance",
data: $cmd->pointsBalances
);
}
}

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(),
'version' => 'trial',
],
[
'type' => 'ema',
'basic' => 0,
'bonus' => 1,
'expired_at' => Carbon::now()->addYear(),
'version' => 'Trial',
],
];
$cmd = new InitialAccountCmd($uid);
foreach ($data as $point_balance) {
$cmd->addPointsBalance(
type: PointType::from($point_balance['type']),
basic: $point_balance['basic'],
bonus: $point_balance['bonus'],
expiredAt:$point_balance['expired_at'],
version: $point_balance['version'],
);
}
$repo = make(AccountBalanceRepo::class);
$repo->initial($cmd);
expect(true)->toBeTrue();
});