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

79 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 ? 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
};
}