diff --git a/apps/backend/src/services/claim/claim-service.js b/apps/backend/src/services/claim/claim-service.ts similarity index 68% rename from apps/backend/src/services/claim/claim-service.js rename to apps/backend/src/services/claim/claim-service.ts index 0882fdc6..5c32645e 100644 --- a/apps/backend/src/services/claim/claim-service.js +++ b/apps/backend/src/services/claim/claim-service.ts @@ -3,11 +3,15 @@ import { createClaimToken } from '../../repositories/claim-token-repo.js' import { addHours, nowIso } from '../../utils/time.js' import { randomToken } from '../../utils/random.js' -export async function createTaskClaimToken(taskId) { +type TaskClaimToken = NonNullable>> & { + claimUrl: string +} + +export async function createTaskClaimToken(taskId: number | string): Promise { const createdAt = nowIso() const expiredAt = addHours(createdAt, Number(runtimeConfig.orders.tokenTtlHours || 24)) const token = await createClaimToken({ - taskId, + taskId: Number(taskId), token: randomToken(24), status: 'active', expiredAt, @@ -18,13 +22,17 @@ export async function createTaskClaimToken(taskId) { updatedAt: createdAt, }) + if (!token) { + throw new Error('领取 token 创建失败') + } + return { ...token, claimUrl: buildClaimUrl(token.token), } } -export function buildClaimUrl(token) { +export function buildClaimUrl(token: string): string { const baseUrl = String(runtimeConfig.orders.claimBaseUrl || '').trim() return baseUrl ? `${baseUrl.replace(/\/+$/, '')}/${token}` : token } diff --git a/docs/backend-typescript-migration-plan.md b/docs/backend-typescript-migration-plan.md index 967fba7a..407419c7 100644 --- a/docs/backend-typescript-migration-plan.md +++ b/docs/backend-typescript-migration-plan.md @@ -305,6 +305,13 @@ - `npm run typecheck` - `npm run build` - `npm test` 共 128 个用例通过 +42. claim 基础服务迁移到 `.ts`: + - `src/services/claim/claim-service.ts` +43. 领取 token 创建与 claim URL 生成已显式类型化,并在 token 写入失败时显式抛错 +44. Docker 内验证通过: + - `npm run typecheck` + - `npm run build` + - `npm test` 共 128 个用例通过 ## 下一步建议