feat: refactor route definitions and enhance metadata for app domain manager
- Updated route definitions in `src/route.ts` to utilize `toJSONSchema` and `pick` for cleaner route listing. - Enhanced the `app.domain.manager` routes in `src/routes/app-manager/domain/manager.ts`: - Changed path format to snake_case. - Added descriptions for each route. - Introduced Zod schema validation for request arguments in metadata.
This commit is contained in:
27
src/route.ts
27
src/route.ts
@@ -4,6 +4,8 @@ import { app } from './app.ts';
|
||||
import type { App } from '@kevisual/router';
|
||||
import { User } from './models/user.ts';
|
||||
import { createCookie, getSomeInfoFromReq } from './routes/user/me.ts';
|
||||
import { toJSONSchema } from '@kevisual/router';
|
||||
import { pick } from 'es-toolkit';
|
||||
|
||||
/**
|
||||
* 添加auth中间件, 用于验证token
|
||||
@@ -169,22 +171,17 @@ app
|
||||
.define(async (ctx) => {
|
||||
const tokenUser = ctx.state.tokenUser;
|
||||
let isUser = !!tokenUser;
|
||||
const routesList = app.router.routes.filter(item => {
|
||||
if (item.id === 'auth' || item.id === 'auth-can' || item.id === 'check-auth-admin' || item.id === 'auth-admin') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).map((item) => {
|
||||
const route = pick(item, ['id', 'path', 'key', 'description', 'middleware'] as const);
|
||||
return toJSONSchema(route);
|
||||
})
|
||||
ctx.body = {
|
||||
list: app.router.routes.filter(item => {
|
||||
if (item.id === 'auth' || item.id === 'auth-can' || item.id === 'check-auth-admin' || item.id === 'auth-admin') {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}).map((item) => {
|
||||
return {
|
||||
id: item.id,
|
||||
path: item.path,
|
||||
key: item.key,
|
||||
description: item.description,
|
||||
middeleware: item.middleware,
|
||||
metadata: item.metadata,
|
||||
};
|
||||
}),
|
||||
list: routesList,
|
||||
isUser
|
||||
}
|
||||
})
|
||||
|
||||
@@ -1,15 +1,23 @@
|
||||
import { app, db, schema } from '@/app.ts';
|
||||
import { AppDomain, AppDomainHelper } from '../module/app-domain-drizzle.ts';
|
||||
import { App } from '../module/app-drizzle.ts';
|
||||
import { CustomError } from '@kevisual/router';
|
||||
import { eq, or } from 'drizzle-orm';
|
||||
import { eq } from 'drizzle-orm';
|
||||
import { randomUUID } from 'crypto';
|
||||
import z from 'zod';
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'app.domain.manager',
|
||||
path: 'app_domain_manager',
|
||||
key: 'list',
|
||||
description: '获取域名列表,支持分页',
|
||||
middleware: ['auth-admin'],
|
||||
metadata: {
|
||||
args: {
|
||||
data: z.object({
|
||||
page: z.number().optional(),
|
||||
pageSize: z.number().optional(),
|
||||
}).optional()
|
||||
}
|
||||
}
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { page = 1, pageSize = 999 } = ctx.query.data || {};
|
||||
@@ -26,9 +34,21 @@ app
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'app.domain.manager',
|
||||
path: 'app_domain_manager',
|
||||
key: 'update',
|
||||
description: '更新一个域名的信息',
|
||||
middleware: ['auth-admin'],
|
||||
metadata: {
|
||||
args: {
|
||||
data: z.object({
|
||||
id: z.string().optional(),
|
||||
domain: z.string(),
|
||||
appId: z.string().optional(),
|
||||
status: z.enum(['active', 'inactive']).optional(),
|
||||
data: z.record(z.string(), z.any()).optional(),
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { domain, data, id, ...rest } = ctx.query.data || {};
|
||||
@@ -95,9 +115,18 @@ app
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'app.domain.manager',
|
||||
path: 'app_domain_manager',
|
||||
key: 'delete',
|
||||
description: '删除一个域名',
|
||||
middleware: ['auth-admin'],
|
||||
metadata: {
|
||||
args: {
|
||||
data: z.object({
|
||||
id: z.string().optional(),
|
||||
domain: z.string().optional(),
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { id, domain } = ctx.query.data || {};
|
||||
@@ -117,9 +146,18 @@ app
|
||||
|
||||
app
|
||||
.route({
|
||||
path: 'app.domain.manager',
|
||||
path: 'app_domain_manager',
|
||||
key: 'get',
|
||||
description: '获取域名信息,可以通过id或者domain进行查询',
|
||||
middleware: ['auth-admin'],
|
||||
metadata: {
|
||||
args: {
|
||||
data: z.object({
|
||||
id: z.string().optional(),
|
||||
domain: z.string().optional(),
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
.define(async (ctx) => {
|
||||
const { id, domain } = ctx.query.data || {};
|
||||
|
||||
Reference in New Issue
Block a user