stats.rs

 1use anyhow::Result;
 2use std::path::Path;
 3
 4use crate::db;
 5
 6pub fn run(root: &Path) -> Result<()> {
 7    let conn = db::open(root)?;
 8
 9    let total: i64 = conn.query_row("SELECT COUNT(*) FROM tasks", [], |r| r.get(0))?;
10    let open: i64 = conn.query_row(
11        "SELECT COUNT(*) FROM tasks WHERE status = 'open'",
12        [],
13        |r| r.get(0),
14    )?;
15    let in_progress: i64 = conn.query_row(
16        "SELECT COUNT(*) FROM tasks WHERE status = 'in_progress'",
17        [],
18        |r| r.get(0),
19    )?;
20    let closed: i64 = conn.query_row(
21        "SELECT COUNT(*) FROM tasks WHERE status = 'closed'",
22        [],
23        |r| r.get(0),
24    )?;
25
26    println!(
27        "{}",
28        serde_json::json!({
29            "total": total,
30            "open": open,
31            "in_progress": in_progress,
32            "closed": closed,
33        })
34    );
35
36    Ok(())
37}