feat: enhance federation forward flow linkage with peer share support

- Add getPeerShareList API integration in forward.tsx
- Merge local peer share flow with remote usage stats
- Add contract test for federation forward card flow linkage
- Ensure max current flow is tracked across both local and remote sources
This commit is contained in:
sagitchu
2026-02-25 20:35:33 +08:00
parent 6189fe23f1
commit 804a5a29ea
2 changed files with 521 additions and 17 deletions
+43 -17
View File
@@ -50,6 +50,7 @@ import { Checkbox } from "@/shadcn-bridge/heroui/checkbox";
import {
createForward,
getForwardList,
getPeerShareList,
getPeerRemoteUsageList,
updateForward,
deleteForward,
@@ -258,27 +259,52 @@ export default function ForwardPage() {
}
try {
const usageRes = await getPeerRemoteUsageList();
if (usageRes.code !== 0 || !Array.isArray(usageRes.data)) {
return forwardsData;
}
const [usageRes, localShareRes] = await Promise.all([
getPeerRemoteUsageList(),
getPeerShareList(),
]);
const flowByShare = new Map<number, number>();
usageRes.data.forEach((item: Record<string, unknown>) => {
const shareId = Number(item.shareId || 0);
const currentFlow = Number(item.currentFlow || 0);
if (usageRes.code === 0 && Array.isArray(usageRes.data)) {
usageRes.data.forEach((item: Record<string, unknown>) => {
const shareId = Number(item.shareId || 0);
const currentFlow = Number(item.currentFlow || 0);
if (
Number.isFinite(shareId) &&
shareId > 0 &&
Number.isFinite(currentFlow) &&
currentFlow > 0
) {
flowByShare.set(shareId, currentFlow);
}
});
if (
Number.isFinite(shareId) &&
shareId > 0 &&
Number.isFinite(currentFlow) &&
currentFlow > 0
) {
const prev = flowByShare.get(shareId) || 0;
flowByShare.set(shareId, Math.max(prev, currentFlow));
}
});
}
if (localShareRes.code === 0 && Array.isArray(localShareRes.data)) {
localShareRes.data.forEach((item: Record<string, unknown>) => {
const shareId = Number(item.id || 0);
const currentFlow = Number(item.currentFlow || 0);
if (
Number.isFinite(shareId) &&
shareId > 0 &&
Number.isFinite(currentFlow) &&
currentFlow > 0
) {
const prev = flowByShare.get(shareId) || 0;
flowByShare.set(shareId, Math.max(prev, currentFlow));
}
});
}
if (flowByShare.size === 0) {
return forwardsData;
}
const forwardCountByShare = new Map<number, number>();