From 6e85edbf0522bcdada326bc4e513e2b9f95071fa Mon Sep 17 00:00:00 2001 From: Drew Galbraith Date: Tue, 23 Sep 2025 17:24:44 -0700 Subject: [PATCH] Add filter to all tasks list. --- backend/src/models/task.rs | 9 +++++++++ backend/src/services/tasks.rs | 13 +++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/backend/src/models/task.rs b/backend/src/models/task.rs index 3794288..3d4d5e0 100644 --- a/backend/src/models/task.rs +++ b/backend/src/models/task.rs @@ -94,6 +94,15 @@ impl TaskModel { .await?; Ok(tasks) } + + pub async fn list_by_status(pool: &SqlitePool, status: TaskStatus) -> Result> { + let tasks = + sqlx::query_as("SELECT * FROM tasks t WHERE t.status = $1 ORDER BY created_at DESC") + .bind(status) + .fetch_all(pool) + .await?; + Ok(tasks) + } } #[cfg(test)] diff --git a/backend/src/services/tasks.rs b/backend/src/services/tasks.rs index 1721b83..9a07611 100644 --- a/backend/src/services/tasks.rs +++ b/backend/src/services/tasks.rs @@ -1,6 +1,6 @@ use axum::{ Json, Router, - extract::{Path, State}, + extract::{Path, Query, State}, http::StatusCode, routing::{get, post}, }; @@ -40,10 +40,19 @@ pub async fn create_task( Ok((StatusCode::CREATED, Json(model))) } +#[derive(Deserialize)] +pub struct Filters { + status: Option, +} + pub async fn list_tasks( State(pool): State>, + Query(filters): Query, ) -> Result<(StatusCode, Json>), AppError> { - let tasks = TaskModel::list_all(&pool).await?; + let tasks = match filters.status { + Some(status) => TaskModel::list_by_status(&pool, status).await?, + None => TaskModel::list_all(&pool).await?, + }; Ok((StatusCode::OK, Json(tasks))) }