后端迁移领取会话服务
This commit is contained in:
-2
@@ -1,5 +1,3 @@
|
|||||||
// @ts-check
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getTencentBrowserSession,
|
getTencentBrowserSession,
|
||||||
getTencentBrowserSessionScreenshotPath,
|
getTencentBrowserSessionScreenshotPath,
|
||||||
-2
@@ -1,5 +1,3 @@
|
|||||||
// @ts-check
|
|
||||||
|
|
||||||
import { findClaimTokenByToken, getClaimTokenById, updateClaimToken } from '../../../repositories/claim-token-repo.js'
|
import { findClaimTokenByToken, getClaimTokenById, updateClaimToken } from '../../../repositories/claim-token-repo.js'
|
||||||
import { getOrderById } from '../../../repositories/order-repo.js'
|
import { getOrderById } from '../../../repositories/order-repo.js'
|
||||||
import { getOrderItemById } from '../../../repositories/order-item-repo.js'
|
import { getOrderItemById } from '../../../repositories/order-item-repo.js'
|
||||||
+11
-11
@@ -1,5 +1,3 @@
|
|||||||
// @ts-check
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
closeTencentBrowserSession,
|
closeTencentBrowserSession,
|
||||||
createTencentBrowserSession,
|
createTencentBrowserSession,
|
||||||
@@ -16,37 +14,39 @@ import {
|
|||||||
normalizeClaimLoginType,
|
normalizeClaimLoginType,
|
||||||
} from './shared.js'
|
} from './shared.js'
|
||||||
|
|
||||||
export async function createClaimSession(token, payload = {}) {
|
type JsonObject = Record<string, any>
|
||||||
|
|
||||||
|
export async function createClaimSession(token: unknown, payload: JsonObject = {}) {
|
||||||
return createClaimSessionWithContextLoader(
|
return createClaimSessionWithContextLoader(
|
||||||
() => getClaimContext(token),
|
() => getClaimContext(token),
|
||||||
payload,
|
payload,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createClaimSessionForAdminTask(taskId, payload = {}) {
|
export async function createClaimSessionForAdminTask(taskId: unknown, payload: JsonObject = {}) {
|
||||||
return createClaimSessionWithContextLoader(
|
return createClaimSessionWithContextLoader(
|
||||||
() => getClaimContextByTaskId(taskId),
|
() => getClaimContextByTaskId(taskId),
|
||||||
payload,
|
payload,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function reloadClaimSession(token) {
|
export async function reloadClaimSession(token: unknown) {
|
||||||
return reloadClaimSessionWithContextLoader(() => getClaimContext(token))
|
return reloadClaimSessionWithContextLoader(() => getClaimContext(token))
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function reloadClaimSessionForAdminTask(taskId) {
|
export async function reloadClaimSessionForAdminTask(taskId: unknown) {
|
||||||
return reloadClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId))
|
return reloadClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId))
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function closeClaimSession(token) {
|
export async function closeClaimSession(token: unknown) {
|
||||||
return closeClaimSessionWithContextLoader(() => getClaimContext(token))
|
return closeClaimSessionWithContextLoader(() => getClaimContext(token))
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function closeClaimSessionForAdminTask(taskId) {
|
export async function closeClaimSessionForAdminTask(taskId: unknown) {
|
||||||
return closeClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId))
|
return closeClaimSessionWithContextLoader(() => getClaimContextByTaskId(taskId))
|
||||||
}
|
}
|
||||||
|
|
||||||
async function createClaimSessionWithContextLoader(loadContext, payload = {}) {
|
async function createClaimSessionWithContextLoader(loadContext: () => Promise<JsonObject>, payload: JsonObject = {}) {
|
||||||
const context = await loadContext()
|
const context = await loadContext()
|
||||||
assertTaskCanProceed(context.task)
|
assertTaskCanProceed(context.task)
|
||||||
const requestedLoginType = normalizeClaimLoginType(payload.loginType)
|
const requestedLoginType = normalizeClaimLoginType(payload.loginType)
|
||||||
@@ -108,7 +108,7 @@ async function createClaimSessionWithContextLoader(loadContext, payload = {}) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function reloadClaimSessionWithContextLoader(loadContext) {
|
async function reloadClaimSessionWithContextLoader(loadContext: () => Promise<JsonObject>) {
|
||||||
const context = await loadContext()
|
const context = await loadContext()
|
||||||
assertTaskCanProceed(context.task)
|
assertTaskCanProceed(context.task)
|
||||||
|
|
||||||
@@ -138,7 +138,7 @@ async function reloadClaimSessionWithContextLoader(loadContext) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function closeClaimSessionWithContextLoader(loadContext) {
|
async function closeClaimSessionWithContextLoader(loadContext: () => Promise<JsonObject>) {
|
||||||
const context = await loadContext()
|
const context = await loadContext()
|
||||||
assertTaskCanProceed(context.task)
|
assertTaskCanProceed(context.task)
|
||||||
let task = context.task
|
let task = context.task
|
||||||
+6
-6
@@ -1,5 +1,3 @@
|
|||||||
// @ts-check
|
|
||||||
|
|
||||||
import {
|
import {
|
||||||
getTencentBrowserSession,
|
getTencentBrowserSession,
|
||||||
getTencentBrowserSessionSummary,
|
getTencentBrowserSessionSummary,
|
||||||
@@ -8,7 +6,9 @@ import { updateTask } from '../../../repositories/task-repo.js'
|
|||||||
import { nowIso } from '../../../utils/time.js'
|
import { nowIso } from '../../../utils/time.js'
|
||||||
import { isRecoverableSessionError, parseTaskState } from './shared.js'
|
import { isRecoverableSessionError, parseTaskState } from './shared.js'
|
||||||
|
|
||||||
export async function loadTaskSession(task, { includeQrImage = false } = {}) {
|
type JsonObject = Record<string, any>
|
||||||
|
|
||||||
|
export async function loadTaskSession(task: JsonObject, { includeQrImage = false }: { includeQrImage?: boolean } = {}) {
|
||||||
if (!task.browser_session_id) {
|
if (!task.browser_session_id) {
|
||||||
return {
|
return {
|
||||||
task,
|
task,
|
||||||
@@ -41,9 +41,9 @@ export async function loadTaskSession(task, { includeQrImage = false } = {}) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function syncTaskWithSession(task, session) {
|
export async function syncTaskWithSession(task: JsonObject, session: JsonObject) {
|
||||||
const activityInfo = session.activityInfo || null
|
const activityInfo = session.activityInfo || null
|
||||||
const patch = {
|
const patch: JsonObject = {
|
||||||
login_type: String(session.loginType || task.login_type || ''),
|
login_type: String(session.loginType || task.login_type || ''),
|
||||||
updated_at: nowIso(),
|
updated_at: nowIso(),
|
||||||
}
|
}
|
||||||
@@ -82,7 +82,7 @@ export async function syncTaskWithSession(task, session) {
|
|||||||
return updateTask(task.id, patch)
|
return updateTask(task.id, patch)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function clearTaskSession(task, { lastError = '' } = {}) {
|
export async function clearTaskSession(task: JsonObject, { lastError = '' }: { lastError?: string } = {}) {
|
||||||
const shouldResetClaimProgress = ['link_generated', 'claimed', 'role_confirmed'].includes(String(task.task_status || ''))
|
const shouldResetClaimProgress = ['link_generated', 'claimed', 'role_confirmed'].includes(String(task.task_status || ''))
|
||||||
const nextTaskStatus = shouldResetClaimProgress ? 'link_generated' : task.task_status
|
const nextTaskStatus = shouldResetClaimProgress ? 'link_generated' : task.task_status
|
||||||
const nextUserActionStatus = shouldResetClaimProgress ? 'pending_claim' : task.user_action_status
|
const nextUserActionStatus = shouldResetClaimProgress ? 'pending_claim' : task.user_action_status
|
||||||
-2
@@ -1,5 +1,3 @@
|
|||||||
// @ts-check
|
|
||||||
|
|
||||||
import { buildClaimUrl } from '../claim-service.js'
|
import { buildClaimUrl } from '../claim-service.js'
|
||||||
import { createHttpError } from '../../../utils/http.js'
|
import { createHttpError } from '../../../utils/http.js'
|
||||||
import { formatFenToAmount, normalizeFen } from '../../../utils/money.js'
|
import { formatFenToAmount, normalizeFen } from '../../../utils/money.js'
|
||||||
@@ -505,6 +505,19 @@
|
|||||||
- `npm run typecheck`
|
- `npm run typecheck`
|
||||||
- `npm run build`
|
- `npm run build`
|
||||||
- `npm test` 共 139 个用例通过
|
- `npm test` 共 139 个用例通过
|
||||||
|
111. 领取会话服务入口与分层模块迁移到 `.ts`:
|
||||||
|
- `src/services/claim/claim-session-service.ts`
|
||||||
|
- `src/services/claim/session/actions.ts`
|
||||||
|
- `src/services/claim/session/context.ts`
|
||||||
|
- `src/services/claim/session/lifecycle.ts`
|
||||||
|
- `src/services/claim/session/runtime.ts`
|
||||||
|
- `src/services/claim/session/shared.ts`
|
||||||
|
112. 领取上下文、会话生命周期、任务同步、角色确认、兑换入口与领取详情 payload 已进入 TS 编译链路;`lifecycle/runtime` 补齐动态 payload / patch 对象类型
|
||||||
|
113. Docker 内验证通过:
|
||||||
|
- `src/services/claim/claim-session-service.test.js` 共 2 个用例通过
|
||||||
|
- `npm run typecheck`
|
||||||
|
- `npm run build`
|
||||||
|
- `npm test` 共 139 个用例通过
|
||||||
|
|
||||||
## 下一步建议
|
## 下一步建议
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user