cnpmjs.org
Version:
Private npm registry and web for Enterprise, base on MySQL and Simple Store Service
106 lines (96 loc) • 2.27 kB
JavaScript
/**!
* 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;
}