Settlements¶
Seite:
app/settlements/page.tsx(102 Zeilen) API:app/api/settlements/route.ts(42 Zeilen) Pfad:/settlements
Übersicht¶
Die Settlement-Seite zeigt die Historie aller täglichen Abrechnungen mit Status, Auszahlungsbeträgen und TX-Hashes.
Tabellen-Spalten¶
| Spalte | Beschreibung |
|---|---|
| Day ID | Tages-Identifier |
| Date | Berechnetes Datum (dayId * 86400000) |
| Status | Settlement-Status (StatusBadge) |
| Payout | Gesamtauszahlung in USDT |
| Affiliate | Affiliate-Gesamtbetrag in USDT |
| Winners | Anzahl Gewinner |
| TX Hash | Commit-Transaktions-Hash (gekürzt) |
| Pipeline | Pipeline-Status |
Status-Werte¶
| Status | Farbe | Bedeutung |
|---|---|---|
dry_run |
Blau | Berechnung abgeschlossen |
approved |
Gelb | Validierung bestanden |
committed |
Grün | On-Chain committed |
FAILED |
Rot | Fehlgeschlagen |
API-Query¶
SELECT sr.id, sr.day_id, sr.status,
sr.total_payout, sr.affiliate_total, sr.charity_total,
sr.commit_tx_hash, sr.created_at, sr.committed_at,
COALESCE(w.winner_count, 0) as winner_count,
p.status as pipeline_status
FROM settlement_runs sr
LEFT JOIN LATERAL (
SELECT COUNT(*) as winner_count
FROM settlement_winner_payouts
WHERE settlement_run_id = sr.id
) w ON true
LEFT JOIN settlement_pipeline_runs p ON p.day_id = sr.day_id
ORDER BY sr.day_id DESC
LIMIT $limit OFFSET $offset
USDT-Formatierung¶
Alle Beträge sind als Integer mit 6 Dezimalstellen gespeichert:
// Formatierung im Frontend
function formatUsdt(raw: string): string {
return (Number(raw) / 1_000_000).toFixed(2);
}
// "15000000000" → "15000.00"
Pagination¶
- 50 Einträge pro Seite
- Prev/Next-Navigation
- Gesamtanzahl wird via COUNT(*) ermittelt