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 };