I'm trying to understand how this schemas work. I've tried to use a ES6 class with getters that I can use in the schema and have everything centralized in the model, so whenever I fetch this data everything will be there for me. This is the code that I have.
import {mongoose, dotenv, Double} from './model';
// Load the configuration for the character
dotenv.config({path: __dirname + '/../common/config/character.env'});
class Character {
// Returns the character's strength
get strength() {
return this.strength;
}
get calculateExperience() {
const currentLevel = this.level;
console.log('here');
return (currentLevel * currentLevel + currentLevel + 3) * 4;
}
get calculateBaseDamage() {
}
}
// Character attributes.
const attributes = {
strength: {
type: Number,
match: [
/^\d+$/,
'Please enter a valid number'
],
default: process.env.STARTING_STRENGTH
},
endurance: {
type: Number,
match: [
/^\d+$/,
'Please enter a valid number'
],
default: process.env.STARTING_ENDURANCE
},
vitality: {
type: Number,
match: [
/^\d+$/,
'Please enter a valid number'
],
default: process.env.STARTING_VITALITY
},
available_points: {
type: Number,
default: 6
}
};
// Character equipment schema
const EquipmentSchema = new mongoose.Schema({
head: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
body: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
gloves: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
boots: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
leftRight: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
rightRing: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Items'
},
});
// Character schema
const CharacterSchema = new mongoose.Schema({
name: {
type: String,
required: [true, 'Please add a name'],
match: [
/^[a-zA-Z0-9_-]{3,16}$/,
'Please enter a valid name'
]
},
level: {
type: Number,
default: process.env.STARTING_LEVEL
},
experience: {
type: Number,
default: process.env.STARTING_EXPERIENCE,
},
health: {
type: Double,
default: process.env.STARTING_HEALTH,
},
isKing: {
type: Boolean,
default: false,
},
tribe: {
required: [true, 'Please, select a tribe'],
type: mongoose.Schema.Types.ObjectId,
ref: 'tribes'
},
armor: {
type: Number,
match: [
/^\d+$/,
'Please enter a valid number'
],
default: process.env.STARTING_ARMOR
},
damage: {
type: Double,
match: [
/^\d+$/,
'Please enter a valid number'
],
default: process.env.STARTING_DAMAGE
},
adventure_points: {
type: Number,
default: 12,
},
last_adventure: {
type: Date,
default: Date.now,
},
next_level_experience: {
type: Number,
get: calculateExperience
},
attributes,
equipment: EquipmentSchema
}, {toJSON: {getters: true}});
CharacterSchema.loadClass(Character);
export default mongoose.model('Character', CharacterSchema);
I'm just not sure how to refer to the the ES6 class getter. Is there a specific convention of doing this?