aven_core/query/
doctor.rs1use anyhow::Result;
2use sqlx::SqliteConnection;
3
4use crate::ids::WorkspaceId;
5
6pub struct WorkspaceTaskCounts {
7 pub visible: i64,
8 pub total: i64,
9}
10
11pub async fn workspace_task_counts(
12 conn: &mut SqliteConnection,
13 workspace_id: &WorkspaceId,
14) -> Result<WorkspaceTaskCounts> {
15 let visible =
16 sqlx::query_scalar("SELECT count(*) FROM tasks WHERE workspace_id = ? AND deleted = 0")
17 .bind(workspace_id)
18 .fetch_one(&mut *conn)
19 .await?;
20 let total = sqlx::query_scalar("SELECT count(*) FROM tasks WHERE workspace_id = ?")
21 .bind(workspace_id)
22 .fetch_one(&mut *conn)
23 .await?;
24 Ok(WorkspaceTaskCounts { visible, total })
25}
26
27pub async fn unresolved_conflict_count(conn: &mut SqliteConnection) -> Result<i64> {
28 Ok(
29 sqlx::query_scalar("SELECT count(*) FROM conflicts WHERE resolved = 0")
30 .fetch_one(&mut *conn)
31 .await?,
32 )
33}
34
35pub async fn unresolved_task_conflict_count_in_workspace(
36 conn: &mut SqliteConnection,
37 workspace_id: &WorkspaceId,
38) -> Result<i64> {
39 Ok(sqlx::query_scalar(
40 "SELECT count(*) FROM conflicts
41 WHERE workspace_id = ? AND entity_type = 'task' AND resolved = 0
42 AND field NOT LIKE 'metadata:%'",
43 )
44 .bind(workspace_id)
45 .fetch_one(&mut *conn)
46 .await?)
47}