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:
parent
270c17829e
commit
e6d966e89f
|
|
@ -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 { PrismaService } from '../../infrastructure/persistence/prisma/prisma.service';
|
||||||
import { Prisma } from '@prisma/client';
|
import { Prisma } from '@prisma/client';
|
||||||
|
|
||||||
|
|
@ -20,7 +21,15 @@ export interface GetOrdersQuery {
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UsersService {
|
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(
|
async getUserMiningRecords(
|
||||||
accountSequence: string,
|
accountSequence: string,
|
||||||
|
|
@ -441,33 +449,79 @@ export class UsersService {
|
||||||
}
|
}
|
||||||
|
|
||||||
const mining = user.miningAccount;
|
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 {
|
return {
|
||||||
summary: {
|
summary: mining ? {
|
||||||
accountSequence,
|
accountSequence,
|
||||||
totalMined: '0',
|
totalMined: mining.totalMined.toString(),
|
||||||
availableBalance: '0',
|
availableBalance: mining.availableBalance.toString(),
|
||||||
frozenBalance: '0',
|
frozenBalance: mining.frozenBalance.toString(),
|
||||||
totalContribution: '0',
|
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: [],
|
records: [],
|
||||||
pagination: { page, pageSize, total: 0, totalPages: 0 },
|
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',
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue