forked from hippoz/brainlet
74 lines
No EOL
1.7 KiB
JavaScript
Executable file
74 lines
No EOL
1.7 KiB
JavaScript
Executable file
const config = require('../config');
|
|
|
|
const mongoose = require('mongoose');
|
|
|
|
const userSchema = new mongoose.Schema({
|
|
username: String,
|
|
password: String,
|
|
email: String,
|
|
role: String,
|
|
color: String
|
|
});
|
|
|
|
userSchema.method('getPublicObject', function() {
|
|
return {
|
|
username: this.username,
|
|
permissionLevel: config.roleMap[this.role],
|
|
role: this.role,
|
|
color: this.color,
|
|
_id: this._id
|
|
}
|
|
});
|
|
|
|
userSchema.method('getFullObject', function() {
|
|
return {
|
|
username: this.username,
|
|
password: this.password,
|
|
email: this.email,
|
|
permissionLevel: config.roleMap[this.role],
|
|
role: this.role,
|
|
color: this.color,
|
|
_id: this._id
|
|
}
|
|
});
|
|
|
|
const User = mongoose.model('User', userSchema);
|
|
|
|
// NOTE(hippoz): These are all actually material design colors, taken from https://material-ui.com/customization/color/#playground
|
|
const colors = [
|
|
'#f44336',
|
|
'#e91e63',
|
|
'#9c27b0',
|
|
'#673ab7',
|
|
'#3f51b5',
|
|
'#2196f3',
|
|
'#03a9f4',
|
|
'#00bcd4',
|
|
'#009688',
|
|
'#4caf50',
|
|
'#8bc34a',
|
|
'#cddc39',
|
|
'#ffeb3b',
|
|
'#ffc107',
|
|
'#ff9800',
|
|
'#ff5722'
|
|
];
|
|
|
|
User.generateColorFromUsername = function(username) {
|
|
let sum = 0;
|
|
for (let i in username) {
|
|
sum += username.charCodeAt(i);
|
|
}
|
|
const colorIndex = sum % colors.length;
|
|
return colors[colorIndex];
|
|
};
|
|
|
|
User.findByUsername = async function(username) {
|
|
return await User.findOne({ username }).exec();
|
|
};
|
|
|
|
User.getPulicFields = function() {
|
|
return 'username role _id color';
|
|
};
|
|
|
|
module.exports = User; |