Top-Trader-System
Ranking
Die öffentlichen Top Trader auf der Community-Seite werden primär nach Handelsvolumen sortiert.
Das Handelsvolumen ist die Summe der abgeschlossenen Verkäufe eines Traders, also die Summe von Trade.price für abgeschlossene Trades, bei denen der Trader Verkäufer war.
Die Auswertung betrachtet immer nur den letzten vollen UTC-Monat:
- Am 28. Mai wird April ausgewertet.
- Ab dem 1. Juni wird Mai ausgewertet.
- Die Top Trader für einen ausgewerteten Monat bleiben für den ganzen folgenden Monat stabil.
Für diese Monatsauswertung werden alle sichtbaren Top-Trader-Kennzahlen aus demselben Zeitfenster berechnet:
- Ranking: Summe der gezahlten Käuferpreise abgeschlossener Seller-Trades
- Handelsvolumen: dieselbe Summe, gerundet auf zwei Nachkommastellen
- Anzahl Trades: Count dieser abgeschlossenen Seller-Trades
- Bewertung: Durchschnitt und Anzahl der Ratings zu Trades aus genau diesem Monatsfenster
Das Monatsfenster wird über Trade.finalizedAt und Trade.status = completed gebildet. Der Start ist inklusive, das Ende exklusiv.
Das Feld trade_volume wird nur über /api/community/top-traders ausgeliefert und ist damit nur in der Top-Trader-Box öffentlich sichtbar. Marketplace-Detailansichten und Trader-Detailseiten erhalten weiterhin nur den Rang beziehungsweise die normalen Profil-KPIs, aber kein öffentliches Top-Trader-Handelsvolumen.
Die Berechnung ist in backend/src/services/topTraders.js gekapselt. Community-Top-Trader und Marketplace-Rank-Badges verwenden dieselbe Rangliste.
Der Service hält pro Backend-Prozess einen Monats-Snapshot im Speicher. Der erste Request nach Start, Deploy oder Monatswechsel baut den Snapshot, weitere Requests verwenden den Cache. Bei mehreren Backend-Instanzen berechnet jede Instanz ihren eigenen Snapshot einmal.
Die Community-Überschrift zeigt den Bezugsmonat dynamisch an, zum Beispiel Top Trader April. Der Monatsname wird im Frontend aus demselben Prinzip abgeleitet: letzter voller UTC-Monat, formatiert in der aktiven UI-Sprache.
Gebührenbelohnungen
Die Top-Trader-Belohnungen werden zusätzlich zum reinen Ranking persistiert. Der Backend-Job in backend/src/services/topTraders.js legt dafür pro ausgewertetem Monat bis zu fünf TopTraderReward-Zeilen an:
- Platz 1: gebührenfrei für 1 vollen UTC-Monat
- Platz 2: gebührenfrei für 3 Wochen
- Platz 3: gebührenfrei für 2 Wochen
- Platz 4: gebührenfrei für 1 Woche
- Platz 5: gebührenfrei für 3 Tage
Der Reward-Zeitraum beginnt immer am ersten Tag des Folgemonats um 00:00:00.000Z. Beispiel: Die April-Auswertung wird im Mai belohnt, also beginnt der Zeitraum am 1. Mai.
Der Monatsjob startet automatisch mit dem Backend und prüft danach einmal täglich, ob für den aktuellen Reward-Monat bereits Rewards angelegt wurden. Dafür ist kein externer Cronjob nötig.
E-Mail-Benachrichtigungen an neue Top Trader werden idempotent über die bestehende EmailNotificationQueue queued und nur in den ersten 48 Stunden des Reward-Monats ausgelöst, damit ein später Deploy keine alten Monatsmails nachsendet.
Die Top-Trader-Mail enthält Platzierung, persönliche Ansprache mit Username, Dankestext, Handelsvolumen, abgeschlossene Trades, Bewertung und den Gebührenfrei-Zeitraum. Sie wird nur an Nutzer mit verifizierter E-Mail-Adresse queued, weil die allgemeine Mail-Queue dieselbe Double-Opt-In-Prüfung verwendet wie Trade- und Wallet-Mails.