From 677f4f9e9b4540155f45eceb6079e89c4f0cc3b7 Mon Sep 17 00:00:00 2001 From: OldHawk Date: Wed, 6 Jun 2018 02:28:32 +0800 Subject: [PATCH] feat(dataLogs): show user uploaded/downloaded data history --- modules/core/client/app/trans-string-en.js | 2 ++ modules/core/client/app/trans-string-zh-tw.js | 4 ++- modules/core/client/app/trans-string-zh.js | 4 ++- .../data-logs.client.controller.js | 33 ++++++++++++++---- .../data-logs/client/less/data-center.less | 8 ++++- .../user-announce-logs.client.service.js | 34 +++++++++++++++++++ .../data-downloaded-history.client.view.html | 22 ++++++++++-- .../data-uploaded-history.client.view.html | 22 ++++++++++-- .../data-logs.server.controller.js | 15 ++++++++ .../policies/data-logs.server.policy.js | 3 +- .../server/routes/data-logs.server.routes.js | 3 ++ 11 files changed, 135 insertions(+), 15 deletions(-) create mode 100644 modules/data-logs/client/services/user-announce-logs.client.service.js diff --git a/modules/core/client/app/trans-string-en.js b/modules/core/client/app/trans-string-en.js index 7a62ecc8..af22204b 100644 --- a/modules/core/client/app/trans-string-en.js +++ b/modules/core/client/app/trans-string-en.js @@ -1500,6 +1500,8 @@ DAILY_CHECK_IN: 'Daily check in', SEED_TIMED: 'Torrent seeding timed increased score {{tid}}', SEED_UP_DOWNLOAD: 'Torrent seeding and leeching data transfer score {{tid}}' + ANNOUNCE_UPLOAD_LOGS: 'Client announce uploaded data', + ANNOUNCE_DOWNLOAD_LOGS: 'Client announce downloaded data' }, //status pages diff --git a/modules/core/client/app/trans-string-zh-tw.js b/modules/core/client/app/trans-string-zh-tw.js index bd2659a2..02ae637a 100644 --- a/modules/core/client/app/trans-string-zh-tw.js +++ b/modules/core/client/app/trans-string-zh-tw.js @@ -1499,7 +1499,9 @@ ACTIVE_IDLE_ACCOUNT: '重新激活帳戶狀態', DAILY_CHECK_IN: '每日簽到', SEED_TIMED: '做種時間獲得的積分 {{tid}}', - SEED_UP_DOWNLOAD: '上傳或下載數據交換積分 {{tid}}' + SEED_UP_DOWNLOAD: '上傳或下載數據交換積分 {{tid}}', + ANNOUNCE_UPLOAD_LOGS: '客戶端上報的上傳數據', + ANNOUNCE_DOWNLOAD_LOGS: '客戶端上報的下載數據' }, //status pages diff --git a/modules/core/client/app/trans-string-zh.js b/modules/core/client/app/trans-string-zh.js index c518387f..9a23662b 100644 --- a/modules/core/client/app/trans-string-zh.js +++ b/modules/core/client/app/trans-string-zh.js @@ -1499,7 +1499,9 @@ ACTIVE_IDLE_ACCOUNT: '重新激活帐户状态', DAILY_CHECK_IN: '每日签到', SEED_TIMED: '做种时间获得的积分 {{tid}}', - SEED_UP_DOWNLOAD: '上传或下载数据交换积分 {{tid}}' + SEED_UP_DOWNLOAD: '上传或下载数据交换积分 {{tid}}', + ANNOUNCE_UPLOAD_LOGS: '客户端上报的上传数据', + ANNOUNCE_DOWNLOAD_LOGS: '客户端上报的下载数据' }, //status pages diff --git a/modules/data-logs/client/controllers/data-logs.client.controller.js b/modules/data-logs/client/controllers/data-logs.client.controller.js index a516c396..240d3561 100644 --- a/modules/data-logs/client/controllers/data-logs.client.controller.js +++ b/modules/data-logs/client/controllers/data-logs.client.controller.js @@ -6,10 +6,10 @@ .controller('DataCenterController', DataCenterController); DataCenterController.$inject = ['$scope', '$state', '$translate', '$timeout', 'Authentication', '$window', 'MeanTorrentConfig', 'NotifycationService', - 'UserDaysLogsService', 'UserMonthsLogsService', '$rootScope', 'moment', 'DebugConsoleService', '$filter', 'UserScoreLogsService']; + 'UserDaysLogsService', 'UserMonthsLogsService', '$rootScope', 'moment', 'DebugConsoleService', '$filter', 'UserScoreLogsService', 'UserAnnounceLogsService']; function DataCenterController($scope, $state, $translate, $timeout, Authentication, $window, MeanTorrentConfig, NotifycationService, - UserDaysLogsService, UserMonthsLogsService, $rootScope, moment, mtDebug, $filter, UserScoreLogsService) { + UserDaysLogsService, UserMonthsLogsService, $rootScope, moment, mtDebug, $filter, UserScoreLogsService, UserAnnounceLogsService) { var vm = this; vm.user = Authentication.user; vm.itemsPerPageConfig = MeanTorrentConfig.meanTorrentConfig.itemsPerPage; @@ -216,14 +216,35 @@ UserScoreLogsService.query({ userId: vm.user._id }, function (items) { - vm.userScoreLogsData = items; - + vm.userLogsData = items; vm.buildPager(); }, function (res) { NotifycationService.showErrorNotify(res.data.message, 'DATA_CENTER.GET_USER_LOGS_ERROR'); }); }; + /** + * getUserAnnounceHistory + */ + vm.getUserAnnounceHistory = function (status) { + UserAnnounceLogsService.query({ + userId: vm.user._id + }, function (items) { + if (status === 'seeding') { + vm.userLogsData = items.filter(function (it) { + return it.write_uploaded > 0; + }); + } else { + vm.userLogsData = items.filter(function (it) { + return it.write_downloaded > 0; + }); + } + vm.buildPager(); + }, function (res) { + NotifycationService.showErrorNotify(res.data.message, 'DATA_CENTER.GET_USER_LOGS_ERROR'); + }); + + }; /** * buildLogsPager @@ -239,14 +260,13 @@ * figureOutItemsToDisplay */ vm.figureOutItemsToDisplay = function (callback) { - vm.filteredItems = vm.userScoreLogsData; + vm.filteredItems = vm.userLogsData; vm.filterLength = vm.filteredItems.length; var begin = ((vm.currentPage - 1) * vm.itemsPerPage); var end = begin + vm.itemsPerPage; vm.pagedItems = vm.filteredItems.slice(begin, end); $('.use-logs-list-ol').prop('start', begin + 1); - mtDebug.info(vm.pagedItems); if (callback) callback(); }; @@ -268,6 +288,5 @@ }); }); }; - } }()); diff --git a/modules/data-logs/client/less/data-center.less b/modules/data-logs/client/less/data-center.less index 74f58c80..ea1afc3d 100644 --- a/modules/data-logs/client/less/data-center.less +++ b/modules/data-logs/client/less/data-center.less @@ -9,7 +9,9 @@ } .use-logs-list { padding: 0 20px; - .score-value { + .score-value, + .upload-value, + .download-value { min-width: 80px; text-align: center; display: inline-block; @@ -33,6 +35,10 @@ color: @brand-danger; } } + .upload-value, + .download-value { + min-width: 100px; + } .use-logs-list-ol { line-height: 2.2; li { diff --git a/modules/data-logs/client/services/user-announce-logs.client.service.js b/modules/data-logs/client/services/user-announce-logs.client.service.js new file mode 100644 index 00000000..1111c762 --- /dev/null +++ b/modules/data-logs/client/services/user-announce-logs.client.service.js @@ -0,0 +1,34 @@ +(function () { + 'use strict'; + + // Users service used for communicating with the users REST endpoint + angular + .module('dataLogs.services') + .factory('UserAnnounceLogsService', UserAnnounceLogsService); + + UserAnnounceLogsService.$inject = ['$resource', 'CacheFactory']; + + function UserAnnounceLogsService($resource, CacheFactory) { + var userDataLogsCache = CacheFactory.get('userDataLogsCache') || CacheFactory.createCache('userDataLogsCache'); + var removeCache = function (res) { + userDataLogsCache.removeAll(); + return res.resource; + }; + + var logs = $resource('/api/userAnnounceLogs/:userId', { + userId: '@userId' + }, { + get: { + method: 'GET', + cache: userDataLogsCache + }, + query: { + method: 'GET', + isArray: true, + cache: userDataLogsCache + } + }); + + return logs; + } +}()); diff --git a/modules/data-logs/client/views/data-downloaded-history.client.view.html b/modules/data-logs/client/views/data-downloaded-history.client.view.html index 260f760a..e9606fe7 100644 --- a/modules/data-logs/client/views/data-downloaded-history.client.view.html +++ b/modules/data-logs/client/views/data-downloaded-history.client.view.html @@ -1,5 +1,5 @@
-
+
@@ -8,8 +8,26 @@
-
+
+
    +
  1. +  {{l.createdAt | date: 'yyyy-MM-dd HH:mm:ss'}} + - + {{l.write_downloaded | byteFmt: 2}} + - + +
  2. +
