Product Deleted
Un producto debe salir del índice de búsqueda. No significa borrado físico: significa que dejó de ser indexable.
Overview
search.product.deleted.v1 indica que un producto debe salir del índice de búsqueda.
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.
{ "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__." } ]}| Campo | Detalle |
|---|---|
id | El 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. |
type | Solo se usa para el log; el borrado es por id. |
country_id | El consumidor no lo usa. |
occurred_at | ISO-8601 naive, hora local del proceso. |
Acá id viaja como entero, a diferencia de payments.order.completed, donde los ids van
como string.
Consumidores
search hace delete_document("products", payload["id"]): borrado directo por id.