aven-core 0.1.12

Core library for the Aven local-first task manager
use anyhow::Result;
use sqlx::SqliteConnection;

use crate::ids::WorkspaceId;

pub struct WorkspaceTaskCounts {
    pub visible: i64,
    pub total: i64,
}

pub async fn workspace_task_counts(
    conn: &mut SqliteConnection,
    workspace_id: &WorkspaceId,
) -> Result<WorkspaceTaskCounts> {
    let visible =
        sqlx::query_scalar("SELECT count(*) FROM tasks WHERE workspace_id = ? AND deleted = 0")
            .bind(workspace_id)
            .fetch_one(&mut *conn)
            .await?;
    let total = sqlx::query_scalar("SELECT count(*) FROM tasks WHERE workspace_id = ?")
        .bind(workspace_id)
        .fetch_one(&mut *conn)
        .await?;
    Ok(WorkspaceTaskCounts { visible, total })
}

pub async fn unresolved_conflict_count(conn: &mut SqliteConnection) -> Result<i64> {
    Ok(
        sqlx::query_scalar("SELECT count(*) FROM conflicts WHERE resolved = 0")
            .fetch_one(&mut *conn)
            .await?,
    )
}