Una parte esencial en la API de Saga es la posibilidad de escribir mensajes en la db.
Hyperdb provee diferentes métodos para escribir data en la db, uno de ellos es:
db.put(key, value, cb)
Como dijimos anteriormente hyperdb es una base de datos key-value, esto quiere decir que si
ejecutamos: .put('/test', 'hi!')
el valor quedara guardado en la key /test
.
🔬 Vieron la /
que agregamos a la key? Hyperdb tiene soporte para namespaces
, similar a redis.
Podemos, a modo de ejemplo, leer todos los valores relacionados a un namespace particular y sus subfolders:
db.put('/test/1', 'hi')
db.put('/test/2', 'how are you?', () => {
db.createReadStream('/test').pipe(printInConsole)
})
// console:
// [ Node(key=test/1, value='hi', seq=1, feed=0)) ]
// [ Node(key=test/2, value='how are you?', seq=2, feed=0)) ]
Definir dos nuevos métodos de instancia para Saga.
ready -> Promise
Método que retorne una promesa y que se resuelve cuando la db estaready
.writeMessage(message: string) -> Promise
Método que recibe como parámetro unstring
y retorna una Promise.
Pero debemos tener en cuenta algunas cosas mas:
- La promise se resuelve cuando se termina la operación de escritura y debe retornar la key del mensaje.
Si la escritura falla, debería hacer un
reject
con el error. - No solo debemos guardar el mensaje sino también información adicional sobre el mismo:
{ key, message, username, timestamp }
- Los mensajes se deben guardar bajo el namespace:
/messages/<messageKey>
. - Las key deben ser únicas.
- La mejor forma de definir una key única es utilizar algún generador de IDs. Te recomendamos que investigues: hyperid
$ npm test ./06