Add filtering support in the backend

This commit is contained in:
Yash Karandikar 2022-08-28 16:51:45 -05:00
parent 30d66d66f7
commit c3d5dd363b

View file

@ -5,6 +5,7 @@ mod tasks;
mod users;
use axum::extract::Extension;
use axum::extract::Query;
use axum::http::StatusCode;
use axum::response::Html;
use axum::response::IntoResponse;
@ -234,10 +235,16 @@ macro_rules! assert_or {
};
}
#[derive(Deserialize)]
struct FilterParam {
filter: Option<u8>,
}
async fn homepage(
session: ReadableSession,
Extension(tera): Extension<Arc<Tera>>,
Extension(pool): Extension<Arc<Pool<Postgres>>>,
Query(FilterParam { filter }): Query<FilterParam>,
) -> Result<Html<String>, Error> {
let username = login_or_redirect!(session, "/login");
@ -248,13 +255,19 @@ async fn homepage(
.await?;
info!("Getting tasks");
let tasks: Vec<RawTask> =
let mut tasks: Vec<RawTask> =
sqlx::query_as("select id,title,description,status from tasks where owner=$1")
.bind(id)
.fetch_all(&*pool)
.await?;
info!("Sorting tasks");
info!("Sorting and filtering tasks");
// TODO: refactor this when let_chains is finally stable
if let Some(filter) = filter {
if filter != 0 {
tasks.retain(|rt| rt.status == (filter as i32) - 1);
}
}
let mut tasks: Vec<Task> = tasks.into_iter().map(Task::from).collect();
tasks.sort_unstable();
tasks.reverse();
@ -263,7 +276,8 @@ async fn homepage(
let rendered = tera.render(
"home.html",
&ctx! {
"tasks" => tasks
"tasks" => tasks,
"filter" => filter.unwrap_or(255) // placeholder that won't match anything
},
)?;