yikart/AiToEarn · warning · BadRequestException
Cannot submit task in current status
Error message
Cannot submit task in current status
What it means
HTTP 400 BadRequestException 'Cannot submit task in current status' thrown by UserTaskService.submitTask (user-task.service.ts:133). Only user tasks in REJECTED or DODING status may be submitted; any other status (e.g. PENDING audit, APPROVED) is rejected to enforce the task state machine.
Source
Thrown at project/aitoearn-electron/server/src/modules/task/user-task.service.ts:133
}
}
/**
* 提交任务
* @param userTask
* @param data
* @returns
*/
async submitTask(userTask: UserTask, data: SubmitTaskDto): Promise<UserTask> {
const userTaskD = await this.userTaskModel.findById(userTask.id);
// 只有拒绝和进行中的才能提交
if (
![UserTaskStatus.REJECTED, UserTaskStatus.DODING].includes(
userTask.status,
)
) {
throw new BadRequestException('Cannot submit task in current status');
}
userTaskD.submissionUrl = data.submissionUrl;
userTaskD.screenshotUrls = data.screenshotUrls;
userTaskD.qrCodeScanResult = data.qrCodeScanResult;
userTaskD.submissionTime = new Date();
userTaskD.status = UserTaskStatus.PENDING;
// 保存
return userTaskD.save();
}
/**
* 获取用户的任务列表
* @param userId
* @param query
* @returns
*/View on GitHub (pinned to d3aa8bea5b)
Solutions
- Check userTask.status is REJECTED or DODING before calling submit
- Disable the submit button after the first successful call (idempotency guard in UI)
- If a retry is needed after a network failure, re-fetch the task status first — if it became PENDING the submit already went through
- Wait for the auditor to reject the submission before re-submitting
Example fix
// before await api.submitTask(userTaskId, data) // may throw if PENDING // after const ut = await api.getUserTaskInfo(userTaskId) if (['REJECTED', 'DODING'].includes(ut.status)) await api.submitTask(userTaskId, data)
Defensive patterns
Strategy: validation
Validate before calling
const ut = await api.getUserTaskInfo(userTaskId)
if (!['REJECTED', 'DODING'].includes(ut.status)) {
throw new Error(`Submission not allowed in status ${ut.status}`)
} Type guard
function canSubmit(ut: UserTask): boolean {
return ut.status === 'REJECTED' || ut.status === 'DODING'
} Try / catch
try {
await api.submitTask(userTaskId, data)
} catch (e) {
if (e?.status === 400 && e?.message === 'Cannot submit task in current status') {
// likely a duplicate submit: re-fetch status; it may already be PENDING
} else throw e
} Prevention
- Disable the submit control immediately after a successful call
- Make retries idempotent: check status first, submit only if REJECTED/DODING
- Do not allow editing approved tasks; open a new application instead
When it happens
Trigger: Calling the submit endpoint when userTask.status is PENDING (already submitted and awaiting audit) or APPROVED — typically a double submit or submit after approval.
Common situations: User double-clicks the submit button creating two submissions; client retries on a timeout after the first submit succeeded; attempting to re-edit an already-approved task.
Related errors
AI-assisted analysis of yikart/AiToEarn@d3aa8bea5b (2026-08-31).
Data as JSON: /api/errors/97c7725db129fe87.
Report an issue: GitHub.