diff options
author | 2025-06-05 15:58:47 +0100 | |
---|---|---|
committer | 2025-06-05 15:58:47 +0100 | |
commit | 76aacb9bb017cb3edb81d965690229544cbf0a66 (patch) | |
tree | 8b61fd2e99ff04bb0b79f2fa8c2d74641fa9d089 /src/db.rs | |
parent | e313c40d246ac7545a1907621841090664bf61ae (diff) | |
download | fj-76aacb9bb017cb3edb81d965690229544cbf0a66.tar.gz fj-76aacb9bb017cb3edb81d965690229544cbf0a66.tar.bz2 fj-76aacb9bb017cb3edb81d965690229544cbf0a66.zip |
fix: category joins
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 44 |
1 files changed, 40 insertions, 4 deletions
@@ -89,14 +89,14 @@ impl Db { task.categories = self .0 - .prepare("select name from tasks_categories join categories where task_id = ?1")? + .prepare("select name from tasks_categories join categories on categories.id = tasks_categories.category_id where task_id = ?1")? .query_map([task_id], |row| Ok(Category::new(row.get(0)?)))? .collect::<std::result::Result<HashSet<_>, _>>()?; Ok(task) } - // TODO: filter + // TODO: filter and ordering pub fn read_tasks(&self, filter: Vec<TaskFilter>) -> Result<Vec<Task>> { let mut tasks = self .0 @@ -118,7 +118,7 @@ impl Db { for (task_id, task) in &mut tasks { let categories = self .0 - .prepare("select name from tasks_categories join categories where task_id = ?1")? + .prepare("select name from tasks_categories join categories on categories.id = tasks_categories.category_id where task_id = ?1")? .query_map([*task_id], |row| Ok(Category::new(row.get(0)?)))? .collect::<std::result::Result<HashSet<_>, _>>()?; task.categories = categories; @@ -304,7 +304,43 @@ mod tests { fn filter_tasks() {} #[test] - fn update_task() {} + fn update_task() { + let db = Db::create_connect_memory().unwrap(); + + let piano = Task::new( + "piano".to_string(), + None, + Some("practice piano".to_string()), + Some(HashSet::from([Category::new("music".to_string())])), + ); + + db.create_task(&piano).unwrap(); + + let german = Task::new( + "german".to_string(), + None, + Some("study german".to_string()), + None, + ); + + db.create_task(&german).unwrap(); + + assert_eq!( + vec![piano.clone(), german], + db.read_tasks(Vec::new()).unwrap() + ); + + let german = Task::new( + "german".to_string(), + None, + Some("study german".to_string()), + Some(HashSet::from([Category::new("education".to_string())])), + ); + + db.update_task("german", &german).unwrap(); + + assert_eq!(vec![piano, german], db.read_tasks(Vec::new()).unwrap()); + } #[test] fn delete_task() {} |