Listings
Ein Listing wird erst öffentlich sichtbar, wenn das Item beim Bot liegt.
Listing-Erstellung
Beim Erstellen eines Marketplace-Listings synchronisiert das Backend das Steam-Inventar des Verkäufers direkt vor dem Persistieren des Listings erneut und lädt die angefragten itemIds danach frisch aus der Datenbank.
So werden veraltete Steam-assetIds abgefangen, bevor der Bot eine ungültige Trade-Offer sendet.
Wenn sich das Inventar zwischen Anzeige und Listing-Erstellung geändert hat und die angefragte Inventory-Zeile keine aktuelle assetId mehr besitzt, bricht das Backend mit 409 ab. Das Frontend zeigt dann eine verständliche Meldung an, dass das Inventar aktualisiert werden muss.
Lifecycle
- Seller listet ein Item.
- Seller überträgt das Item zunächst an den Bot.
- Erst wenn das Item beim Bot liegt, wird das Listing öffentlich sichtbar.
- Wenn auf dem Bot noch eine Steam-Handelssperre aktiv ist, bleibt das Listing sichtbar und zeigt die verbleibende Verfügbarkeit an.
- Offer- und Counteroffer-Logik laufen weiter über den Chat.
- Nach Deal-Akzept sendet der Bot das Item an den Buyer, sobald Steam es erlaubt.
Bot-Zuordnung
Listings speichern den zugewiesenen botId dauerhaft. Ein bereits laufendes Listing bleibt also an seinem Bot hängen, auch wenn STEAM_DEFAULT_BOT_ID später geändert wird.
Alte Inventory-Zeilen
Wenn Steam für dasselbe sichtbare Item später eine neue assetId vergibt, behandelt der Sync diese neue assetId als neue konkrete Steam-Instanz.
Alte UserInventory-Zeilen mit Listing- oder Trade-Historie werden nicht gelöscht, sondern assetlos und nicht handelbar geparkt. Das schützt Historie und verhindert Cascading Deletes.
Pending-Intake-Listings ohne bereits erzeugte Steam-Offer werden automatisch storniert, wenn der Sync das referenzierte Steam-Asset nicht mehr im Verkäufer-Inventar findet. Die alte Inventory-Zeile wird dann wieder selectedForSale = false, sofern kein anderes aktives Listing auf ihr bleiben muss.