fix(mining-admin): fetch mining records from mining-service

Update getUserMiningRecords to call mining-service API instead of
returning empty records. This enables the admin dashboard to display
actual user mining records.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-14 05:14:03 -08:00
parent 270c17829e
commit e6d966e89f
1 changed files with 78 additions and 24 deletions

View File

@ -1,4 +1,5 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { Injectable, NotFoundException, Logger } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PrismaService } from '../../infrastructure/persistence/prisma/prisma.service';
import { Prisma } from '@prisma/client';
@ -20,7 +21,15 @@ export interface GetOrdersQuery {
@Injectable()
export class UsersService {
constructor(private readonly prisma: PrismaService) {}
private readonly logger = new Logger(UsersService.name);
private readonly miningServiceUrl: string;
constructor(
private readonly prisma: PrismaService,
private readonly configService: ConfigService,
) {
this.miningServiceUrl = this.configService.get<string>('MINING_SERVICE_URL', 'http://localhost:3021');
}
/**
*
@ -423,8 +432,7 @@ export class UsersService {
}
/**
*
* mining-service
* mining-service
*/
async getUserMiningRecords(
accountSequence: string,
@ -441,33 +449,79 @@ export class UsersService {
}
const mining = user.miningAccount;
if (!mining) {
const emptySummary = {
accountSequence,
totalMined: '0',
availableBalance: '0',
frozenBalance: '0',
totalContribution: '0',
};
// 从 mining-service 获取挖矿记录
try {
const url = `${this.miningServiceUrl}/api/v2/mining/accounts/${accountSequence}/records?page=${page}&pageSize=${pageSize}`;
this.logger.log(`Fetching mining records from ${url}`);
const response = await fetch(url);
if (!response.ok) {
this.logger.warn(`Failed to fetch mining records: ${response.status}`);
return {
summary: mining ? {
accountSequence,
totalMined: mining.totalMined.toString(),
availableBalance: mining.availableBalance.toString(),
frozenBalance: mining.frozenBalance.toString(),
totalContribution: mining.totalContribution.toString(),
} : emptySummary,
records: [],
pagination: { page, pageSize, total: 0, totalPages: 0 },
};
}
const result = await response.json();
const recordsData = result.data || result;
// 格式化记录以匹配前端期望的格式
const records = (recordsData.data || []).map((r: any) => ({
id: r.id,
accountSequence,
distributionMinute: r.miningMinute,
contributionRatio: r.contributionRatio,
shareAmount: r.minedAmount,
priceSnapshot: r.secondDistribution,
createdAt: r.createdAt,
}));
return {
summary: {
summary: mining ? {
accountSequence,
totalMined: '0',
availableBalance: '0',
frozenBalance: '0',
totalContribution: '0',
totalMined: mining.totalMined.toString(),
availableBalance: mining.availableBalance.toString(),
frozenBalance: mining.frozenBalance.toString(),
totalContribution: mining.totalContribution.toString(),
} : emptySummary,
records,
pagination: {
page,
pageSize,
total: recordsData.total || 0,
totalPages: Math.ceil((recordsData.total || 0) / pageSize),
},
};
} catch (error) {
this.logger.error('Failed to fetch mining records from mining-service', error);
return {
summary: mining ? {
accountSequence,
totalMined: mining.totalMined.toString(),
availableBalance: mining.availableBalance.toString(),
frozenBalance: mining.frozenBalance.toString(),
totalContribution: mining.totalContribution.toString(),
} : emptySummary,
records: [],
pagination: { page, pageSize, total: 0, totalPages: 0 },
};
}
return {
summary: {
accountSequence,
totalMined: mining.totalMined.toString(),
availableBalance: mining.availableBalance.toString(),
frozenBalance: mining.frozenBalance.toString(),
totalContribution: mining.totalContribution.toString(),
},
// 详细流水需要从 mining-service 获取
records: [],
pagination: { page, pageSize, total: 0, totalPages: 0 },
note: '详细挖矿记录请查看 mining-service',
};
}
/**