kodex-music-catalog/api/v1/methods/remove-item.js
2023-10-06 04:41:18 +03:00

68 lines
1.7 KiB
JavaScript

const ApiError = require("../errorClass");
const database = require("../../../database");
const apiTypes = require("../typeChecker");
const router = require('express').Router();
async function checkSyntaxArgs(req, res) {
if (req.body === undefined || !req.headers['content-type'].includes('json')) {
throw new ApiError("METHOD_MUST_BE_POST_JSON", { method : 'remove-item', no_post : false });
}
const checker = new apiTypes.TypeChecker();
await checker.checkRequired(req.body.type, apiTypes.ItemType, 'type');
if (req.body.type === 'music') {
await checker.checkRequired(req.body.id, apiTypes.MusicType, 'id');
}
else if (req.body.type === 'author') {
await checker.checkRequired(req.body.id, apiTypes.AuthorType, 'id');
}
const result = await checker.calculate();
if (!result.success) {
throw new ApiError("UNSYNTAX_PARAMS_OR_MISSED_REQUIRED_PARAMS", result);
}
}
router.post('/remove-item', async (req, res, next) => {
try {
await checkSyntaxArgs(req, res);
if (req.body.type === "author") {
// Удаляем всю музыку этого исполнителя
await database.music.destroy({
where: {
author_id: req.body.id,
},
});
// Удаляем исполнителя
await database.authors.destroy({
where: {
id: req.body.id,
},
});
} else {
await database.music.destroy({
where: {
id: req.body.id,
},
});
}
res.result("ok");
}
catch (err) {
return next(err);
}
});
router.use('/remove-item', async (req, res, next) => {
try {
return next(new ApiError("METHOD_MUST_BE_POST_JSON", { method : 'remove-item', no_post : true }));
}
catch (err) {
return next(err);
}
});
module.exports = router;