Implement authorized live event replay

This commit is contained in:
ms2k 2026-07-17 23:08:28 +09:00
commit 06a7ac56b7

View file

@ -56,7 +56,7 @@ impl AdmissionService {
fingerprint(&request).map_err(|error| AdmissionError::Invalid(error.to_string()))?;
let subject = principal.id.clone();
let principal = principal.clone();
let config = self.config.clone();
let service = self.clone();
let outcome = execute_mutation(
&self.pool,
MutationScope {
@ -64,12 +64,12 @@ impl AdmissionService {
operation: "job.submit",
key: idempotency_key,
},
"submit_job",
"admission_submit_job",
&[],
request_fingerprint,
move |tx| {
Box::pin(async move {
let decision = decide_submission(tx, &principal, &config, request).await?;
let decision = service.submit_in_tx(tx, &principal, request).await?;
let status = match decision {
AdmissionDecision::Accepted(_) => MutationStatus::Accepted,
AdmissionDecision::Rejected { .. } => MutationStatus::Rejected,
@ -92,6 +92,15 @@ impl AdmissionService {
})
}
pub async fn submit_in_tx(
&self,
tx: &mut PgTx<'_>,
principal: &Principal,
request: JobSubmissionDto,
) -> Result<AdmissionDecision, DurableError> {
decide_submission(tx, principal, &self.config, request).await
}
pub async fn revoke_execution_grant(
&self,
principal: &Principal,
@ -249,6 +258,7 @@ async fn decide_submission(
.map_err(DurableError::effect)?;
}
enqueue(tx, "job.dispatch", json!({ "job_id": job_id })).await?;
enqueue(tx, "job.updated", json!({ "job_id": job_id })).await?;
Ok(AdmissionDecision::Accepted(Box::new(AcceptedJob {
job_id,