const { Sequelize, DataTypes } = require('sequelize'); class Table { constructor (model) { this.model = model; } promiseMode () { return new TablePromise(this.model); } get (cb, condition = null) { this.model.findAll({...(!condition ? {} : condition), raw: true }) .then(data => cb(null, data)).catch(err => cb(err, null)); } add (item, cb) { this.model.create(item).then(i => cb(null, i)) .catch(err => cb(err, null)); } remove (condition, cb) { this.model.destroy(condition).then(i => cb(null, i)) .catch(err => cb(err, null)); } edit (data, condition, cb) { this.model.update(data, condition).then(i => cb(null, i)) .catch(err => cb(err, null)); } } class TablePromise extends Table { async get (condition) { return await this.model.findAll({...(!condition ? {} : condition), raw: true }); } async add (item) { //setTimeout(() => this.model.findAll(), 0); return await this.model.create(item); } async remove (condition) { return await this.model.destroy(condition); } async edit (data, condition) { return await this.model.update(data, condition); } } class Database { constructor ( address, port, username, password, database ) { this.sequelize = new Sequelize(`postgres://${username}:${password}@${address}:${port}/${database}`); this.sequelize.authenticate().then(() => { this.authors = new Table( this.sequelize.define('authors', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }, name: { type: DataTypes.TEXT, allowNull: false }, time : { type: DataTypes.INTEGER, allowNull: false } }, { freezeTableName: true, timestamps: false }) ); this.muzic = new Table( this.sequelize.define('muzic', { id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true, allowNull: false }, name: { type: DataTypes.TEXT, allowNull: false }, author_id: { type: DataTypes.INTEGER, allowNull: false }, data: { type: DataTypes.BLOB('long') }, time : { type: DataTypes.INTEGER, allowNull: false } }, { freezeTableName: true, timestamps: false }) ); console.log('Database successful connected!') }, (err) => { throw err; }) } } module.exports = { Database }