73 lines
2.2 KiB
TypeScript
73 lines
2.2 KiB
TypeScript
import { Controller, Get, Post, Param, Logger } from '@nestjs/common';
|
||
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
|
||
import { DepositRepairService } from '@/application/services/deposit-repair.service';
|
||
|
||
/**
|
||
* 充值修复控制器
|
||
*
|
||
* 内部 API,用于诊断和修复历史遗留充值问题
|
||
*/
|
||
@ApiTags('Deposit Repair')
|
||
@Controller('internal/deposit-repair')
|
||
export class DepositRepairController {
|
||
private readonly logger = new Logger(DepositRepairController.name);
|
||
|
||
constructor(private readonly repairService: DepositRepairService) {}
|
||
|
||
@Get('diagnose')
|
||
@ApiOperation({ summary: '诊断充值状态' })
|
||
@ApiResponse({
|
||
status: 200,
|
||
description: '返回需要修复的充值统计',
|
||
})
|
||
async diagnose() {
|
||
this.logger.log('Running deposit diagnosis...');
|
||
const result = await this.repairService.diagnose();
|
||
this.logger.log(
|
||
`Diagnosis complete: ${result.confirmedNotNotified.length} deposits need repair`,
|
||
);
|
||
return result;
|
||
}
|
||
|
||
@Post('repair/:depositId')
|
||
@ApiOperation({ summary: '修复单个充值' })
|
||
@ApiResponse({
|
||
status: 200,
|
||
description: '修复结果',
|
||
})
|
||
async repairDeposit(@Param('depositId') depositId: string) {
|
||
this.logger.log(`Repairing deposit ${depositId}...`);
|
||
const result = await this.repairService.repairDeposit(BigInt(depositId));
|
||
this.logger.log(`Repair result: ${result.message}`);
|
||
return result;
|
||
}
|
||
|
||
@Post('repair-all')
|
||
@ApiOperation({ summary: '批量修复所有未通知的充值' })
|
||
@ApiResponse({
|
||
status: 200,
|
||
description: '批量修复结果',
|
||
})
|
||
async repairAll() {
|
||
this.logger.log('Starting batch repair...');
|
||
const result = await this.repairService.repairAll();
|
||
this.logger.log(
|
||
`Batch repair complete: ${result.success}/${result.total} success`,
|
||
);
|
||
return result;
|
||
}
|
||
|
||
@Post('reset-failed-outbox')
|
||
@ApiOperation({ summary: '重置失败的 Outbox 事件' })
|
||
@ApiResponse({
|
||
status: 200,
|
||
description: '重置结果',
|
||
})
|
||
async resetFailedOutbox() {
|
||
this.logger.log('Resetting failed outbox events...');
|
||
const result = await this.repairService.resetFailedOutboxEvents();
|
||
this.logger.log(`Reset ${result.reset} failed events`);
|
||
return result;
|
||
}
|
||
}
|