Drop key column from backlogs table
Backlogs are identified by name, not key. The key column was already
unused — create() generated a dummy value just to satisfy the schema.
Backup-and-restore pattern avoids ON DELETE CASCADE wiping backlog_tasks
during the table rebuild.
Assisted-by: Claude Opus 4.6 via pi
diff --git a/migrations/003_drop_backlog_key.sql b/migrations/003_drop_backlog_key.sql
new file mode 100644
index 0000000..3aa2585
--- /dev/null
+++ b/migrations/003_drop_backlog_key.sql
@@ -0,0 +1,22 @@
+-- Backup backlog_tasks (DROP TABLE backlogs cascades the foreign key delete)
+CREATE TEMPORARY TABLE backlog_tasks_backup AS SELECT * FROM backlog_tasks;
+
+-- Rebuild backlogs without the key column, with UNIQUE on name directly
+CREATE TABLE backlogs_new (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ name TEXT NOT NULL UNIQUE,
+ created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now')),
+ updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%SZ', 'now'))
+);
+
+INSERT INTO backlogs_new (id, name, created_at, updated_at)
+SELECT id, name, created_at, updated_at FROM backlogs;
+
+-- Drop the separate index and old table
+DROP INDEX IF EXISTS idx_backlogs_name;
+DROP TABLE backlogs;
+ALTER TABLE backlogs_new RENAME TO backlogs;
+
+-- Restore backlog_tasks
+INSERT INTO backlog_tasks SELECT * FROM backlog_tasks_backup;
+DROP TABLE backlog_tasks_backup;
diff --git a/src/ops/backlog.rs b/src/ops/backlog.rs
index 31babef..de8c93b 100644
--- a/src/ops/backlog.rs
+++ b/src/ops/backlog.rs
@@ -1,15 +1,11 @@
use crate::error::RangerError;
-use crate::key;
use crate::models::Backlog;
use sqlx::sqlite::SqliteConnection;
pub async fn create(conn: &mut SqliteConnection, name: &str) -> Result<Backlog, RangerError> {
- // key column still exists in the schema but is unused; generate a dummy value
- let key = key::generate_key();
let backlog = sqlx::query_as::<_, Backlog>(
- "INSERT INTO backlogs (key, name) VALUES (?, ?) RETURNING id, name, created_at, updated_at",
+ "INSERT INTO backlogs (name) VALUES (?) RETURNING id, name, created_at, updated_at",
)
- .bind(&key)
.bind(name)
.fetch_one(&mut *conn)
.await?;