var Sequelize = require('sequelize'); var sequelize = new Sequelize('database', null, null, { dialect: 'sqlite', pool: { max: 5, min: 0, idle: 10000 }, storage: 'database.sqlite' }); var Note = sequelize.define('Note', { id: { type: Sequelize.STRING(6), unique: true, primaryKey: true }, deprecatedId: Sequelize.TEXT, text: Sequelize.TEXT, published: { type: Sequelize.DATE, defaultValue: Sequelize.NOW }, edited: { type: Sequelize.DATE, allowNull: true, defaultValue: null }, password: Sequelize.STRING(16), views: { type: Sequelize.INTEGER, defaultValue: 0 } }); sequelize.sync(); module.exports.getNote = id => Note.findById(id); module.exports.getNoteId = deprecatedId => Note.findOne({ where: { deprecatedId: deprecatedId } }); var generateId = () => [1, 1, 1, 1, 1] .map(() => { var code = Math.floor(Math.random() * 36); return String.fromCharCode(code + (code < 10 ? 48 : 87)); }) .join(''); var getFreeId = () => { var id = generateId(); return Note.findById(id).then(result => result ? getFreeId() : id); }; module.exports.addNote = (note, password) => getFreeId().then(id => Note.create({ id: id, text: note, password: password })); var passwordCheck = (note, password, callback) => (!note || note.password.length === 0 || note.password !== password) ? new Promise((resolve, reject) => reject({ message: 'Password is wrong' })) : callback(); module.exports.updateNote = (id, password, text) => Note.findById(id).then(note => passwordCheck(note, password, () => { note.text = text; note.edited = new Date(); return note.save(); })); module.exports.deleteNote = (id, password) => Note.findById(id).then(note => passwordCheck(note, password, () => note.destroy()));