event

Product Deleted

Un producto debe salir del índice de búsqueda. No significa borrado físico: significa que dejó de ser indexable.

EventsearchNombre engañoso

Overview

search.product.deleted.v1 indica que un producto debe salir del índice de búsqueda.

No es un borrado

A pesar del nombre, este evento no significa que el producto se haya eliminado. Significa que dejó de cumplir las condiciones para estar indexado (pasó a inactive, dejó de ser visible, etc.). El producto sigue existiendo en la base.

Cuándo se dispara

Desde la misma señal post_save que created y updated, en su rama negativa: el producto se guardó y, tras guardarse, dejó de cumplir los filtros de ProductDocument.

No hay ningún post_delete conectado: el borrado real de la fila no emite este evento. Un producto eliminado por fuera de un save() queda huérfano en el índice hasta el próximo full sync por HTTP, que es el único camino con reconciliación.

Schema

Formato Avro, validado con fastavro. Es el único evento de search.product.* que no lleva el documento completo.

search.product.deleted.v1 — Avro
{
"type": "record",
"name": "ProductDeleted",
"namespace": "search.product",
"doc": "Emitido cuando un producto deja de ser indexable en bigbox-backend (no necesariamente borrado fisico). Consumido por el servicio search para eliminar el documento de Elasticsearch.",
"fields": [
{
"name": "id",
"type": "int",
"doc": "Id del producto a eliminar del indice."
},
{
"name": "type",
"type": {
"type": "enum",
"name": "ProductType",
"symbols": ["Activity", "Box"]
},
"doc": "Tipo de producto. El consumer solo lo usa para loguear; el borrado es por id."
},
{
"name": "country_id",
"type": ["null", "int"],
"default": null,
"doc": "Id del pais del producto."
},
{
"name": "occurred_at",
"type": "string",
"doc": "ISO-8601 naive en hora local del proceso. Lo inyecta events.event.Event.__init__."
}
]
}
CampoDetalle
idEl consumidor lo lee con acceso directo (payload["id"]). Si faltara, lanza KeyError y el mensaje se nackea y reintenta indefinidamente. Es el campo más crítico a validar.
typeSolo se usa para el log; el borrado es por id.
country_idEl consumidor no lo usa.
occurred_atISO-8601 naive, hora local del proceso.
Info

Acá id viaja como entero, a diferencia de payments.order.completed, donde los ids van como string.

Consumidores

publishes
event
routes to
routes to
consumes
Viewing
Event
Product Deleted(v1)
ecommerzeta
Service
Bigbox Backend(v1.0.0)
omega-backend+2
Channel
Google Cloud Pub/Subv1.0.0
At least oncepubsub
ecommerzeta
Service
Search(v1.0.0)
ecommerzeta
  • events (1)
  • services (2)
  • channels (2)

search hace delete_document("products", payload["id"]): borrado directo por id.