use axum::{ extract::{Form, Path, State}, response::{IntoResponse, Redirect}, routing::post, Router, }; use sqlx::sqlite::SqlitePool; 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)) .route("/:channel/leave", post(on_leave)) } #[derive(serde::Deserialize)] struct CreateRequest { name: String, } async fn on_create( State(db): State, login: Login, Form(form): Form, ) -> Result { let mut tx = db.begin().await?; let channel = tx.channels().create(&form.name).await?; tx.channels().join(&channel.id, &login.id).await?; tx.commit().await?; 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("/")) }