feat(mining): 添加 perSecondEarning 到挖矿账户 API
- 后端:计算每秒收益 = (用户贡献 / 全网贡献) × 每秒分配量 - 前端:修正字段映射以匹配后端返回格式 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
33233901a9
commit
4f1f1f9eaf
|
|
@ -1,5 +1,6 @@
|
|||
import { Injectable } from '@nestjs/common';
|
||||
import { MiningAccountRepository } from '../../infrastructure/persistence/repositories/mining-account.repository';
|
||||
import { MiningConfigRepository } from '../../infrastructure/persistence/repositories/mining-config.repository';
|
||||
import { PrismaService } from '../../infrastructure/persistence/prisma/prisma.service';
|
||||
|
||||
export interface MiningAccountDto {
|
||||
|
|
@ -9,6 +10,7 @@ export interface MiningAccountDto {
|
|||
frozenBalance: string;
|
||||
totalBalance: string;
|
||||
totalContribution: string;
|
||||
perSecondEarning: string; // 每秒收益 = (用户贡献 / 全网贡献) × 每秒分配量
|
||||
lastSyncedAt: Date | null;
|
||||
}
|
||||
|
||||
|
|
@ -38,6 +40,7 @@ export interface MiningTransactionDto {
|
|||
export class GetMiningAccountQuery {
|
||||
constructor(
|
||||
private readonly accountRepository: MiningAccountRepository,
|
||||
private readonly configRepository: MiningConfigRepository,
|
||||
private readonly prisma: PrismaService,
|
||||
) {}
|
||||
|
||||
|
|
@ -47,6 +50,24 @@ export class GetMiningAccountQuery {
|
|||
return null;
|
||||
}
|
||||
|
||||
// 计算每秒收益 = (用户贡献 / 全网贡献) × 每秒分配量
|
||||
let perSecondEarning = '0';
|
||||
try {
|
||||
const [config, totalContribution] = await Promise.all([
|
||||
this.configRepository.getConfig(),
|
||||
this.accountRepository.getTotalContribution(),
|
||||
]);
|
||||
|
||||
if (config && totalContribution.toNumber() > 0) {
|
||||
const userContribution = account.totalContribution.toNumber();
|
||||
const secondDistribution = config.secondDistribution.toNumber();
|
||||
const ratio = userContribution / totalContribution.toNumber();
|
||||
perSecondEarning = (ratio * secondDistribution).toFixed(8);
|
||||
}
|
||||
} catch {
|
||||
// 如果计算失败,返回 0
|
||||
}
|
||||
|
||||
return {
|
||||
accountSequence: account.accountSequence,
|
||||
totalMined: account.totalMined.toString(),
|
||||
|
|
@ -54,6 +75,7 @@ export class GetMiningAccountQuery {
|
|||
frozenBalance: account.frozenBalance.toString(),
|
||||
totalBalance: account.totalBalance.toString(),
|
||||
totalContribution: account.totalContribution.toString(),
|
||||
perSecondEarning,
|
||||
lastSyncedAt: account.lastSyncedAt,
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,12 +14,15 @@ class ShareAccountModel extends ShareAccount {
|
|||
factory ShareAccountModel.fromJson(Map<String, dynamic> json) {
|
||||
return ShareAccountModel(
|
||||
accountSequence: json['accountSequence']?.toString() ?? '',
|
||||
miningBalance: json['miningBalance']?.toString() ?? '0',
|
||||
tradingBalance: json['tradingBalance']?.toString() ?? '0',
|
||||
// 后端返回 availableBalance,映射到 miningBalance
|
||||
miningBalance: json['availableBalance']?.toString() ?? json['miningBalance']?.toString() ?? '0',
|
||||
// 后端返回 totalBalance,映射到 tradingBalance(可交易余额)
|
||||
tradingBalance: json['totalBalance']?.toString() ?? json['tradingBalance']?.toString() ?? '0',
|
||||
frozenBalance: json['frozenBalance']?.toString() ?? '0',
|
||||
totalMined: json['totalMined']?.toString() ?? '0',
|
||||
perSecondEarning: json['perSecondEarning']?.toString() ?? '0',
|
||||
effectiveContribution: json['effectiveContribution']?.toString() ?? '0',
|
||||
// 后端返回 totalContribution,映射到 effectiveContribution
|
||||
effectiveContribution: json['totalContribution']?.toString() ?? json['effectiveContribution']?.toString() ?? '0',
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue