SubmitTask Handler
#[instrument(skip(state), fields(idempotency_key=%req.idempotency_key))]
async fn submit_task(
State(state): State<AppState>,
req: SubmitTaskRequest,
) -> Result<SubmitTaskResponse, AppError> {
if let Some(existing) = state.db.get_idempotency(req.idempotency_key).await? {
return Ok(SubmitTaskResponse { task_id: existing.task_id, status: existing.status });
}
let task_id = Uuid::new_v4().to_string();
state.db.transact_write(vec![
put_event(&task_id, TaskEvent::Submitted { priority: req.priority }),
put_idempotency(&req.idempotency_key, &task_id),
put_task_meta(&task_id, TaskStatus::Pending, req.task_type),
]).await?;
state.sqs.send_task_message(&task_id, req.task_type, req.payload).await?;
counter!("tasks_submitted_total", "task_type" => req.task_type.clone()).increment(1);
Ok(SubmitTaskResponse { task_id, status: TaskStatus::Pending })
}