Mongoose refer to a ES6 class getter in the schema

Viewed 74

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?

0 Answers
Related