cnpmcore
Version:
145 lines • 13.1 kB
JavaScript
;
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
return function (target, key) { decorator(target, key, paramIndex); }
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DownloadController = void 0;
const tegg_1 = require("@eggjs/tegg");
const egg_errors_1 = require("egg-errors");
const AbstractController_1 = require("./AbstractController");
const PackageUtil_1 = require("../../common/PackageUtil");
const dayjs_1 = __importDefault(require("../../common/dayjs"));
const PackageVersionDownloadRepository_1 = require("../../repository/PackageVersionDownloadRepository");
const DATE_FORMAT = 'YYYY-MM-DD';
let DownloadController = class DownloadController extends AbstractController_1.AbstractController {
async showPackageDownloads(fullname, range) {
const [startDate, endDate] = this.checkAndGetRange(range);
const [scope, name] = (0, PackageUtil_1.getScopeAndName)(fullname);
const pkg = await this.packageRepository.findPackage(scope, name);
if (!pkg)
throw new egg_errors_1.NotFoundError(`${fullname} not found`);
const entities = await this.packageVersionDownloadRepository.query(pkg.packageId, startDate.toDate(), endDate.toDate());
const days = {};
const versions = {};
for (const entity of entities) {
const yearMonth = String(entity.yearMonth);
const prefix = yearMonth.substring(0, 4) + '-' + yearMonth.substring(4, 6);
for (let i = 1; i <= 31; i++) {
const day = String(i).padStart(2, '0');
const field = `d${day}`;
const counter = entity[field];
if (!counter)
continue;
const date = `${prefix}-${day}`;
days[date] = (days[date] || 0) + counter;
if (entity.version === '*') {
// ignore sync data to versions
continue;
}
if (!versions[entity.version])
versions[entity.version] = [];
versions[entity.version].push({ day: date, downloads: counter });
}
}
const downloads = [];
for (const day of Object.keys(days).sort()) {
downloads.push({ day, downloads: days[day] });
}
return {
downloads,
versions,
};
}
async showTotalDownloads(scope, range) {
const [startDate, endDate] = this.checkAndGetRange(range);
const entities = await this.packageVersionDownloadRepository.query(scope, startDate.toDate(), endDate.toDate());
const days = {};
for (const entity of entities) {
const yearMonth = String(entity.yearMonth);
const prefix = yearMonth.substring(0, 4) + '-' + yearMonth.substring(4, 6);
for (let i = 1; i <= 31; i++) {
const day = String(i).padStart(2, '0');
const field = `d${day}`;
const counter = entity[field];
if (!counter)
continue;
const date = `${prefix}-${day}`;
days[date] = (days[date] || 0) + counter;
}
}
const downloads = [];
for (const day of Object.keys(days).sort()) {
downloads.push({ day, downloads: days[day] });
}
return {
downloads,
};
}
checkAndGetRange(range) {
const matchs = /^(\d{4}\-\d{2}\-\d{2}):(\d{4}\-\d{2}\-\d{2})$/.exec(range);
if (!matchs) {
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) format invalid, must be "${DATE_FORMAT}:${DATE_FORMAT}" style`);
}
const start = matchs[1];
const end = matchs[2];
let startDate = (0, dayjs_1.default)(start, DATE_FORMAT, true);
let endDate = (0, dayjs_1.default)(end, DATE_FORMAT, true);
if (!startDate.isValid() || !endDate.isValid()) {
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) format invalid, must be "${DATE_FORMAT}:${DATE_FORMAT}" style`);
}
if (endDate.isBefore(startDate)) {
const tmp = startDate;
startDate = endDate;
endDate = tmp;
}
// max range for one year
const maxDate = startDate.add(1, 'year');
if (endDate.isAfter(maxDate)) {
throw new egg_errors_1.UnprocessableEntityError(`range(${range}) beyond the processable range, max up to "${maxDate.format(DATE_FORMAT)}"`);
}
return [startDate, endDate];
}
};
exports.DownloadController = DownloadController;
__decorate([
(0, tegg_1.Inject)(),
__metadata("design:type", PackageVersionDownloadRepository_1.PackageVersionDownloadRepository)
], DownloadController.prototype, "packageVersionDownloadRepository", void 0);
__decorate([
(0, tegg_1.HTTPMethod)({
path: `/downloads/range/:range/:fullname(${PackageUtil_1.FULLNAME_REG_STRING})`,
method: tegg_1.HTTPMethodEnum.GET,
}),
__param(0, (0, tegg_1.HTTPParam)()),
__param(1, (0, tegg_1.HTTPParam)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], DownloadController.prototype, "showPackageDownloads", null);
__decorate([
(0, tegg_1.HTTPMethod)({
path: '/downloads/:scope/:range',
method: tegg_1.HTTPMethodEnum.GET,
}),
__param(0, (0, tegg_1.HTTPParam)()),
__param(1, (0, tegg_1.HTTPParam)()),
__metadata("design:type", Function),
__metadata("design:paramtypes", [String, String]),
__metadata("design:returntype", Promise)
], DownloadController.prototype, "showTotalDownloads", null);
exports.DownloadController = DownloadController = __decorate([
(0, tegg_1.HTTPController)()
], DownloadController);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRG93bmxvYWRDb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvY29udHJvbGxlci9Eb3dubG9hZENvbnRyb2xsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0NBTXFCO0FBQ3JCLDJDQUFxRTtBQUNyRSw2REFBMEQ7QUFDMUQsMERBQWdGO0FBQ2hGLCtEQUF1QztBQUN2Qyx3R0FBcUc7QUFFckcsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDO0FBRzFCLElBQU0sa0JBQWtCLEdBQXhCLE1BQU0sa0JBQW1CLFNBQVEsdUNBQWtCO0lBUWxELEFBQU4sS0FBSyxDQUFDLG9CQUFvQixDQUFjLFFBQWdCLEVBQWUsS0FBYTtRQUNsRixNQUFNLENBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBRSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1RCxNQUFNLENBQUUsS0FBSyxFQUFFLElBQUksQ0FBRSxHQUFHLElBQUEsNkJBQWUsRUFBQyxRQUFRLENBQUMsQ0FBQztRQUNsRCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxHQUFHO1lBQUUsTUFBTSxJQUFJLDBCQUFhLENBQUMsR0FBRyxRQUFRLFlBQVksQ0FBQyxDQUFDO1FBQzNELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUN4SCxNQUFNLElBQUksR0FBMkIsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sUUFBUSxHQUF5RCxFQUFFLENBQUM7UUFDMUUsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO2dCQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFXLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPO29CQUFFLFNBQVM7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO2dCQUN6QyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssR0FBRyxFQUFFO29CQUMxQiwrQkFBK0I7b0JBQy9CLFNBQVM7aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO29CQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUM3RCxRQUFRLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7YUFDbEU7U0FDRjtRQUNELE1BQU0sU0FBUyxHQUF5QyxFQUFFLENBQUM7UUFDM0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDL0M7UUFFRCxPQUFPO1lBQ0wsU0FBUztZQUNULFFBQVE7U0FDVCxDQUFDO0lBQ0osQ0FBQztJQU1LLEFBQU4sS0FBSyxDQUFDLGtCQUFrQixDQUFjLEtBQWEsRUFBZSxLQUFhO1FBQzdFLE1BQU0sQ0FBRSxTQUFTLEVBQUUsT0FBTyxDQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sRUFBRSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ2hILE1BQU0sSUFBSSxHQUEyQixFQUFFLENBQUM7UUFDeEMsS0FBSyxNQUFNLE1BQU0sSUFBSSxRQUFRLEVBQUU7WUFDN0IsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUF5QixDQUFDO2dCQUMvQyxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFXLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxPQUFPO29CQUFFLFNBQVM7Z0JBQ3ZCLE1BQU0sSUFBSSxHQUFHLEdBQUcsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO2dCQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO2FBQzFDO1NBQ0Y7UUFDRCxNQUFNLFNBQVMsR0FBeUMsRUFBRSxDQUFDO1FBQzNELEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMxQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9DO1FBRUQsT0FBTztZQUNMLFNBQVM7U0FDVixDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQixDQUFDLEtBQWE7UUFDcEMsTUFBTSxNQUFNLEdBQUcsK0NBQStDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDWCxNQUFNLElBQUkscUNBQXdCLENBQUMsU0FBUyxLQUFLLDhCQUE4QixXQUFXLElBQUksV0FBVyxTQUFTLENBQUMsQ0FBQztTQUNySDtRQUNELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsSUFBSSxTQUFTLEdBQUcsSUFBQSxlQUFLLEVBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoRCxJQUFJLE9BQU8sR0FBRyxJQUFBLGVBQUssRUFBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxJQUFJLHFDQUF3QixDQUFDLFNBQVMsS0FBSyw4QkFBOEIsV0FBVyxJQUFJLFdBQVcsU0FBUyxDQUFDLENBQUM7U0FDckg7UUFDRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDL0IsTUFBTSxHQUFHLEdBQUcsU0FBUyxDQUFDO1lBQ3RCLFNBQVMsR0FBRyxPQUFPLENBQUM7WUFDcEIsT0FBTyxHQUFHLEdBQUcsQ0FBQztTQUNmO1FBQ0QseUJBQXlCO1FBQ3pCLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUM1QixNQUFNLElBQUkscUNBQXdCLENBQ2hDLFNBQVMsS0FBSyw4Q0FBOEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDL0Y7UUFDRCxPQUFPLENBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBRSxDQUFDO0lBQ2hDLENBQUM7Q0FDRixDQUFBO0FBcEdZLGdEQUFrQjtBQUVyQjtJQURQLElBQUEsYUFBTSxHQUFFOzhCQUNpQyxtRUFBZ0M7NEVBQUM7QUFNckU7SUFKTCxJQUFBLGlCQUFVLEVBQUM7UUFDVixJQUFJLEVBQUUscUNBQXFDLGlDQUFtQixHQUFHO1FBQ2pFLE1BQU0sRUFBRSxxQkFBYyxDQUFDLEdBQUc7S0FDM0IsQ0FBQztJQUMwQixXQUFBLElBQUEsZ0JBQVMsR0FBRSxDQUFBO0lBQW9CLFdBQUEsSUFBQSxnQkFBUyxHQUFFLENBQUE7Ozs7OERBbUNyRTtBQU1LO0lBSkwsSUFBQSxpQkFBVSxFQUFDO1FBQ1YsSUFBSSxFQUFFLDBCQUEwQjtRQUNoQyxNQUFNLEVBQUUscUJBQWMsQ0FBQyxHQUFHO0tBQzNCLENBQUM7SUFDd0IsV0FBQSxJQUFBLGdCQUFTLEdBQUUsQ0FBQTtJQUFpQixXQUFBLElBQUEsZ0JBQVMsR0FBRSxDQUFBOzs7OzREQXdCaEU7NkJBekVVLGtCQUFrQjtJQUQ5QixJQUFBLHFCQUFjLEdBQUU7R0FDSixrQkFBa0IsQ0FvRzlCIn0=