import * as mongoose from 'mongoose'; const UserSchema: mongoose.Schema = new mongoose.Schema({ apiKey: { type: String, required: true }, apiToken: { type: String, required: true }, username: { type: String, required: true }, uuid: { type: String, required: true }, displayname: { type: String, required: true }, email: { type: String, required: true, lowercase: true }, password: { type: String, required: true }, date: { type: Date, default: Date.now }, following: { type: [ { ref: 'User', type: mongoose.Schema.Types.ObjectId } ], required: true }, followedBy: { type: [ { ref: 'User', type: mongoose.Schema.Types.ObjectId } ], required: true }, description: { type: String, default: 'Hi, I\'m new to Speedcubing Online!' }, profileImageUrl: { type: String, default: '/images/user_placeholder.png' }, verified: { type: Boolean, default: false } }); UserSchema.methods.follow = function(user, callback) { try { this.update({ $push: { following: user._id } }); user.update({ $push: { followedBy: this._id } }); callback(null); } catch(err) { callback(err); } } UserSchema.methods.unfollow = function(user, callback) { try { this.update({ $pull: { following: user } }); user.update({ $pull: { followedBy: this } }); callback(null); } catch(err) { callback(err); } } export const User = mongoose.model('User', UserSchema);