Skip to content

Instantly share code, notes, and snippets.

@itacirgabral
Last active November 27, 2019 15:06
Show Gist options
  • Save itacirgabral/648693768ec0409038139c97724adeba to your computer and use it in GitHub Desktop.
Save itacirgabral/648693768ec0409038139c97724adeba to your computer and use it in GitHub Desktop.
module.exports = {
name: "produto",
actions: {
criarNovo: {
cache: false,
$$strict: true,
params: {
nome: {
type: "string",
min: 8,
max: 255,
},
preço: {
type: "number",
positive: true,
}
},
async handler({ params }){
const { nome, preço } = params
let id;
let err = null;
let item = null;
let notNew = true;
do {
id = mkid()
;[err, item] = await db.get(`/id/${ id }`)
.then(item => [null, item])
.catch(err => [err])
if (
err &&
err.message &&
typeof(err.message) === 'string' &&
err.message.slice(0, 26) === 'Key not found in database '
) {
notNew = false
err = null;
}
if (err && notNew) {
notNew = false;
}
} while ( notNew );
if (err) {
return Promise.reject(err)
}
;[err, item] = await Promise.all([
db.put(`/id/${ id }`, { id, nome, preço }),
db.put(`/nome/${ nome }/${ id }`, { id, nome, preço }),
])
.then(item => [null, item])
.catch(err => [err])
if (err) {
return Promise.reject(err)
} else {
ctx.emit('produto.foiCriado', { id, nome })
return Promise.resolve({ id, nome })
}
}
},
stopped() {
db.close()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment