summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsoryu <soryu@soryu.co>2026-01-31 04:21:20 +0000
committersoryu <soryu@soryu.co>2026-01-31 04:21:20 +0000
commitd65f012589e1563149cf8331a9d8307f28985248 (patch)
tree9bb369e1f2c2cc66cf84f6d5cb5b55f68e4a53fe
parentdac1adb138f532245a36fa16524f1e4fb9990173 (diff)
downloadsoryu-makima/fix-deliverables-null-handling.tar.gz
soryu-makima/fix-deliverables-null-handling.zip
Fix null handling for deliverables in create_template_for_ownermakima/fix-deliverables-null-handling
The previous code used `.unwrap_or_default()` which could produce `Some(Value::Null)` if JSON serialization failed, leading to inconsistent handling when the database returned NULL and sqlx attempted to decode with the `#[sqlx(json)]` attribute on an Option type. Changed to use `.ok()` which properly returns `None` when serialization fails, ensuring consistent NULL handling between the application and database layer. Fixes: "Failed to create template: error occurred while decoding column 'deliverables': unexpected null; try decoding as an Option" Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
-rw-r--r--makima/src/db/repository.rs5
1 files changed, 4 insertions, 1 deletions
diff --git a/makima/src/db/repository.rs b/makima/src/db/repository.rs
index 9a1bf2d..83bcbcd 100644
--- a/makima/src/db/repository.rs
+++ b/makima/src/db/repository.rs
@@ -2163,7 +2163,10 @@ pub async fn create_template_for_owner(
.bind(&req.description)
.bind(serde_json::to_value(&req.phases).unwrap_or_default())
.bind(&req.default_phase)
- .bind(req.deliverables.as_ref().map(|d| serde_json::to_value(d).unwrap_or_default()))
+ .bind(match &req.deliverables {
+ Some(d) => serde_json::to_value(d).ok(),
+ None => None,
+ })
.fetch_one(pool)
.await
}