From ed15d48309f72948938f3b759e5fc8fa6861b1fc Mon Sep 17 00:00:00 2001 From: Yash Karandikar Date: Sat, 27 Aug 2022 12:19:38 -0500 Subject: [PATCH] Add ability to delete tasks --- src/main.rs | 4 +++- src/tasks.rs | 39 +++++++++++++++++++++++++++++++++++++ templates/tasks/delete.html | 8 ++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) create mode 100644 templates/tasks/delete.html diff --git a/src/main.rs b/src/main.rs index 68ad1c2..3d19971 100644 --- a/src/main.rs +++ b/src/main.rs @@ -151,7 +151,9 @@ async fn main() -> Result<(), Error> { .route("/update/:id", post(tasks::update_backend)) .route("/create", get(tasks::create_form)) .route("/create", post(tasks::create_backend)) - .route("/:id", get(tasks::task_detail)); + .route("/:id", get(tasks::task_detail)) + .route("/delete/:id", get(tasks::delete_form)) + .route("/delete/:id", post(tasks::delete_backend)); let serve_dir = get_service(ServeDir::new( config.static_dir.unwrap_or_else(|| "static".into()), diff --git a/src/tasks.rs b/src/tasks.rs index 8b6aa4a..85491ad 100644 --- a/src/tasks.rs +++ b/src/tasks.rs @@ -245,3 +245,42 @@ pub async fn task_detail( Err(StatusCode::NOT_FOUND.into()) } + +pub async fn delete_form( + Extension(tera): Extension>, + OriginalUri(uri): OriginalUri, + session: ReadableSession, +) -> Result, Error> { + let _username = login_or_redirect!(session, "/login"); + + let c = ctx! { + "uri" => uri.to_string() + }; + + let rendered = tera.render("tasks/delete.html", &c)?; + Ok(Html(rendered)) +} + +pub async fn delete_backend( + Path(id): Path, + Extension(pool): Extension>>, + session: ReadableSession, +) -> Result { + let username = login_or_redirect!(session, "/login"); + + info!("Getting user id"); + let (user_id,): (i32,) = sqlx::query_as("select id from users where username=$1") + .bind(&username) + .fetch_one(&*pool) + .await?; + + info!("deleting task"); + sqlx::query("delete from tasks where owner=$1 and id=$2") + .bind(user_id) + .bind(id) + .execute(&*pool) + .await?; + + info!("task deleted, redirecting"); + Ok(Redirect::to("/")) +} diff --git a/templates/tasks/delete.html b/templates/tasks/delete.html new file mode 100644 index 0000000..b11265a --- /dev/null +++ b/templates/tasks/delete.html @@ -0,0 +1,8 @@ +{% extends "base.html" %} +{% block content %} +
+ Are you sure you want to delete this task? +
+ +
+{% endblock %}