wiki/Comercio Market/Exclusividad de canal: un dispositivo está en Market, en Auction o vendido en directo, nunca en dos sitios a la vez
10Comercio MarketLectura mínima 3

Exclusividad de canal: un dispositivo está en Market, en Auction o vendido en directo, nunca en dos sitios a la vez

El guardián atómico que impide publicar dos veces, y por qué vive en el dispositivo y no en el lote.

Si el mismo dispositivo pudiera estar publicado en Market y listado en una subasta a la vez, la plataforma estaría mintiendo sobre la disponibilidad a dos grupos de compradores distintos. Quien gana la subasta espera llevarse el lote. Quien pulsa “Comprar ahora” en el mercado espera lo mismo. Uno de los dos se va a llevar un disgusto, y detrás vienen las disputas.

El guardián

El guardián se sienta en cada dispositivo vendible, no en el lote. Cada fila del pool vendible compartido lleva un canal actual —ninguno, market, auction o venta directa para el stock comprometido en una venta directa desde Core— junto con una referencia a la publicación que lo retiene, y una restricción que rechaza un canal sin publicación. La publicación en Market, la publicación en Auction y el flujo de venta directa hacen todos lo mismo: una actualización que fija el canal solo donde ahora mismo es ninguno. Si la fila ya está cogida, la actualización no toca nada, la publicación falla y la transacción se deshace. El historial de canal de la fila registra cada cambio.

Por qué atómico

Sin atomicidad, dos peticiones de publicación simultáneas podrían leer las dos el canal como ninguno y escribir cada una el suyo. La actualización condicional garantiza que gane exactamente una; cuando dos transacciones chocan de verdad, una pierde con un error de serialización y su publicación se deshace. Atómico a nivel de base de datos, no de aplicación, porque la aplicación puede estar compitiendo consigo misma en dos procesos de servidor, y el único punto de verdad seguro es la fila de la base de datos.

Un lote nunca cambia de canal

La preparación también conoce el canal. Un lote de Market es una preparación de Market y solo puede publicarse en Market; el borrador de un lote de subasta es una preparación aparte con su propio canal de destino y solo puede publicarse en Auction. Mientras un dispositivo está en uno de esos borradores, queda reservado para ese canal y desaparece de la selección normal del otro canal: con “Mostrar todo” reaparece como fila bloqueada, con un enlace al registro que explica por qué. ¿Quiere los mismos dispositivos bajo el martillo? Empiece un borrador de lote desde el inventario de Auction; la plataforma no reapunta un lote en silencio. La disponibilidad es un tercer bloqueo, independiente: un dispositivo en espera (no disponible) o registrado como destruido no puede pasar a ningún canal, y los asistentes no lo ofrecen.

Cambio de canal

El cambio secuencial sí se permite. Despublique el listado de Market, o deje que una subasta acabe sin ganador, y el canal vuelve a ninguno; la siguiente publicación en el otro canal sigue su curso normal. La reventa tras una subasta sin venta usa exactamente ese camino: cuando un lote se liquida como reserva no alcanzada o sin pujas, la liquidación devuelve los dispositivos a ninguno y publica un listado de Market en la misma ejecución, titulado como el lote y con “— relisted from auction” añadido al final. La nueva publicación recuerda de qué lote viene, así que una liquidación que se ejecuta dos veces crea un listado, no dos.