Channel exclusivity : un appareil est sur Market, en Auction ou vendu en direct — jamais deux à la fois
Le guard atomique qui empêche la double publication, et pourquoi il vit sur l’appareil plutôt que sur le batch.
Si le même appareil pouvait être publié sur Market et listé dans une auction en même temps, la plateforme mentirait à deux groupes de buyers sur la disponibilité. Le buyer qui gagne l’auction s’attend à recevoir le lot. Le buyer qui clique sur « Buy now » sur le market s’attend à la même chose. L’un des deux sera déçu, et les litiges suivent.
Le guard
Le guard est posé sur chaque appareil vendable, pas sur le batch. Chaque ligne du pool sellable partagé porte un channel courant — aucun, market, auction, ou vente directe pour du stock engagé dans une vente directe depuis Core — avec une référence vers la publication qui le retient, et une contrainte qui refuse un channel sans publication. La publication Market, la publication Auction et le flux de vente directe font tous la même chose : un update qui pose le channel uniquement là où il vaut encore aucun. Si la ligne est déjà prise, l’update ne touche rien, la publication échoue et la transaction est annulée. L’historique de channel sur la ligne enregistre chaque bascule.
Pourquoi atomique
Sans atomicité, deux requêtes « publier » simultanées pourraient toutes deux lire le channel comme aucun et écrire chacune le sien. L’update conditionnel garantit qu’une seule gagne ; quand deux transactions entrent vraiment en collision, l’une perd avec une erreur de sérialisation et sa publication est annulée. Atomique au niveau de la base de données, pas de l’application — parce que l’application peut se faire concurrence à elle-même sur deux processus serveur, et que le seul point de vérité sûr est la ligne en base.
Un batch ne change jamais de channel
La préparation aussi connaît son channel. Un batch Market est une préparation Market et ne peut publier que vers Market ; un lot draft d’auction est une préparation distincte, avec son propre channel cible, et ne peut publier que vers Auction. Tant qu’un appareil est dans l’un de ces drafts, il est réservé à ce channel et disparaît de la sélection normale de l’autre — « tout afficher » le fait réapparaître comme ligne bloquée, avec un lien vers l’enregistrement qui explique pourquoi. Vous voulez les mêmes appareils sous le marteau ? Démarrez un lot draft depuis l’inventory Auction ; la plateforme ne réoriente pas un batch en douce. La disponibilité est un troisième verrou, séparé : un appareil en attente (indisponible) ou enregistré comme détruit ne peut basculer sur aucun channel, et les wizards ne le proposent pas.
Changer de channel
Le passage séquentiel est permis. Dépubliez la listing Market, ou laissez une auction se terminer sans gagnant, et le channel repasse à aucun ; la publication suivante sur l’autre channel se déroule normalement. Le relist après une auction sans vente emprunte exactement ce chemin : quand un lot se règle en réserve non atteinte ou sans enchères, le settlement remet les appareils à aucun et publie une listing Market dans la même exécution, titrée d’après le batch avec « — relisted from auction » ajouté. Le relist se souvient du lot d’origine, donc un settlement qui tourne deux fois crée une listing, pas deux.