From feee867ee4381000f011e627c442abe02a5959f9 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Mon, 7 May 2018 16:30:52 +0800 Subject: [PATCH] fix(core): set all db field 'score' to Decimal128 type and logic support --- config/lib/app.js | 8 +++++ .../models/announce-log.server.model.js | 3 ++ .../models/user-days-log.server.model.js | 3 ++ .../models/user-months-log.server.model.js | 3 ++ .../controllers/admin.server.controller.js | 10 +++--- .../users/server/models/user.server.model.js | 5 ++- package.json | 31 ++++++++++--------- 7 files changed, 43 insertions(+), 20 deletions(-) diff --git a/config/lib/app.js b/config/lib/app.js index e77d6496..b3a26908 100644 --- a/config/lib/app.js +++ b/config/lib/app.js @@ -4,6 +4,7 @@ * Module dependencies. */ var config = require('../config'), + mongoose = require('mongoose'), mongooseService = require('./mongoose'), express = require('./express'), logger = require('./logger'), @@ -30,11 +31,18 @@ module.exports.init = function init(callback) { }); }; +module.exports.setDecimal128Prototype = function () { + mongoose.Types.Decimal128.prototype.toJSON = function () { + return parseFloat(this.valueOf()); + }; +}; + module.exports.start = function start(callback) { var _this = this; _this.init(function (app, mongooseConn, config) { + _this.setDecimal128Prototype(); // Start the app by listening on at app.listen(config.port, config.host, function () { // Create server URL diff --git a/modules/data-logs/server/models/announce-log.server.model.js b/modules/data-logs/server/models/announce-log.server.model.js index d61b661a..43c979a7 100644 --- a/modules/data-logs/server/models/announce-log.server.model.js +++ b/modules/data-logs/server/models/announce-log.server.model.js @@ -52,6 +52,9 @@ var AnnounceLogSchema = new Schema({ }, write_score: { type: Schema.Types.Decimal128, + get: function (v) { + return parseFloat(v) || 0; + }, default: 0 }, isVip: { diff --git a/modules/data-logs/server/models/user-days-log.server.model.js b/modules/data-logs/server/models/user-days-log.server.model.js index 165e97a7..75066dd6 100644 --- a/modules/data-logs/server/models/user-days-log.server.model.js +++ b/modules/data-logs/server/models/user-days-log.server.model.js @@ -36,6 +36,9 @@ var UserDaysLogSchema = new Schema({ }, score: { type: Schema.Types.Decimal128, + get: function (v) { + return parseFloat(v) || 0; + }, default: 0 }, createdAt: { diff --git a/modules/data-logs/server/models/user-months-log.server.model.js b/modules/data-logs/server/models/user-months-log.server.model.js index 108878d9..befb5519 100644 --- a/modules/data-logs/server/models/user-months-log.server.model.js +++ b/modules/data-logs/server/models/user-months-log.server.model.js @@ -32,6 +32,9 @@ var UserMonthsLogSchema = new Schema({ }, score: { type: Schema.Types.Decimal128, + get: function (v) { + return parseFloat(v) || 0; + }, default: 0 }, createdAt: { diff --git a/modules/users/server/controllers/admin.server.controller.js b/modules/users/server/controllers/admin.server.controller.js index edddc54e..fba9d0c8 100644 --- a/modules/users/server/controllers/admin.server.controller.js +++ b/modules/users/server/controllers/admin.server.controller.js @@ -5,6 +5,7 @@ */ var path = require('path'), config = require(path.resolve('./config/config')), + dataLog = require(path.resolve('./config/lib/data-log')), mongoose = require('mongoose'), objectId = require('mongodb').ObjectId, User = mongoose.model('User'), @@ -13,6 +14,7 @@ var path = require('path'), Complete = mongoose.model('Complete'), moment = require('moment'), async = require('async'), + scoreUpdate = require(path.resolve('./config/lib/score')).update, errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller')), traceLogCreate = require(path.resolve('./config/lib/tracelog')).create; @@ -25,6 +27,7 @@ var appConfig = config.meanTorrentConfig.app; var serverMessage = require(path.resolve('./config/lib/server-message')); var serverNoticeConfig = config.meanTorrentConfig.serverNotice; var announceConfig = config.meanTorrentConfig.announce; +var scoreConfig = config.meanTorrentConfig.score; /** * Show the current user @@ -289,11 +292,9 @@ exports.updateUserStatus = function (req, res) { */ exports.updateUserScore = function (req, res) { var user = req.model; + var sv = parseFloat(req.body.userScore.toFixed(2)); - user.score = user.score + parseInt(req.body.userScore, 10); - if (user.score < 0) { - user.score = 0; - } + user.score = user.score + sv; user.save(function (err) { if (err) { return res.status(422).send({ @@ -303,6 +304,7 @@ exports.updateUserScore = function (req, res) { res.json(user); + dataLog.scoreLog(user, sv); //create trace log traceLogCreate(req, traceConfig.action.AdminUpdateUserScore, { user: user._id, diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 26ff171f..e67bbc94 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -168,8 +168,11 @@ var UserSchema = new Schema({ default: false }, score: { - type: Number, + type: Schema.Types.Decimal128, set: setNumberValueToZero, + get: function (v) { + return parseFloat(v) || 0; + }, default: 0 }, uploaded: { diff --git a/package.json b/package.json index 46982b8b..d20fc3d8 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,13 @@ "acl": "^0.4.11", "amazon-s3-uri": "0.0.3", "async": "~2.5.0", - "aws-sdk": "^2.123.0", + "aws-sdk": "^2.233.1", "bencoding": "0.0.1", "body-parser": "^1.18.2", - "bower": "^1.8.2", + "bower": "^1.8.4", "chalk": "~2.1.0", "cloudflare-express": "^1.0.1", - "compression": "~1.7.0", + "compression": "^1.7.2", "connect-flash": "~0.1.1", "connect-mongo": "^2.0.1", "cookie-parser": "~1.4.1", @@ -56,7 +56,7 @@ "eslint": "^2.13.1", "eslint-config-airbnb": "~6.0.2", "eslint-plugin-react": "^4.3.0", - "express": "^4.16.2", + "express": "^4.16.3", "express-hbs": "~1.0.4", "express-session": "^1.15.6", "generate-password": "~1.3.0", @@ -65,8 +65,8 @@ "gulp-angular-templatecache": "~2.0.0", "gulp-autoprefixer": "~4.0.0", "gulp-concat": "~2.6.0", - "gulp-csslint": "~1.0.0", - "gulp-csso": "~3.0.0", + "gulp-csslint": "^1.0.1", + "gulp-csso": "^3.0.1", "gulp-eslint": "~3.0.1", "gulp-imagemin": "~3.3.0", "gulp-less": "~3.3.0", @@ -83,19 +83,20 @@ "inbox": "^1.1.59", "irc": "^0.5.2", "jasmine-core": "~2.7.0", - "lodash": "~4.17.4", + "lodash": "^4.17.10", "lusca": "~1.5.1", "mailparser": "^2.2.0", "method-override": "~2.3.8", "mocha": "~3.4.2", - "moment": "^2.18.1", + "moment": "^2.22.1", + "mongodb": "^3.0.7", "mongodb-backup": "^1.6.9", "mongoose": "^5.0.17", "morgan": "~1.8.1", "moviedb": "^0.2.10", "multer": "~1.3.0", "multer-s3": "^2.7.0", - "node-sass": "^4.5.3", + "node-sass": "^4.9.0", "nodemailer": "~4.0.1", "nt": "^0.5.4", "owasp-password-strength-test": "~1.3.0", @@ -108,10 +109,10 @@ "passport-paypal-openidconnect": "~0.1.1", "passport-twitter": "~1.0.4", "run-sequence": "~2.1.0", - "serve-favicon": "^2.4.5", - "sharp": "^0.19.0", + "serve-favicon": "^2.5.0", + "sharp": "^0.19.1", "shelljs": "^0.8.1", - "snyk": "^1.34.3", + "snyk": "^1.78.1", "socket.io": "~2.0.2", "sprintf-js": "^1.1.1", "validator": "~8.0.0", @@ -120,13 +121,13 @@ }, "devDependencies": { "coveralls": "~2.13.0", - "gulp-istanbul": "~1.1.1", + "gulp-istanbul": "^1.1.3", "gulp-mocha": "~3.0.1", "gulp-protractor": "~4.0.0", "karma": "^1.7.1", "karma-chrome-launcher": "~2.2.0", - "karma-coverage": "~1.1.1", - "karma-jasmine": "~1.1.0", + "karma-coverage": "^1.1.2", + "karma-jasmine": "^1.1.2", "karma-mocha-reporter": "^2.2.4", "karma-ng-html2js-preprocessor": "~1.0.0", "semver": "~5.4.1",