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

  1. Check userTask.status is REJECTED or DODING before calling submit
  2. Disable the submit button after the first successful call (idempotency guard in UI)
  3. If a retry is needed after a network failure, re-fetch the task status first — if it became PENDING the submit already went through
  4. 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

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.