UIAngular/Server/src/database/users.js

120 lines
4.0 KiB
JavaScript

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