Dúvida sobre Sequelize: Hooks, ClassMethods

Olá estou com uma dúvida sobre a funcionalidade do hook e class methods, pesquisei quando utilizar e estou um pouco confuso, Quando utilizar eles?

Tenho um exemplo de um model:

const bcrypt = require('bcrypt');
module.exports = (sequelize, DataType) => {

    const User = sequelize.define('tb_users', {
        name: {
            type: DataType.STRING,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        },
        email: {
            type: DataType.STRING,
            allowNull: false,
            unique:true,
            validate: {
                isEmail: true,
                notEmpty: true
            }
        },
        password: {
            type: DataType.STRING,
            allowNull: false,
            validate: {
                notEmpty: true
            }
        }
    },
        {
        hooks:{
            beforeCreate: user => {
                const salt = bcrypt.genSaltSync();
                user.set('password',bcrypt.hashSync(user.password,salt));
                console.log(user.password);
            }
        },
        classMethods:{
            isPassword: (encodedPassword, password) => bcrypt.compareSync(password, encodedPassword)   
        }
    });

    return User;

}; 

Que eu adiciono o meu hash a minha password antes de criar, eu poderia colocar nesse before, uma validação (sobre existir um login já criado no banco de dados)?

Se alguém puder me esclarecer qual o uso principalmente do classMethods e como eu poderia chamar ele no meu controller.

Consegui arrumar tudo:

User.beforeCreate(async(user)=>{
    console.log('entrou em before');
    const result = await User.findOne({
        where:{
            name: user.name
        }
    });
    console.log('depois da consulta');
    console.log(result);
    console.log('imprimiu');
    if(result === null){
        const salt = bcrypt.genSaltSync();
        user.set('password',bcrypt.hashSync(user.password,salt));
        console.log(user.password);
    }else{
        console.log('login existente');
    }
});

Ou seja mesmo com toda essa verificação ele ainda vai criar o usuário existe algum modo de não criar o usuario caso entre dentro do else?