Zum Inhalt

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