Puede que sea mi década de experiencia trabajando en bancos, pero la forma en que concibo el canje de puntos es emitiendo eventos personalizados de valor negativo.
Por ejemplo, digamos que tienes un usuario que quiere canjear puntos por una camiseta, y esa camiseta cuesta 10k puntos. El flujo en tu sistema de canje sería:
-
Comprueba si el usuario tiene suficientes puntos:
curl https://meta.discourse.org/u/falco.json -s | jq . | grep score "gamification_score": 89386, -
Emite un evento de “retiro de puntos”
jo -p user_id="13" date="2023-04-14" points="-10000" description="Canje de camiseta - pedido #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
Querrás envolver esto en un semáforo de algún tipo, ya que este es el ejemplo clásico de uso de esos, pero esa es la esencia del flujo de trabajo propuesto.
Esta es una característica muy reciente, así que házmelo saber si el flujo de trabajo propuesto no funciona correctamente.
Me funciona bien, tanto en el navegador como a través de la API. Es un endpoint de administrador, por lo que necesitas ser un administrador conectado a través del navegador o pasar claves de API como se explica en el OP.
