// admin 需要最后运行,并在route中进行过滤。 import { Route } from '@abearxiong/router'; import { router } from '../modules/router.ts'; import { manager, updateNewCode, removeCode, stopCode } from './dashboard/manager.ts'; import { loadOne } from './dashboard/load.ts'; import { RouterCodeModel } from '../models/code.ts'; import { nanoid } from 'nanoid'; export const getRouterList = new Route('admin', 'getRouterList'); getRouterList.run = async (ctx) => { ctx.body = router.getList().filter((r) => !r.path.startsWith('admin')); // ctx.body = router.getList().filter((r) => r.path.startsWith('admin')); return ctx; }; router.add(getRouterList); // remove router export const removeRouter = new Route('admin', 'removeRouter'); removeRouter.run = async (ctx) => { const { path, key } = ctx.query; router.remove({ path, key }); ctx.body = 'success'; return ctx; }; router.add(removeRouter); // remove router by id export const removeRouterById = new Route('admin', 'removeRouterById'); removeRouterById.run = async (ctx) => { const { id } = ctx.query; router.removeById(id); removeCode(id); await RouterCodeModel.destroy({ where: { id } }); ctx.body = 'success'; return ctx; }; router.add(removeRouterById); // stop router by id export const stopRouterById = new Route('admin', 'stopRouterById'); stopRouterById.run = async (ctx) => { const { id } = ctx.query; router.removeById(id); const routerCode = await RouterCodeModel.findByPk(id); if (routerCode) { routerCode.active = false; await routerCode.save(); } stopCode(id); ctx.body = 'success'; return ctx; }; // add or update router export const updateRouter = new Route('admin', 'updateRouter'); updateRouter.run = async (ctx) => { let { path, key, id, code } = ctx.query; if (!path && !key) { ctx.body = 'path and key is required'; ctx.code = 500; return ctx; } let codeRouter: RouterCodeModel | null = null; const codeRouteCheck = await RouterCodeModel.findOne({ where: { path, key } }); // 检查是否存在 if (codeRouteCheck && codeRouteCheck.id !== id) { key = `${key}-${nanoid(6)}`; } if (id) { codeRouter = await RouterCodeModel.findByPk(id); codeRouter.path = path; codeRouter.key = key; codeRouter.code = code; await codeRouter.save(); } else { const newCodeRouter = new RouterCodeModel({ path, key, code }); await newCodeRouter.save(); codeRouter = newCodeRouter; } const codeOne = await loadOne(codeRouter); updateNewCode(codeOne); ctx.body = 'success'; return ctx; }; router.add(updateRouter); // get manager status export const managerRouter = new Route('admin', 'getManagerStatus'); managerRouter.run = async (ctx) => { ctx.body = { status: manager.loaded, msg: 'system is running, and load manager success.', }; return ctx; }; router.add(managerRouter); // get manager list export const managerList = new Route('admin', 'getManagerList'); managerList.run = async (ctx) => { ctx.body = manager.list; return ctx; }; router.add(managerList);