summaryrefslogtreecommitdiff
path: root/makima/src/server/handlers/contracts.rs
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-02-04 01:07:14 +0000
committersoryu <soryu@soryu.co>2026-02-04 01:07:14 +0000
commita734bf1a472b19d63341769d26a66628575df7f4 (patch)
treeec78f57e5721d157c620df0c99de5b5efe485231 /makima/src/server/handlers/contracts.rs
parentc732dd048128808cd9f67f6e1176a5b565df5678 (diff)
downloadsoryu-a734bf1a472b19d63341769d26a66628575df7f4.tar.gz
soryu-a734bf1a472b19d63341769d26a66628575df7f4.zip
Add chain checkpoint contracts
Diffstat (limited to 'makima/src/server/handlers/contracts.rs')
-rw-r--r--makima/src/server/handlers/contracts.rs29
1 files changed, 29 insertions, 0 deletions
diff --git a/makima/src/server/handlers/contracts.rs b/makima/src/server/handlers/contracts.rs
index 8c8cabf..54bae71 100644
--- a/makima/src/server/handlers/contracts.rs
+++ b/makima/src/server/handlers/contracts.rs
@@ -574,6 +574,35 @@ pub async fn update_contract(
"status": &contract.status,
}),
).await;
+
+ // If contract is part of a chain, progress the chain
+ if let Some(chain_id) = contract.chain_id {
+ let pool_clone = pool.clone();
+ let owner_id = auth.owner_id;
+ tokio::spawn(async move {
+ match repository::progress_chain(&pool_clone, chain_id, owner_id).await {
+ Ok(result) => {
+ if !result.contracts_created.is_empty() {
+ tracing::info!(
+ chain_id = %chain_id,
+ contracts_created = ?result.contracts_created,
+ "Chain progressed - created new contracts"
+ );
+ }
+ if result.chain_completed {
+ tracing::info!(chain_id = %chain_id, "Chain completed");
+ }
+ }
+ Err(e) => {
+ tracing::error!(
+ chain_id = %chain_id,
+ error = %e,
+ "Failed to progress chain after contract completion"
+ );
+ }
+ }
+ });
+ }
}
// Get summary with counts