From 46fb8015a76bbe503d40f91ffcbc7cafdf712125 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Wed, 3 May 2017 18:20:31 +0800 Subject: [PATCH] =?UTF-8?q?overwrite=20user=20model=20toJSON=EF=BC=8C=20ma?= =?UTF-8?q?ke=20is=5Fvip=20vitrual=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/core.server.controller.js | 3 +- .../users/server/models/user.server.model.js | 36 ++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/modules/core/server/controllers/core.server.controller.js b/modules/core/server/controllers/core.server.controller.js index 5898a8cf..4f879d67 100644 --- a/modules/core/server/controllers/core.server.controller.js +++ b/modules/core/server/controllers/core.server.controller.js @@ -23,8 +23,9 @@ exports.renderIndex = function (req, res) { passkey: req.user.passkey, vip_start_at: req.user.vip_start_at, vip_end_at: req.user.vip_end_at, - is_vip: isVip(req.user), + is_vip: req.user.is_vip || isVip(req.user), score: req.user.score, + ratio: req.user.ratio, profileImageURL: req.user.profileImageURL, email: validator.escape(req.user.email), lastName: validator.escape(req.user.lastName), diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 2bb001a1..4b267b72 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -10,7 +10,8 @@ var mongoose = require('mongoose'), crypto = require('crypto'), validator = require('validator'), generatePassword = require('generate-password'), - owasp = require('owasp-password-strength-test'); + owasp = require('owasp-password-strength-test'), + moment = require('moment'); owasp.config(config.shared.owasp); @@ -141,6 +142,10 @@ var UserSchema = new Schema({ type: Number, default: 0 }, + ratio: { + type: Number, + default: 0 + }, seeded: { type: Number, default: 0 @@ -169,6 +174,24 @@ var UserSchema = new Schema({ } }); +/** + * overwrite toJSON + */ +UserSchema.methods.toJSON = function (options) { + var document = this.toObject(options); + document.is_vip = false; + + if (!document.vip_start_at || !document.vip_end_at) { + document.is_vip = false; + } else if (moment(Date.now()) > moment(document.vip_end_at)) { + document.is_vip = false; + } else { + document.is_vip = true; + } + + return document; +}; + /** * Hook a pre save method to hash the password */ @@ -181,6 +204,17 @@ UserSchema.pre('save', function (next) { next(); }); +/** + * Hook a post save method to set the ratio + */ +UserSchema.post('save', function (doc) { + if (doc.uploaded === 0 || doc.downloaded === 0) { + doc.ratio = 0; + } else { + doc.ratio = Math.round((doc.uploaded / doc.downloaded) * 100) / 100; + } +}); + /** * Hook a pre validate method to test the local password */