mirror of
https://github.com/cnodejs/nodeclub.git
synced 2025-12-08 19:55:55 +00:00
86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
var mongoose = require('mongoose');
|
||
var BaseModel = require("./base_model");
|
||
var renderHelper = require('../common/render_helper');
|
||
var Schema = mongoose.Schema;
|
||
var utility = require('utility');
|
||
var _ = require('lodash');
|
||
|
||
var UserSchema = new Schema({
|
||
name: { type: String},
|
||
loginname: { type: String},
|
||
pass: { type: String },
|
||
email: { type: String},
|
||
url: { type: String },
|
||
profile_image_url: {type: String},
|
||
location: { type: String },
|
||
signature: { type: String },
|
||
profile: { type: String },
|
||
weibo: { type: String },
|
||
avatar: { type: String },
|
||
githubId: { type: String},
|
||
githubUsername: {type: String},
|
||
githubAccessToken: {type: String},
|
||
is_block: {type: Boolean, default: false},
|
||
|
||
score: { type: Number, default: 0 },
|
||
topic_count: { type: Number, default: 0 },
|
||
reply_count: { type: Number, default: 0 },
|
||
follower_count: { type: Number, default: 0 },
|
||
following_count: { type: Number, default: 0 },
|
||
collect_tag_count: { type: Number, default: 0 },
|
||
collect_topic_count: { type: Number, default: 0 },
|
||
create_at: { type: Date, default: Date.now },
|
||
update_at: { type: Date, default: Date.now },
|
||
is_star: { type: Boolean },
|
||
level: { type: String },
|
||
active: { type: Boolean, default: false },
|
||
|
||
receive_reply_mail: {type: Boolean, default: false },
|
||
receive_at_mail: { type: Boolean, default: false },
|
||
from_wp: { type: Boolean },
|
||
|
||
retrieve_time: {type: Number},
|
||
retrieve_key: {type: String},
|
||
|
||
accessToken: {type: String},
|
||
});
|
||
|
||
UserSchema.plugin(BaseModel);
|
||
UserSchema.virtual('avatar_url').get(function () {
|
||
var url = this.avatar || ('https://gravatar.com/avatar/' + utility.md5(this.email.toLowerCase()) + '?size=48');
|
||
|
||
// www.gravatar.com 被墙
|
||
url = url.replace('www.gravatar.com', 'gravatar.com');
|
||
|
||
// 让协议自适应 protocol,使用 `//` 开头
|
||
if (url.indexOf('http:') === 0) {
|
||
url = url.slice(5);
|
||
}
|
||
|
||
// 如果是 github 的头像,则限制大小
|
||
if (url.indexOf('githubusercontent') !== -1) {
|
||
url += '&s=120';
|
||
}
|
||
|
||
return url;
|
||
});
|
||
|
||
UserSchema.virtual('isAdvanced').get(function () {
|
||
// 积分高于 700 则认为是高级用户
|
||
return this.score > 700 || this.is_star;
|
||
});
|
||
|
||
UserSchema.index({loginname: 1}, {unique: true});
|
||
UserSchema.index({email: 1}, {unique: true});
|
||
UserSchema.index({score: -1});
|
||
UserSchema.index({githubId: 1});
|
||
UserSchema.index({accessToken: 1});
|
||
|
||
UserSchema.pre('save', function(next){
|
||
var now = new Date();
|
||
this.update_at = now;
|
||
next();
|
||
});
|
||
|
||
mongoose.model('User', UserSchema);
|