Last active
November 27, 2019 15:06
-
-
Save itacirgabral/648693768ec0409038139c97724adeba to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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