新增开发 Mock 后台菜单与造单能力
非生产环境在后台提供 lewan/feifei 领取造单与 91 查单模拟,CLI 复用同一服务,避免依赖真实平台联调。
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import { Router } from 'express'
|
||||
|
||||
import {
|
||||
buildOpen91QueryMock,
|
||||
createFeifeiMockClaim,
|
||||
createLewanMockClaim,
|
||||
getDevMockStatus,
|
||||
isDevMockEnabled,
|
||||
} from '../../services/dev-mock/dev-mock-service.js'
|
||||
import { createHttpError } from '../../utils/http.js'
|
||||
import { createJsonHandler, requireAdminRoles } from './session.js'
|
||||
|
||||
const router = Router()
|
||||
|
||||
function requireDevMockEnabled() {
|
||||
return (
|
||||
_req: unknown,
|
||||
_res: unknown,
|
||||
next: (error?: unknown) => void,
|
||||
) => {
|
||||
if (!isDevMockEnabled()) {
|
||||
next(
|
||||
createHttpError('开发 Mock 仅在非 production 环境可用(或设置 ENABLE_DEV_MOCK=1)', {
|
||||
statusCode: 403,
|
||||
errorCode: 'dev_mock_disabled',
|
||||
}),
|
||||
)
|
||||
return
|
||||
}
|
||||
next()
|
||||
}
|
||||
}
|
||||
|
||||
router.get(
|
||||
'/dev-mock/status',
|
||||
requireAdminRoles(['admin', 'operator', 'support']),
|
||||
createJsonHandler(() => getDevMockStatus(), {
|
||||
successMessage: 'ok',
|
||||
errorMessage: '读取 Mock 状态失败',
|
||||
scope: '[admin/dev-mock/status]',
|
||||
}),
|
||||
)
|
||||
|
||||
router.use('/dev-mock', requireAdminRoles(['admin', 'operator']), requireDevMockEnabled())
|
||||
|
||||
router.post(
|
||||
'/dev-mock/lewan',
|
||||
createJsonHandler((req) => createLewanMockClaim(req.body || {}), {
|
||||
successMessage: 'lewan mock 已生成',
|
||||
errorMessage: '生成 lewan mock 失败',
|
||||
scope: '[admin/dev-mock/lewan]',
|
||||
audit: (_req, data) => ({
|
||||
action: 'dev_mock_create_lewan',
|
||||
targetType: 'dev_mock',
|
||||
targetId: String((data as { orderNo?: string })?.orderNo || ''),
|
||||
data: {
|
||||
platform: 'lewan',
|
||||
orderNo: (data as { orderNo?: string })?.orderNo,
|
||||
step: (data as { step?: string })?.step,
|
||||
},
|
||||
}),
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/dev-mock/feifei',
|
||||
createJsonHandler((req) => createFeifeiMockClaim(req.body || {}), {
|
||||
successMessage: 'feifei mock 已生成',
|
||||
errorMessage: '生成 feifei mock 失败',
|
||||
scope: '[admin/dev-mock/feifei]',
|
||||
audit: (_req, data) => ({
|
||||
action: 'dev_mock_create_feifei',
|
||||
targetType: 'dev_mock',
|
||||
targetId: String((data as { orderNo?: string })?.orderNo || ''),
|
||||
data: {
|
||||
platform: 'feifei',
|
||||
orderNo: (data as { orderNo?: string })?.orderNo,
|
||||
step: (data as { step?: string })?.step,
|
||||
},
|
||||
}),
|
||||
}),
|
||||
)
|
||||
|
||||
router.post(
|
||||
'/dev-mock/open91/query',
|
||||
createJsonHandler((req) => buildOpen91QueryMock(req.body || {}), {
|
||||
successMessage: '91 查单 mock 已生成',
|
||||
errorMessage: '生成 91 查单 mock 失败',
|
||||
scope: '[admin/dev-mock/open91/query]',
|
||||
}),
|
||||
)
|
||||
|
||||
export default router
|
||||
Reference in New Issue
Block a user