后端迁移后台人工兑换路由

This commit is contained in:
yml
2026-05-21 17:23:40 +08:00
parent 18057d0eea
commit 105504fdc4
2 changed files with 43 additions and 20 deletions
@@ -1,5 +1,3 @@
// @ts-check
import { Router } from 'express' import { Router } from 'express'
import { import {
@@ -15,10 +13,28 @@ import {
} from '../../services/admin/admin-manual-redeem-service.js' } from '../../services/admin/admin-manual-redeem-service.js'
import { getAdminInventorySkuSuggestions } from '../../services/admin/admin-read-service.js' import { getAdminInventorySkuSuggestions } from '../../services/admin/admin-read-service.js'
import { createJsonHandler, requireAdminRoles } from './shared.js' import { createJsonHandler, requireAdminRoles } from './shared.js'
import type {
AdminInventorySkuSuggestionRouteQuery,
AdminManualRedeemCreateRouteBody,
AdminManualRedeemRouteParams,
} from '../../types/admin-route-inputs.js'
/** @typedef {import('../../types/admin-route-inputs.js').AdminInventorySkuSuggestionRouteQuery} AdminInventorySkuSuggestionRouteQuery */ type AdminManualRedeemSessionRouteBody = {
/** @typedef {import('../../types/admin-route-inputs.js').AdminManualRedeemCreateRouteBody} AdminManualRedeemCreateRouteBody */ loginType?: string
/** @typedef {import('../../types/admin-route-inputs.js').AdminManualRedeemRouteParams} AdminManualRedeemRouteParams */ forceRecreate?: boolean
}
type AdminManualRedeemMutationResult = {
task?: {
taskId?: number
taskNo?: string
status?: string
deliveryStatus?: string
}
manualRequest?: { proofValue?: string }
order?: { platformOrderId?: string }
orderItem?: { skuCode?: string }
}
const router = Router() const router = Router()
@@ -26,7 +42,7 @@ router.use('/manual-redeem', requireAdminRoles(['admin', 'operator', 'support'])
router.get('/manual-redeem/sku-suggestions', createJsonHandler( router.get('/manual-redeem/sku-suggestions', createJsonHandler(
(req) => getAdminInventorySkuSuggestions( (req) => getAdminInventorySkuSuggestions(
/** @type {AdminInventorySkuSuggestionRouteQuery} */ (req.query), req.query as AdminInventorySkuSuggestionRouteQuery,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -38,7 +54,7 @@ router.get('/manual-redeem/sku-suggestions', createJsonHandler(
router.post('/manual-redeem', createJsonHandler( router.post('/manual-redeem', createJsonHandler(
(req) => createAdminManualRedeemTask( (req) => createAdminManualRedeemTask(
/** @type {AdminManualRedeemCreateRouteBody} */ (req.body), req.body as AdminManualRedeemCreateRouteBody,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -46,7 +62,7 @@ router.post('/manual-redeem', createJsonHandler(
errorMessage: '创建人工兑换任务失败', errorMessage: '创建人工兑换任务失败',
scope: '[admin/manual-redeem]', scope: '[admin/manual-redeem]',
audit: (req, data) => { audit: (req, data) => {
const result = /** @type {{ task?: { taskId?: number, taskNo?: string }, manualRequest?: { proofValue?: string }, order?: { platformOrderId?: string }, orderItem?: { skuCode?: string } }} */ (data) const result = data as AdminManualRedeemMutationResult
return { return {
action: 'manual_redeem_created', action: 'manual_redeem_created',
targetType: 'task', targetType: 'task',
@@ -64,7 +80,7 @@ router.post('/manual-redeem', createJsonHandler(
router.get('/manual-redeem/:taskId', createJsonHandler( router.get('/manual-redeem/:taskId', createJsonHandler(
(req) => getAdminManualRedeemDetail( (req) => getAdminManualRedeemDetail(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -76,8 +92,8 @@ router.get('/manual-redeem/:taskId', createJsonHandler(
router.post('/manual-redeem/:taskId/session', createJsonHandler( router.post('/manual-redeem/:taskId/session', createJsonHandler(
(req) => createAdminManualRedeemSession( (req) => createAdminManualRedeemSession(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
/** @type {{ loginType?: string, forceRecreate?: boolean }} */ (req.body), req.body as AdminManualRedeemSessionRouteBody,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -89,7 +105,7 @@ router.post('/manual-redeem/:taskId/session', createJsonHandler(
router.get('/manual-redeem/:taskId/session/summary', createJsonHandler( router.get('/manual-redeem/:taskId/session/summary', createJsonHandler(
(req) => getAdminManualRedeemSessionSummary( (req) => getAdminManualRedeemSessionSummary(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -101,7 +117,7 @@ router.get('/manual-redeem/:taskId/session/summary', createJsonHandler(
router.post('/manual-redeem/:taskId/session/refresh', createJsonHandler( router.post('/manual-redeem/:taskId/session/refresh', createJsonHandler(
(req) => reloadAdminManualRedeemSession( (req) => reloadAdminManualRedeemSession(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -113,7 +129,7 @@ router.post('/manual-redeem/:taskId/session/refresh', createJsonHandler(
router.delete('/manual-redeem/:taskId/session', createJsonHandler( router.delete('/manual-redeem/:taskId/session', createJsonHandler(
(req) => closeAdminManualRedeemSession( (req) => closeAdminManualRedeemSession(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -125,7 +141,7 @@ router.delete('/manual-redeem/:taskId/session', createJsonHandler(
router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler( router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler(
(req) => confirmAdminManualRedeemRole( (req) => confirmAdminManualRedeemRole(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -133,7 +149,7 @@ router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler(
errorMessage: '确认人工兑换角色失败', errorMessage: '确认人工兑换角色失败',
scope: '[admin/manual-redeem/:taskId/confirm-role]', scope: '[admin/manual-redeem/:taskId/confirm-role]',
audit: (req, data) => { audit: (req, data) => {
const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string } }} */ (data) const result = data as AdminManualRedeemMutationResult
return { return {
action: 'manual_redeem_role_confirmed', action: 'manual_redeem_role_confirmed',
targetType: 'task', targetType: 'task',
@@ -150,7 +166,7 @@ router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler(
router.post('/manual-redeem/:taskId/redeem', createJsonHandler( router.post('/manual-redeem/:taskId/redeem', createJsonHandler(
(req) => redeemAdminManualRedeemTask( (req) => redeemAdminManualRedeemTask(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -158,7 +174,7 @@ router.post('/manual-redeem/:taskId/redeem', createJsonHandler(
errorMessage: '执行人工兑换失败', errorMessage: '执行人工兑换失败',
scope: '[admin/manual-redeem/:taskId/redeem]', scope: '[admin/manual-redeem/:taskId/redeem]',
audit: (req, data) => { audit: (req, data) => {
const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string, deliveryStatus?: string } }} */ (data) const result = data as AdminManualRedeemMutationResult
return { return {
action: 'manual_redeem_started', action: 'manual_redeem_started',
targetType: 'task', targetType: 'task',
@@ -176,7 +192,7 @@ router.post('/manual-redeem/:taskId/redeem', createJsonHandler(
router.post('/manual-redeem/:taskId/close', createJsonHandler( router.post('/manual-redeem/:taskId/close', createJsonHandler(
(req) => closeAdminManualRedeemTask( (req) => closeAdminManualRedeemTask(
(/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, (req.params as AdminManualRedeemRouteParams).taskId,
req.adminSession || null, req.adminSession || null,
), ),
{ {
@@ -184,7 +200,7 @@ router.post('/manual-redeem/:taskId/close', createJsonHandler(
errorMessage: '关闭人工兑换任务失败', errorMessage: '关闭人工兑换任务失败',
scope: '[admin/manual-redeem/:taskId/close]', scope: '[admin/manual-redeem/:taskId/close]',
audit: (req, data) => { audit: (req, data) => {
const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string } }} */ (data) const result = data as AdminManualRedeemMutationResult
return { return {
action: 'manual_redeem_closed', action: 'manual_redeem_closed',
targetType: 'task', targetType: 'task',
@@ -829,6 +829,13 @@
- `npm run typecheck` - `npm run typecheck`
- `npm run build` - `npm run build`
- `npm test` 共 139 个用例通过 - `npm test` 共 139 个用例通过
215. 后台人工兑换路由迁移到 `.ts`
- `src/routes/admin/manual-redeem.ts`
216. 人工兑换 SKU 建议、任务创建 / 详情、登录会话创建 / 摘要 / 刷新 / 关闭、确认角色、启动兑换和关闭任务路由已进入 TS 编译链路;route query、params、body、session body 与人工兑换 mutation audit result 补齐类型
217. Docker 内验证通过:
- `npm run typecheck`
- `npm run build`
- `npm test` 共 139 个用例通过
## 下一步建议 ## 下一步建议