保证接单注册事务一致性
This commit is contained in:
@@ -359,6 +359,8 @@ export type CreateWorkerInput = {
|
||||
workerType?: string
|
||||
inviterId?: number | null
|
||||
inviteCode: string
|
||||
/** 注册场景下与账号、钱包在同一事务内消费验证码。 */
|
||||
smsCodeId?: number
|
||||
now: string
|
||||
}
|
||||
|
||||
|
||||
@@ -351,6 +351,19 @@ export async function createWorkerUser(input: CreateWorkerInput): Promise<Worker
|
||||
)
|
||||
const workerId = Number(result.rows[0]?.id || 0)
|
||||
await ensureWorkerWalletWithClient(client, workerId, input.now)
|
||||
if (input.smsCodeId) {
|
||||
const consumed = await client.query(
|
||||
`
|
||||
UPDATE worker_sms_codes
|
||||
SET consumed_at = $2
|
||||
WHERE id = $1 AND consumed_at IS NULL
|
||||
`,
|
||||
[input.smsCodeId, input.now],
|
||||
)
|
||||
if (consumed.rowCount !== 1) {
|
||||
throw new Error('worker_sms_code_consume_conflict')
|
||||
}
|
||||
}
|
||||
return getWorkerUserByIdWithClient(client, workerId)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user