Files
order_site/apps/backend/src/routes/claims.ts
T
yml2213 bb060e81a4 统一领取流:Step1 填 UID,按平台分叉履约
领取页改为统一 UID 入口;lewan 强制角色 ID 匹配后才发货核销,feifei 将 uid 拼入 H5 并去掉 claim 短链,对外仍返回本站 claimUrl。
2026-07-10 13:30:22 +08:00

81 lines
2.2 KiB
TypeScript

import { Router } from 'express'
import { createRateLimitMiddleware, getParamRateLimitKey } from '../middleware/rate-limit.js'
import {
confirmKuaishouCloudClaimRole,
getKuaishouCloudClaimDetail,
rebindKuaishouCloudClaimRole,
redeemKuaishouCloudClaim,
submitClaimUid,
} from '../services/claim/kuaishou-cloud-claim-service.js'
import { buildNotFoundPayload, createRouteHandler } from '../utils/http.js'
const router = Router()
const claimReadRateLimit = createRateLimitMiddleware({
scope: 'claim:read',
windowMs: 60_000,
max: 120,
key: getParamRateLimitKey('token'),
})
const claimWriteRateLimit = createRateLimitMiddleware({
scope: 'claim:write',
windowMs: 60_000,
max: 30,
key: getParamRateLimitKey('token'),
})
router.get(
'/:token',
claimReadRateLimit,
createRouteHandler((req) => getKuaishouCloudClaimDetail(req.params.token), {
errorMessage: '查询快手领取详情失败',
scope: '[claims/:token]',
}),
)
router.post(
'/:token/uid',
claimWriteRateLimit,
createRouteHandler((req) => submitClaimUid(req.params.token, req.body || {}), {
successMessage: 'UID 已提交',
errorMessage: '提交 UID 失败',
scope: '[claims/:token/uid]',
}),
)
router.post(
'/:token/kuaishou-cloud/confirm-role',
claimWriteRateLimit,
createRouteHandler((req) => confirmKuaishouCloudClaimRole(req.params.token), {
successMessage: '角色已确认',
errorMessage: '确认角色失败',
scope: '[claims/:token/kuaishou-cloud/confirm-role]',
}),
)
router.post(
'/:token/kuaishou-cloud/rebind-role',
claimWriteRateLimit,
createRouteHandler((req) => rebindKuaishouCloudClaimRole(req.params.token), {
successMessage: '角色换绑资源已准备完成',
errorMessage: '换绑角色失败',
scope: '[claims/:token/kuaishou-cloud/rebind-role]',
}),
)
router.post(
'/:token/kuaishou-cloud/redeem',
claimWriteRateLimit,
createRouteHandler((req) => redeemKuaishouCloudClaim(req.params.token), {
successMessage: '兑换请求已提交',
errorMessage: '兑换失败',
scope: '[claims/:token/kuaishou-cloud/redeem]',
}),
)
router.use((req, res) => {
res.status(404).json(buildNotFoundPayload(req))
})
export default router