Josh Stark 16254ab78e Demotion/Promotion
- Admins can promote/demote other users
2018-08-08 17:39:13 +01:00

191 lines
4.6 KiB
JavaScript

var db = require("../db/mysql");
module.exports = (function() {
var find, findAll, findByUsername, findByEmail, create, updatePreferences,
remove, clearData, promote, demote;
find = function(userId, done) {
db.get().query("CALL User_GetById(?)", userId, function(error, results) {
if (error) {
return done(error);
}
var sqlUser = results[0][0], user = {
id: sqlUser.id,
email: sqlUser.email,
username: sqlUser.username,
password: sqlUser.password,
admin: sqlUser.admin,
preferences: {
fuelUnit: {
id: sqlUser.fuelUnitId,
unit: sqlUser.fuelUnit,
unitName: sqlUser.fuelUnitName
},
distanceUnit: {
id: sqlUser.distanceUnitId,
unit: sqlUser.distanceUnit,
unitName: sqlUser.distanceUnitName
},
fuelConsumptionUnit: {
id: sqlUser.fuelConsumptionUnitId,
unit: sqlUser.fuelConsumptionUnit,
unitName: sqlUser.fuelConsumptionUnitName
},
currencyUnit: {
id: sqlUser.currencyUnitId,
unit: sqlUser.currencyUnit,
unitName: sqlUser.currencyUnitName,
symbol: sqlUser.currencyUnitSymbol
}
}
};
return done(null, user);
});
};
findAll = function(done) {
db.get().query("CALL User_GetAll()", function(error, results) {
if (error) {
return done(error);
}
return done(null, results[0]);
});
};
findByUsername = function(username, done) {
db.get().query("CALL User_GetByUsername(?)", username, function(error, results) {
if (error) {
return done(error);
}
return done(null, results[0][0]);
});
};
findByEmail = function(email, done) {
db.get().query("CALL User_GetByEmail(?)", email, function(error, results) {
if (error) {
return done(error);
}
return done(null, results[0][0]);
});
};
updatePreferences = function(userId, userPreferences, done) {
var values = [
userId,
userPreferences.fuelUnit.id,
userPreferences.fuelConsumptionUnit.id,
userPreferences.distanceUnit.id,
userPreferences.currencyUnit.id
];
db.get().query("CALL User_UpdatePreferencesById(?, ?, ?, ?, ?)", values, function(error, results) {
if (error) {
return done(error);
}
return done();
});
};
create = function(user, done) {
var guid = db.generateGUID(),
values = [
guid,
user.email,
user.username,
user.password
];
db.get().query("CALL User_Insert(?, ?, ?, ?)", values, function(error, results) {
if (error) {
return done(error);
}
return done(null, guid);
});
};
remove = function(user, done) {
db.get().query("CALL User_DeleteById(?)", user, function(error, results) {
if (error || results[0][0].status === 1) {
return done(error);
}
return done();
});
};
clearData = function(user, done) {
db.get().query("CALL User_ClearById(?)", user, function(error, results) {
if (error || results[0][0].status === 1) {
return done(error);
}
return done();
});
};
promote = function(user, done) {
db.get().query("CALL User_PromoteById(?)", user, function(error, results) {
if (error) {
return done(error);
}
return done();
});
};
demote = function(user, done) {
db.get().query("CALL User_DemoteById(?)", user, function(error, results) {
if (error) {
return done(error);
}
return done();
});
};
return {
find,
findAll,
findByUsername,
findByEmail,
create,
updatePreferences,
remove,
clearData,
promote,
demote
};
}());