var connection = require("./connection"); var connectionAsync = require("./connectionasync"); var hash = require("../authentication/hash"); var dbRights = require("./user-rights"); var async = require("async"); var dbUsers = this; exports.getUser = function(userIdOrUserName, callback){ console.log(userIdOrUserName + " -- " + typeof userIdOrUserName); var queryString = "SELECT * FROM Users WHERE UserName = ? AND DeletedDate IS NULL;"; if (typeof userIdOrUserName == "number"){ queryString = "SELECT * FROM Users WHERE Id = ? AND DeletedDate IS NULL;"; } connection.query(queryString,[userIdOrUserName],function(error,rows,fields){ if (error){ console.log(error); callback(error); return; } var user = null; if (rows.length > 0){ user = {}; user.id = rows[0].Id; user.userName = rows[0].UserName; user.email = rows[0].Email; user.password = rows[0].Password; user.deletedDate = rows[0].deletedDate; user.verified = rows[0].Verified; user.verifiedDate = rows[0].VerifiedDate; user.verificationCode = rows[0].VerificationCode; user.verificationCodeDate = rows[0].verificationCodeDate; } console.log(user); //console.log(fields); callback(null,user); }); } exports.getAll = async function() { const queryResult = await connectionAsync.query('SELECT * FROM Users WHERE DeletedDate IS NULL;'); const users = []; if (queryResult && queryResult.rows && queryResult.rows.length > 0) { for(var i = 0; i < queryResult.rows.length; i++) { users.push(rowToUser(queryResult.rows[i])); } } return users; } exports.getUser2 = async function(email) { const queryResult = await connectionAsync.query('SELECT * FROM Users WHERE UserName = ? AND DeletedDate IS NULL;', [email]); if (queryResult && queryResult.rows && queryResult.rows.length > 0) { const row = queryResult.rows[0]; return rowToUser(row); } else { return null; } } function rowToUser(row) { const user = {}; user.id = row.Id; user.userName = row.UserName; user.password = row.Password; user.firstName = row.FirstName; user.lastName = row.LastName; user.street = row.Street; user.city = row.City; user.state = row.State; user.zip = row.Zip; user.country = row.Country; user.emailVerified = row.EmailVerified; user.emailVerificationCode = row.EmailVerificationCode; user.emailVerificationCodeDate = row.EmailVerificationCodeDate; user.federated = row.Federated; user.federationCode = row.federationCode; return user; } exports.createUser = async function(firstName, lastName, street, city, state, zip, country) { // Check to see if email already exists const tempUserName = firstName + " " + lastName; const existing = await this.getUser2(tempUserName); if (existing) { throw `${tempUserName} already exists`; } const newUser = { CreatedDate: new Date(), ModifiedDate: new Date(), UserName: tempUserName, FirstName: firstName, LastName: lastName, Street: street, City: city, State: state, Zip: zip, Country: country, EmailVerified: false, Federated: false, FederationCode: hash.createVerificationCode(), Password: '' }; const newUserResult = await connectionAsync.nonQuery('INSERT INTO Users Set ?', newUser); return await this.getUser2(tempUserName); } exports.deleteUser = function(userIdOrUserObject, callback){ if (typeof userIdOrUserObject !== "number"){ userIdOrUserObject = userIdOrUserObject.id; } connection.query("UPDATE Users SET DeletedDate = CURRENT_TIMESTAMP WHERE Id = ?;",[userIdOrUserObject],function(error,result){ if (error){ callback(error); return; } callback(null,result); }); }