81 lines
2.6 KiB
JavaScript
81 lines
2.6 KiB
JavaScript
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 ? 1e32 : +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,
|
|
};
|
|
}; |