From 4ce5653c86c568a8ae2344489fa04ffbb02e5ef3 Mon Sep 17 00:00:00 2001 From: BoHsuu Date: Tue, 24 Feb 2026 16:26:34 +0700 Subject: [PATCH] feat(admin): add CLAIM action handling and includeClaim option in analytics report DTO --- packages/backend/src/admin/admin.service.ts | 20 +++++++++++++++++++ .../src/admin/dto/analytics-report.dto.ts | 9 +++++++++ 2 files changed, 29 insertions(+) diff --git a/packages/backend/src/admin/admin.service.ts b/packages/backend/src/admin/admin.service.ts index 3a0bd1b..0050f9e 100644 --- a/packages/backend/src/admin/admin.service.ts +++ b/packages/backend/src/admin/admin.service.ts @@ -70,6 +70,7 @@ export class AdminService { switch (action) { case 'EXECUTE': case 'CREATE_ACCOUNT': + case 'CLAIM': return 'Horizen'; case 'DENY': return ''; @@ -216,6 +217,23 @@ export class AdminService { } } + if (dto?.includeClaim) { + const claimHistories = await this.prisma.claimHistory.findMany({ + where: hasDateFilter ? { createdAt: dateFilter } : undefined, + orderBy: { createdAt: 'asc' }, + }); + + for (const claim of claimHistories) { + records.push({ + timestamp: claim.createdAt, + action: 'CLAIM', + userAddress: claim.toAddress, + multisigWallet: null, + txHash: claim.txHash || 'PENDING', + }); + } + } + // 5. EXECUTE records const executedTxs = await this.prisma.transaction.findMany({ where: { @@ -297,6 +315,8 @@ export class AdminService { txHash = `${this.explorerConfig.HORIZEN_EXPLORER_ADDRESS}/${record.txHash}`; } else if (record.action === 'EXECUTE') { txHash = `${this.explorerConfig.HORIZEN_EXPLORER_TX}/${record.txHash}`; + } else if (record.action === 'CLAIM') { + txHash = `${this.explorerConfig.HORIZEN_EXPLORER_TX}/${record.txHash}`; } } else if (record.txHash === 'PENDING') { txHash = 'PENDING'; diff --git a/packages/backend/src/admin/dto/analytics-report.dto.ts b/packages/backend/src/admin/dto/analytics-report.dto.ts index 3c0f2ec..3118f4b 100644 --- a/packages/backend/src/admin/dto/analytics-report.dto.ts +++ b/packages/backend/src/admin/dto/analytics-report.dto.ts @@ -36,4 +36,13 @@ export class AnalyticsReportDto { @IsBoolean() @Transform(({ value }) => value === 'true' || value === true) includeDeny?: boolean; + + @ApiPropertyOptional({ + description: 'Include CLAIM records', + default: true, + }) + @IsOptional() + @IsBoolean() + @Transform(({ value }) => value === 'true' || value === true) + includeClaim?: boolean; }