brainlet/models/User.js
2020-12-03 01:46:29 +02:00

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;