UNPKG

cnpmcore

Version:
145 lines 13.1 kB
"use strict"; 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=