rubik-report
Advanced tools
Comparing version 1.0.1 to 1.0.2
{ | ||
"name": "rubik-report", | ||
"version": "1.0.1", | ||
"version": "1.0.2", | ||
"main": "Report.js", | ||
@@ -5,0 +5,0 @@ "repository": "git@github.com:nikitonishe/rubik-report.git", |
@@ -6,11 +6,15 @@ const Rubik = require('rubik-main'); | ||
/** | ||
* Устанавливает зависимости и нициализирует tasks и volumes | ||
* @param {Array|String} volumes Путь или массив путей до папки с заданиями | ||
* Устанавливает зависимости и инициализируем csvGenerators и getSpecificQuery | ||
* @param {Object} csvGenerators Объект с классами формирующими csv | ||
* @param {Object} getSpecificQuery Объект, ключами в котором является название модели, | ||
* a значением функция возвращающая специфические параметры | ||
* запроса. Если для модели не указана функция формирования | ||
* запрос, будет выполнен запрос по умолчанию. См метод getQuery | ||
*/ | ||
constructor ({ csvGenerators, getSpecificQuery }) { | ||
super(); | ||
this.name = 'Report'; | ||
this.name = 'report'; | ||
this.csvGenerators = csvGenerators || {}; | ||
this.getSpecificQuery = getSpecificQuery || {}; | ||
this.dependencies = ['log', 'http', 'storage']; | ||
this.dependencies = ['log', 'storage']; | ||
} | ||
@@ -20,6 +24,2 @@ | ||
* Универсальный метод для формирования csv по существующей коллекции в базе. | ||
* Чтобы добавить новый отчет, необходимо добавить соответствующий класс | ||
* в объект StatsCsvGenerator. Если для поиска необходимо выполнить специфический | ||
* запрос нужно добавить поле с ключем названия модели в объект this.getSpecificQuery, | ||
* значением этого поля должна быть функция возвращающая специфические параметры запроса | ||
* @param {Object} stream Поток в который писать отчет | ||
@@ -31,3 +31,3 @@ * @param {Object} modelName Название модели по которой формируется статистика | ||
async writeCsvToStream ({ stream, modelName, options }) { | ||
const Model = this.rubik.storageModels[modelName]; | ||
const Model = this.storage.models[modelName]; | ||
if (!Model || !this.csvGenerators[modelName]) throw new Error('invalid modelName'); | ||
@@ -61,11 +61,12 @@ | ||
async getHttpMiddleware() { | ||
return this.httpMiddleware.bind(this); | ||
} | ||
async httpMiddleware(req, res, next) { | ||
/** | ||
* Метод в который можно передать аргумент экспрессовской мидлвары | ||
* @param {Object} req Express request | ||
* @param {Object} res Express response | ||
* @param {Function} next Express middleware | ||
*/ | ||
async httpExpressMiddleware(req, res, next) { | ||
try { | ||
const { modelName } = req.params | ||
const Model = this.rubik.storageModels[modelName]; | ||
const Model = this.storage.models[modelName]; | ||
if (!Model || !this.csvGenerators[modelName]) return next(); | ||
@@ -79,3 +80,3 @@ | ||
console.error('CSV generating error', err); | ||
// next нельзя использоать так как мы установили заголовки | ||
// next нельзя использовать так как мы установили заголовки | ||
} | ||
@@ -89,6 +90,15 @@ | ||
/** | ||
* Чтобы добавить новый отчет, необходимо добавить соответствующий класс | ||
* в объект csvGenerators. Если для поиска необходимо выполнить специфический | ||
* запрос нужно добавить поле с ключем названия модели в объект getSpecificQuery, | ||
* значением этого поля должна быть функция возвращающая специфические параметры запроса | ||
* @param {Object} extension Объект с новыми csvGenerators и getSpecificQuery | ||
*/ | ||
use(extension) { | ||
if (Array.isArray(extension.volumes)) { | ||
for (const volume of extension.volumes) { | ||
this.volumes.push(volume); | ||
if (extension) { | ||
for (const name of Object.keys(extension)) { | ||
if (extension[name] && typeof(extension[name]) === 'object' && this[name]) { | ||
Object.Assign(this[name], extension[name]); | ||
} | ||
} | ||
@@ -95,0 +105,0 @@ } |
9233
212