Add filter to all tasks list.
This commit is contained in:
parent
b0916990fb
commit
6e85edbf05
2 changed files with 20 additions and 2 deletions
|
|
@ -94,6 +94,15 @@ impl TaskModel {
|
|||
.await?;
|
||||
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)]
|
||||
|
|
|
|||
|
|
@ -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<TaskStatus>,
|
||||
}
|
||||
|
||||
pub async fn list_tasks(
|
||||
State(pool): State<Pool<Sqlite>>,
|
||||
Query(filters): Query<Filters>,
|
||||
) -> 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)))
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue