mirror of
https://git.mirrors.martin98.com/https://github.com/sub-store-org/Sub-Store.git
synced 2025-10-13 17:41:29 +08:00
117 lines
3.2 KiB
JavaScript
117 lines
3.2 KiB
JavaScript
import { deleteByName, findByName, updateByName } from '@/utils/database';
|
|
import { MODULES_KEY } from '@/constants';
|
|
import { failed, success } from '@/restful/response';
|
|
import $ from '@/core/app';
|
|
import { RequestInvalidError, ResourceNotFoundError } from '@/restful/errors';
|
|
import { hex_md5 } from '@/vendor/md5';
|
|
|
|
export default function register($app) {
|
|
if (!$.read(MODULES_KEY)) $.write([], MODULES_KEY);
|
|
|
|
$app.route('/api/module/:name')
|
|
.get(getModule)
|
|
.patch(updateModule)
|
|
.delete(deleteModule);
|
|
|
|
$app.route('/api/modules')
|
|
.get(getAllModules)
|
|
.post(createModule)
|
|
.put(replaceModule);
|
|
}
|
|
|
|
// module API
|
|
function createModule(req, res) {
|
|
const module = req.body;
|
|
module.name = `${module.name ?? hex_md5(JSON.stringify(module))}`;
|
|
$.info(`正在创建模块:${module.name}`);
|
|
const allModules = $.read(MODULES_KEY);
|
|
if (findByName(allModules, module.name)) {
|
|
return failed(
|
|
res,
|
|
new RequestInvalidError(
|
|
'DUPLICATE_KEY',
|
|
req.body.name
|
|
? `已存在 name 为 ${module.name} 的模块`
|
|
: `已存在相同的模块 请勿重复添加`,
|
|
),
|
|
);
|
|
}
|
|
allModules.push(module);
|
|
$.write(allModules, MODULES_KEY);
|
|
success(res, module, 201);
|
|
}
|
|
|
|
function getModule(req, res) {
|
|
let { name } = req.params;
|
|
name = decodeURIComponent(name);
|
|
const allModules = $.read(MODULES_KEY);
|
|
const module = findByName(allModules, name);
|
|
if (module) {
|
|
res.set('Content-Type', 'text/plain; charset=utf-8').send(
|
|
module.content,
|
|
);
|
|
} else {
|
|
failed(
|
|
res,
|
|
new ResourceNotFoundError(
|
|
`MODULE_NOT_FOUND`,
|
|
`Module ${name} does not exist`,
|
|
404,
|
|
),
|
|
);
|
|
}
|
|
}
|
|
|
|
function updateModule(req, res) {
|
|
let { name } = req.params;
|
|
name = decodeURIComponent(name);
|
|
let module = req.body;
|
|
const allModules = $.read(MODULES_KEY);
|
|
const oldModule = findByName(allModules, name);
|
|
if (oldModule) {
|
|
const newModule = {
|
|
...oldModule,
|
|
...module,
|
|
};
|
|
$.info(`正在更新模块:${name}...`);
|
|
|
|
updateByName(allModules, name, newModule);
|
|
$.write(allModules, MODULES_KEY);
|
|
success(res, newModule);
|
|
} else {
|
|
failed(
|
|
res,
|
|
new ResourceNotFoundError(
|
|
'RESOURCE_NOT_FOUND',
|
|
`Module ${name} does not exist!`,
|
|
),
|
|
404,
|
|
);
|
|
}
|
|
}
|
|
|
|
function deleteModule(req, res) {
|
|
let { name } = req.params;
|
|
name = decodeURIComponent(name);
|
|
$.info(`正在删除模块:${name}`);
|
|
let allModules = $.read(MODULES_KEY);
|
|
deleteByName(allModules, name);
|
|
$.write(allModules, MODULES_KEY);
|
|
success(res);
|
|
}
|
|
|
|
function getAllModules(req, res) {
|
|
const allModules = $.read(MODULES_KEY);
|
|
success(
|
|
res,
|
|
// eslint-disable-next-line no-unused-vars
|
|
allModules.map(({ content, ...rest }) => rest),
|
|
);
|
|
}
|
|
|
|
function replaceModule(req, res) {
|
|
const allModules = req.body;
|
|
$.write(allModules, MODULES_KEY);
|
|
success(res);
|
|
}
|