const DataTypes = require('sequelize'); class user { constructor(connection) { this.connection = connection; const Model = DataTypes.Model; class user extends Model { } this.user = user.init({ id: { type: DataTypes.BIGINT, allowNull: false, primaryKey: true, autoIncrement: true }, email: { type: DataTypes.STRING(255), allowNull: false }, password: { type: DataTypes.STRING(255), allowNull: false }, auth_token: { type: DataTypes.STRING(255), allowNull: true }, auth_token_update: { type: DataTypes.INTEGER(11), allowNull: true }, recover_token: { type: DataTypes.STRING(255), allowNull: true }, recover_token_update: { type: DataTypes.INTEGER(11), allowNull: true }, }, { sequelize: connection, modelName: 'user', freezeTableName: true, timestamps: false, tableName: 'user' }); } async getOne(query) { return await this.user.findOne({ where: query }); } async getAll(query) { return await this.user.findAll({ where: query }); } async insertOne(email, password) { let user = await this.getOne({ email: email }) if (user == null) { try { let insert_result = await this.user.create({ email: email, password: password }) try { return { code: 200, message: "user created", result: insert_result } } catch (error) { await this.user.destroy( { where: { email: email } }) return { code: 500, error: 'Internal Server Error' } } } catch (error) { return { code: 500, error: 'Internal Server Error' } } } else { return { code: 400, error: 'Choose another email' } } } async validateToken(auth_token) { var data = await this.getOne({ auth_token: auth_token }) if (data != null) { return data; } else { return null } } async updatePassword(id, pwd) { return await this.update({ password: pwd }, { where: { id: id } }) } async deleteOne(auth_token) { try { let result = await this.user.destroy( { where: { "auth_token": auth_token } }) return { code: 200, message: result } } catch (error) { return { code: 400, error: 'User not found' } } } } module.exports = function (application) { return user; }