From 105504fdc40545bb24987d928fa8fe23bae41b3f Mon Sep 17 00:00:00 2001 From: yml Date: Thu, 21 May 2026 17:23:40 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8E=E7=AB=AF=E8=BF=81=E7=A7=BB=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E4=BA=BA=E5=B7=A5=E5=85=91=E6=8D=A2=E8=B7=AF=E7=94=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{manual-redeem.js => manual-redeem.ts} | 56 ++++++++++++------- docs/backend-typescript-migration-plan.md | 7 +++ 2 files changed, 43 insertions(+), 20 deletions(-) rename apps/backend/src/routes/admin/{manual-redeem.js => manual-redeem.ts} (74%) diff --git a/apps/backend/src/routes/admin/manual-redeem.js b/apps/backend/src/routes/admin/manual-redeem.ts similarity index 74% rename from apps/backend/src/routes/admin/manual-redeem.js rename to apps/backend/src/routes/admin/manual-redeem.ts index e9b50d80..dd4af358 100644 --- a/apps/backend/src/routes/admin/manual-redeem.js +++ b/apps/backend/src/routes/admin/manual-redeem.ts @@ -1,5 +1,3 @@ -// @ts-check - import { Router } from 'express' import { @@ -15,10 +13,28 @@ import { } from '../../services/admin/admin-manual-redeem-service.js' import { getAdminInventorySkuSuggestions } from '../../services/admin/admin-read-service.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 */ -/** @typedef {import('../../types/admin-route-inputs.js').AdminManualRedeemCreateRouteBody} AdminManualRedeemCreateRouteBody */ -/** @typedef {import('../../types/admin-route-inputs.js').AdminManualRedeemRouteParams} AdminManualRedeemRouteParams */ +type AdminManualRedeemSessionRouteBody = { + loginType?: string + 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() @@ -26,7 +42,7 @@ router.use('/manual-redeem', requireAdminRoles(['admin', 'operator', 'support']) router.get('/manual-redeem/sku-suggestions', createJsonHandler( (req) => getAdminInventorySkuSuggestions( - /** @type {AdminInventorySkuSuggestionRouteQuery} */ (req.query), + req.query as AdminInventorySkuSuggestionRouteQuery, req.adminSession || null, ), { @@ -38,7 +54,7 @@ router.get('/manual-redeem/sku-suggestions', createJsonHandler( router.post('/manual-redeem', createJsonHandler( (req) => createAdminManualRedeemTask( - /** @type {AdminManualRedeemCreateRouteBody} */ (req.body), + req.body as AdminManualRedeemCreateRouteBody, req.adminSession || null, ), { @@ -46,7 +62,7 @@ router.post('/manual-redeem', createJsonHandler( errorMessage: '创建人工兑换任务失败', scope: '[admin/manual-redeem]', 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 { action: 'manual_redeem_created', targetType: 'task', @@ -64,7 +80,7 @@ router.post('/manual-redeem', createJsonHandler( router.get('/manual-redeem/:taskId', createJsonHandler( (req) => getAdminManualRedeemDetail( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -76,8 +92,8 @@ router.get('/manual-redeem/:taskId', createJsonHandler( router.post('/manual-redeem/:taskId/session', createJsonHandler( (req) => createAdminManualRedeemSession( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, - /** @type {{ loginType?: string, forceRecreate?: boolean }} */ (req.body), + (req.params as AdminManualRedeemRouteParams).taskId, + req.body as AdminManualRedeemSessionRouteBody, req.adminSession || null, ), { @@ -89,7 +105,7 @@ router.post('/manual-redeem/:taskId/session', createJsonHandler( router.get('/manual-redeem/:taskId/session/summary', createJsonHandler( (req) => getAdminManualRedeemSessionSummary( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -101,7 +117,7 @@ router.get('/manual-redeem/:taskId/session/summary', createJsonHandler( router.post('/manual-redeem/:taskId/session/refresh', createJsonHandler( (req) => reloadAdminManualRedeemSession( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -113,7 +129,7 @@ router.post('/manual-redeem/:taskId/session/refresh', createJsonHandler( router.delete('/manual-redeem/:taskId/session', createJsonHandler( (req) => closeAdminManualRedeemSession( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -125,7 +141,7 @@ router.delete('/manual-redeem/:taskId/session', createJsonHandler( router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler( (req) => confirmAdminManualRedeemRole( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -133,7 +149,7 @@ router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler( errorMessage: '确认人工兑换角色失败', scope: '[admin/manual-redeem/:taskId/confirm-role]', audit: (req, data) => { - const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string } }} */ (data) + const result = data as AdminManualRedeemMutationResult return { action: 'manual_redeem_role_confirmed', targetType: 'task', @@ -150,7 +166,7 @@ router.post('/manual-redeem/:taskId/confirm-role', createJsonHandler( router.post('/manual-redeem/:taskId/redeem', createJsonHandler( (req) => redeemAdminManualRedeemTask( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -158,7 +174,7 @@ router.post('/manual-redeem/:taskId/redeem', createJsonHandler( errorMessage: '执行人工兑换失败', scope: '[admin/manual-redeem/:taskId/redeem]', audit: (req, data) => { - const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string, deliveryStatus?: string } }} */ (data) + const result = data as AdminManualRedeemMutationResult return { action: 'manual_redeem_started', targetType: 'task', @@ -176,7 +192,7 @@ router.post('/manual-redeem/:taskId/redeem', createJsonHandler( router.post('/manual-redeem/:taskId/close', createJsonHandler( (req) => closeAdminManualRedeemTask( - (/** @type {AdminManualRedeemRouteParams} */ (req.params)).taskId, + (req.params as AdminManualRedeemRouteParams).taskId, req.adminSession || null, ), { @@ -184,7 +200,7 @@ router.post('/manual-redeem/:taskId/close', createJsonHandler( errorMessage: '关闭人工兑换任务失败', scope: '[admin/manual-redeem/:taskId/close]', audit: (req, data) => { - const result = /** @type {{ task?: { taskId?: number, taskNo?: string, status?: string } }} */ (data) + const result = data as AdminManualRedeemMutationResult return { action: 'manual_redeem_closed', targetType: 'task', diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 87d9368c..2969010e 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -829,6 +829,13 @@ - `npm run typecheck` - `npm run build` - `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 个用例通过 ## 下一步建议