const ApiError = require('../errorClass'); async function checkSyntaxArgs (req, res) { return !!( ( // Проверка поля offset req.query.id === undefined ? true : Number.isInteger(+req.query.offset) ) && ( // Проверка поля offset req.query.offset === undefined ? true : Number.isInteger(+req.query.offset) ) && ( // Проверка поля count req.query.count === undefined ? true : Number.isInteger(+req.query.count) ) && ( // Проверка поля min_date req.query.min_date === undefined ? true : Number.isInteger(+req.query.min_date) ) && ( // Проверка поля max_date req.query.max_date === undefined ? true : Number.isInteger(+req.query.max_date) ) && ( // Проверка поля q. (Ключевые слова для поиска) true // (Проверки нет, query всегда строка, необязательный параметр) ) ) } module.exports = async (req, res) => { if (req.method !== 'GET') { throw new ApiError("METHOD_MUST_BE_GET", { request_method : req.method }); } if (!await checkSyntaxArgs(req, res)) { throw new ApiError("INVALID_OR_UNSYNTAX_PARAMS", { request_method : req.method, params : { id : req.query?.id === undefined ? null : req.query.id, q : req.query?.q === undefined ? null : req.query.q, offset : req.query?.offset === undefined ? null : req.query.offset, count : req.query?.count === undefined ? null : req.query.count, min_date : req.query?.min_date === undefined ? null : req.query.min_date, max_date : req.query?.max_date === undefined ? null : req.query.max_date } }); } const offset = req.query.offset === undefined ? 0 : +req.query.offset; const countFromNull = req.query.count === undefined ? undefined : offset + (+req.query.count); let result = (await global.database.authors.promiseMode().get( req.query.id === undefined ? {} : { id : +req.query.id } )).map(i => ({ id : i.id, name : i.name, date : i.time })); // Если просят выборку по времени if (req.query.min_date || req.query.max_date) { const minDate = req.query.min_date === undefined ? 0 : +req.query.min_date; const maxDate = req.query.max_date === undefined ? 1e+32 : +req.query.max_date; result = result.filter((res) => minDate <= res.date && res.date <= maxDate); } if (req.query?.q !== undefined) { result = result.filter(i => { const search = req.query.q.toLowerCase(); return i.name.toLowerCase().includes(search); }); } result = result.slice(offset, countFromNull); return { count : result.length, items : result }; }