+
+
    +
+
diff --git a/modules/data-logs/client/views/data-uploaded-history.client.view.html b/modules/data-logs/client/views/data-uploaded-history.client.view.html index a368188b..74a8453e 100644 --- a/modules/data-logs/client/views/data-uploaded-history.client.view.html +++ b/modules/data-logs/client/views/data-uploaded-history.client.view.html @@ -1,5 +1,5 @@
-
+
@@ -8,8 +8,26 @@
-
+
+
    +
  1. +  {{l.createdAt | date: 'yyyy-MM-dd HH:mm:ss'}} + - + {{l.write_uploaded | byteFmt: 2}} + - + +
  2. +
+
+
    +
+
diff --git a/modules/data-logs/server/controllers/data-logs.server.controller.js b/modules/data-logs/server/controllers/data-logs.server.controller.js index 49b5effd..23faf75f 100644 --- a/modules/data-logs/server/controllers/data-logs.server.controller.js +++ b/modules/data-logs/server/controllers/data-logs.server.controller.js @@ -10,6 +10,7 @@ var path = require('path'), UserDaysLog = mongoose.model('UserDaysLog'), UserMonthsLog = mongoose.model('UserMonthsLog'), ScoreLog = mongoose.model('ScoreLog'), + AnnounceLog = mongoose.model('AnnounceLog'), objectId = require('mongodb').ObjectId, async = require('async'); @@ -49,3 +50,17 @@ exports.getUserScoreLogs = function (req, res) { res.json(logs); }); }; + +/** + * getUserAnnounceLogs + * @param req + * @param res + */ +exports.getUserAnnounceLogs = function (req, res) { + AnnounceLog.find({ + user: objectId(req.params.userId) + }).sort('-createdAt') + .exec(function (err, logs) { + res.json(logs); + }); +}; diff --git a/modules/data-logs/server/policies/data-logs.server.policy.js b/modules/data-logs/server/policies/data-logs.server.policy.js index 7c40b7ce..cbbf18b7 100644 --- a/modules/data-logs/server/policies/data-logs.server.policy.js +++ b/modules/data-logs/server/policies/data-logs.server.policy.js @@ -19,7 +19,8 @@ exports.invokeRolesPolicies = function () { allows: [ {resources: '/api/userDaysLogs/:userId', permissions: ['get']}, {resources: '/api/userMonthsLogs/:userId', permissions: ['get']}, - {resources: '/api/userScoreLogs/:userId', permissions: ['get']} + {resources: '/api/userScoreLogs/:userId', permissions: ['get']}, + {resources: '/api/userAnnounceLogs/:userId', permissions: ['get']} ] } ] diff --git a/modules/data-logs/server/routes/data-logs.server.routes.js b/modules/data-logs/server/routes/data-logs.server.routes.js index 7f0767d9..1ea19b72 100644 --- a/modules/data-logs/server/routes/data-logs.server.routes.js +++ b/modules/data-logs/server/routes/data-logs.server.routes.js @@ -16,4 +16,7 @@ module.exports = function (app) { app.route('/api/userScoreLogs/:userId').all(dataLogsPolicy.isAllowed) .get(dataLogs.getUserScoreLogs); + + app.route('/api/userAnnounceLogs/:userId').all(dataLogsPolicy.isAllowed) + .get(dataLogs.getUserAnnounceLogs); };