UNPKG

cnpmjs.org

Version:

Private npm registry and web for Enterprise, base on MySQL and Simple Store Service

106 lines (96 loc) 2.27 kB
/**! * cnpmjs.org - services/download_total.js * * Copyright(c) fengmk2 and other contributors. * MIT Licensed * * Authors: * fengmk2 <fengmk2@gmail.com> (http://fengmk2.github.com) */ 'use strict'; /** * Module dependencies. */ var DownloadTotal = require('../models').DownloadTotal; exports.getModuleTotal = function* (name, start, end) { var startMonth = parseYearMonth(start); var endMonth = parseYearMonth(end); var rows = yield DownloadTotal.findAll({ where: { date: { gte: startMonth, lte: endMonth }, name: name } }); return formatRows(rows, start, end); }; exports.plusModuleTotal = function* (data) { var yearMonth = parseYearMonth(data.date); // all module download total var row = yield DownloadTotal.find({ where: { name: '__all__', date: yearMonth } }); if (!row) { row = DownloadTotal.build({ name: '__all__', date: yearMonth, }); } var field = 'd' + data.date.substring(8, 10); row[field] += data.count; if (row.isDirty) { yield row.save(); } row = yield DownloadTotal.find({ where: { name: data.name, date: yearMonth, } }); if (!row) { row = DownloadTotal.build({ name: data.name, date: yearMonth, }); } var field = 'd' + data.date.substring(8, 10); row[field] += data.count; if (row.isDirty) { return yield row.save(); } return row; }; exports.getTotal = function* (start, end) { return yield* exports.getModuleTotal('__all__', start, end); }; function parseYearMonth(date) { return Number(date.substring(0, 7).replace('-', '')); } function formatRows(rows, startDate, endDate) { var dates = []; rows.forEach(function (row) { var date = String(row.date); var month = date.substring(4, 6); var year = date.substring(0, 4); var yearMonth = year + '-' + month; for (var i = 1; i <= 31; i++) { var day = i < 10 ? '0' + i : String(i); var field = 'd' + day; var d = yearMonth + '-' + day; var count = row[field]; if (count > 0 && d >= startDate && d <= endDate) { dates.push({ name: row.name, count: count, date: d }); } } }); return dates; }