import { Router } from 'express' import { createRateLimitMiddleware, getParamRateLimitKey } from '../middleware/rate-limit.js' import { confirmKuaishouCloudClaimRole, getKuaishouCloudClaimDetail, getKuaishouCloudClaimGuideAssetPath, rebindKuaishouCloudClaimRole, redeemKuaishouCloudClaim, verifyKuaishouCloudClaimTicket, } from '../services/claim/kuaishou-cloud-claim-service.js' import { buildNotFoundPayload, createRouteFileHandler, 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/kuaishou-cloud/verify-ticket', claimWriteRateLimit, createRouteHandler((req) => verifyKuaishouCloudClaimTicket(req.params.token, req.body), { successMessage: '核销码提交并核销成功', errorMessage: '提交核销码失败', scope: '[claims/:token/kuaishou-cloud/verify-ticket]', }), ) 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.get( '/assets/kuaishou-cloud/:filename', createRouteFileHandler((req) => getKuaishouCloudClaimGuideAssetPath(req.params.filename), { errorMessage: '读取指引图片失败', scope: '[claims/assets/kuaishou-cloud/:filename]', }), ) router.use((req, res) => { res.status(404).json(buildNotFoundPayload(req)) }) export default router