Ejecutar acciones después de guardar un modelo en AdonisJS

Uso de hooks en AdonisJS para "escuchar" a eventos de los modelos de Lucid.

Ejecutar acciones después de guardar un modelo en AdonisJS
Photo by Vipul Jha / Unsplash

Este es uno de los primeros casos de uso que he necesitado de AdonisJS que es un poco diferente a cómo lo hacemos en Laravel.

En mi caso, necesitaba generar los embeddings (esto será para otra serie de posts) de artículos de blog para crear un buscador inteligente. Estos embeddings tienen que ser (re)generados cada vez que el modelo se crea o se actualiza.

En Laravel, habría hecho esto a través de un event listener, pero en Adonis se hace a través de hooks en los modelos. Para ello, hay que importar afterSave desde Lucid y usarlo como decorator de la función que queremos ejecutar tras el guardado:

import { BaseModel, afterSave } from '@ioc:Adonis/Lucid/Orm'

export default class EmbeddableModel extends BaseModel {
  @afterSave()
  public static async embed(model: EmbeddableModel) {
    // generate embeddings...
  }
}

Y eso es todo :-) Ahora cada vez que guardes el modelo se ejecutará la función embed, recibiendo el modelo que se acaba de crear / guardar.