added validations, callbacks, bcrypt gem