kodex-music-catalog/api/v1/methods/get-authors.js
2023-10-01 22:31:26 +03:00

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,
};
};