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

73 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const ApiError = require('../errorClass');
const config = require('../../../config-handler');
async function isAuthorExists (authorId) {
if (!authorId) return false;
return (await global.database.authors.promiseMode().get({ where : { id : authorId } })).length !== 0;
}
async function checkSyntaxArgs (req, res) {
return !!(
( // Проверка поля type.
['author', 'muzic'].indexOf(req.json?.type) !== -1
) &&
( // Проверка поля name.
typeof req.json.name === 'string' && req.json.name.length >= 2 && (
req.json.type === 'muzic' ? true : config().authors_blacklist.filter((blacklisted) => {
return req.json.name.toLowerCase().includes(blacklisted.toLowerCase());
}).length === 0
)
) &&
( // Дополнительные поля для muzic
req.json.type === 'muzic' ? !!( // Для `muzic`
( // Проверка поля author_id.
await isAuthorExists(req.json.author_id)
) &&
( // Проверка поля data. (Передаётся либо ничего, либо строка с base64)
req.json.data === undefined ? true : (
typeof req.json.data === 'string'
)
)
) : true
)
)
}
module.exports = async (req, res) => {
if (req.json === undefined) {
// console.log(req.headers);
throw new ApiError("METHOD_MUST_BE_POST_JSON", {
request_method : req.method,
'content-type' : !req.headers['content-type'] ? null : req.headers['content-type']
});
}
if (!await checkSyntaxArgs(req, res)) {
throw new ApiError("INVALID_OR_UNSYNTAX_PARAMS", {
request_method : req.method,
params : {
type : req.json?.type === undefined ? null : req.json.type,
name : req.json?.name === undefined ? null : req.json.name,
...(req.json?.type === 'muzic' ? ({
author_id : req.json?.author_id === undefined ? null : req.json?.author_id,
data : req.json?.data === undefined ? null : req.json.data,
}) : ({}))
}
});
}
if (req.json.type === 'author') {
let result = await global.database.authors.promiseMode().add({
name : req.json.name,
time : Math.round(new Date().getTime() / 1000)
});
return result.dataValues.id;
}
else {
let result = await global.database.muzic.promiseMode().add({
name : req.json.name,
author_id : req.json.author_id,
data : req.json.data === undefined ? undefined : Buffer.from(req.json.data, 'base64'),
time : Math.round(new Date().getTime() / 1000)
});
return result.dataValues.id;
}
}