From beeb40acdc07d5652bf2128ecb8f71a1116993ae Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Wed, 4 Sep 2024 23:19:51 -0400 Subject: Support leaving a channel --- src/channel/routes.rs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/channel/routes.rs') diff --git a/src/channel/routes.rs b/src/channel/routes.rs index c8d6c3f..4453a1e 100644 --- a/src/channel/routes.rs +++ b/src/channel/routes.rs @@ -1,16 +1,18 @@ use axum::{ - extract::{Form, State}, + extract::{Form, Path, State}, response::{IntoResponse, Redirect}, routing::post, Router, }; use sqlx::sqlite::SqlitePool; -use super::repo::Provider as _; +use super::repo::{Id as ChannelId, Provider as _}; use crate::{error::InternalError, login::repo::logins::Login}; pub fn router() -> Router { - Router::new().route("/create", post(on_create)) + Router::new() + .route("/create", post(on_create)) + .route("/:channel/leave", post(on_leave)) } #[derive(serde::Deserialize)] @@ -30,3 +32,15 @@ async fn on_create( Ok(Redirect::to("/")) } + +async fn on_leave( + State(db): State, + login: Login, + Path(channel): Path, +) -> Result { + let mut tx = db.begin().await?; + tx.channels().leave(&channel, &login.id).await?; + tx.commit().await?; + + Ok(Redirect::to("/")) +} -- cgit v1.2.3