product.availability_changed é emitido quando a disponibilidade de um ou mais produtos muda — por exemplo, quando um restaurante marca um produto como esgotado ou o reativa. Controla se o produto aparece no menu e está disponível para compra.
Suporta múltiplos produtos em um único evento. Quando a mudança afeta várias lojas, o Fire emite um único evento com todas as lojas afetadas listadas em targets.
Payload
Campos
data
data.targets[n]
Mesma estrutura que em product.updated, sem o campo listName em channels[n].
data.targets[n].channels[n]
data.products[n]
Comportamento
Definiractive: false oculta o produto do menu e o marca como indisponível para compra. Definir active: true o restaura.
Este evento não modifica nenhum outro dado do produto — nome, preço, imagens e modificadores permanecem inalterados.
Desativar um produto não é removê-lo do menu: ele continua sendo membro, apenas deixa de estar disponível. Por isso sua data de atribuição ao menu (additionalInfo.assignedAt) não muda com active: false nem é reiniciada ao voltar para active: true, e este evento não a transmite. Ela chega em product.updated e em menu.updated.
active é a disponibilidade EFETIVA, não um único interruptor
products[n].active não reflete um único campo: é o resultado de combinar a visibilidade do
produto com a de cada categoria em que ele aparece. Um produto pode viver em várias categorias
do menu, e o evento é plano por produto, então se aplica o OR entre elas:
active = true se existir AO MENOS UMA categoria onde (a categoria está visível E o produto está
visível nela).
Duas consequências importantes ao processar o evento:
- Ocultar uma categoria inteira chega como N entradas de produto, uma para cada produto cuja
disponibilidade efetiva mudou — não como uma alteração de categoria. Este evento não tem como
expressar categorias; a estrutura do menu viaja em
menu.updated(categories[n].displayInList). - Um produto que também vive em outra categoria visível NÃO aparece no evento, porque sua
disponibilidade efetiva não mudou. Está correto, mas significa que a ausência de um produto em
products[]não implica que sua categoria não tenha sido tocada.
menu.updated / product.updated.

