Marktpreis-Refresh
Der Marktpreis-Refresh ist ein separater Job und wird per Secret-geschütztem Endpoint gestartet.
Der Sync fragt alle vom Provider verfügbaren Märkte ab und speichert pro Item sowohl den Durchschnittswert als auch die einzelnen Markt-Snapshots.
Der zentrale Preisjob arbeitet pro bekanntem SkinItem beziehungsweise pro eindeutigem CS2-Item-Namen, nicht pro UserInventory-Zeile eines Nutzers. Er nimmt die unterschiedlichen Namen aus dem Inventarbestand, queued sie dedupliziert und aktualisiert danach alle passenden Inventory-Zeilen mit dem neuen estimatedValue.
Normale Steam-Inventar-Syncs aktualisieren Preise nicht für bereits bekannte Items mit bestehendem currentPrice. Sie übernehmen nur vorhandene Preise auf die Inventory-Zeilen und queued asynchron Preis-Refreshes für Namen, für die die Plattform noch keinen Preis kennt (currentPrice <= 0). Dadurch können neue Items nach einem Login oder späteren Inventar-Sync zeitnah einen Preis bekommen, während die reguläre Aktualisierung bekannter Items dem separaten Bulk-Preisjob überlassen bleibt.
Beim Listing-Erstellen läuft ebenfalls ein frischer Inventar-Sync, aber auch dieser queued nur fehlende Preise und startet kein Inspect-Enrichment. Der eigentliche Listing-Preis-Refresh für das angebotene Item bleibt asynchron und nicht blockierend.
Retention
Abgeschlossene oder fehlgeschlagene Market-Price-Refresh-Jobs werden automatisch bereinigt, damit die Historie in MarketPriceRefreshJob und MarketPriceRefreshItem nicht unbegrenzt wächst.
Standardmäßig bleiben die letzten 7 Tage erhalten, und zusätzlich werden immer mindestens die letzten 3 Jobs behalten. Das lässt sich über MARKET_PRICE_JOB_RETENTION_DAYS und MARKET_PRICE_JOB_RETENTION_MIN_JOBS anpassen.
Runbook
Preisjob triggern:
curl -X POST http://localhost:3001/api/market-prices/refresh \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"
Preisjob forciert triggern, ignoriert TTL / No-Sales-Skip:
curl -X POST "http://localhost:3001/api/market-prices/refresh?force=1" \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"
Laufstatus:
curl -X GET http://localhost:3001/api/market-prices/status \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"
Provider-Debug:
curl -X GET http://localhost:3001/api/market-prices/provider-debug \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"
Queue-/Job-Debug:
curl -X GET http://localhost:3001/api/market-prices/job-debug \
-H "x-market-sync-secret: <MARKET_PRICE_SYNC_SECRET>"
Worauf achten
status.running = truebedeutet: Job läuft.pendingItemssollte sinken.updatedItemssollte steigen.lastErrorsollte möglichstnullsein.usage.requestCountzeigt den API-Verbrauch.