Add filter to all tasks list.

This commit is contained in:
Drew 2025-09-23 17:24:44 -07:00
parent b0916990fb
commit 6e85edbf05
2 changed files with 20 additions and 2 deletions

View file

@ -94,6 +94,15 @@ impl TaskModel {
.await?; .await?;
Ok(tasks) Ok(tasks)
} }
pub async fn list_by_status(pool: &SqlitePool, status: TaskStatus) -> Result<Vec<TaskModel>> {
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)] #[cfg(test)]

View file

@ -1,6 +1,6 @@
use axum::{ use axum::{
Json, Router, Json, Router,
extract::{Path, State}, extract::{Path, Query, State},
http::StatusCode, http::StatusCode,
routing::{get, post}, routing::{get, post},
}; };
@ -40,10 +40,19 @@ pub async fn create_task(
Ok((StatusCode::CREATED, Json(model))) Ok((StatusCode::CREATED, Json(model)))
} }
#[derive(Deserialize)]
pub struct Filters {
status: Option<TaskStatus>,
}
pub async fn list_tasks( pub async fn list_tasks(
State(pool): State<Pool<Sqlite>>, State(pool): State<Pool<Sqlite>>,
Query(filters): Query<Filters>,
) -> Result<(StatusCode, Json<Vec<TaskModel>>), AppError> { ) -> Result<(StatusCode, Json<Vec<TaskModel>>), 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))) Ok((StatusCode::OK, Json(tasks)))
} }