Skip to content
Clone
d5939db
117 lines 4.0 KB Rust
use axum::Router;
use axum::middleware::from_fn_with_state;
use axum::routing::{delete, get, patch, post};
use crate::features::SpaceService;
use jwt::inject_jwt_ctx;
use rate_limit::ratelimit;
pub fn router(svc: SpaceService) -> Router {
let public = Router::new()
.route("/spaces/:sid", get(super::spaces::get::handler))
.route(
"/spaces/:sid/roles/:rid",
get(super::roles::get::handler),
)
.layer(from_fn_with_state(
svc.clone(),
inject_jwt_ctx::<SpaceService>,
));
let protected = Router::new()
.route("/spaces", post(super::spaces::create::handler))
.route("/spaces", get(super::spaces::list::handler))
.route(
"/spaces/:sid",
patch(super::spaces::update::handler).delete(super::spaces::delete::handler),
)
.route(
"/spaces/:sid/members",
post(super::members::add::handler).get(super::members::list::handler),
)
.route(
"/spaces/:sid/members/:uid",
get(super::members::get::handler)
.patch(super::members::update::handler)
.delete(super::members::remove::handler),
)
.route(
"/spaces/:sid/roles",
post(super::roles::create::handler).get(super::roles::list::handler),
)
.route(
"/spaces/:sid/roles/:rid",
patch(super::roles::update::handler).delete(super::roles::delete::handler),
)
.route(
"/spaces/:sid/members/:uid/roles",
post(super::roles::assign::handler),
)
.route(
"/spaces/:sid/members/:uid/roles/:rid",
delete(super::roles::unassign::handler),
)
.route(
"/spaces/:sid/invites",
post(super::invites::create::handler).get(super::invites::list::handler),
)
.route(
"/spaces/:sid/invites/:iid",
delete(super::invites::revoke::handler),
)
.route("/spaces/invites/accept", post(super::invites::accept::handler))
.route(
"/spaces/:sid/bans",
post(super::bans::ban::handler).get(super::bans::list::handler),
)
.route(
"/spaces/:sid/bans/:uid",
get(super::bans::get::handler)
.patch(super::bans::update::handler)
.delete(super::bans::unban::handler),
)
.route(
"/spaces/:sid/channels",
get(super::channels::list::handler),
)
.route(
"/spaces/:sid/channels/:cid",
get(super::channels::get::handler),
)
.route(
"/spaces/:sid/channels/:cid/members",
post(super::channel_members::add::handler).get(super::channel_members::list::handler),
)
.route(
"/spaces/:sid/channels/:cid/members/:uid",
get(super::channel_members::get::handler)
.patch(super::channel_members::update::handler)
.delete(super::channel_members::remove::handler),
)
.route(
"/spaces/:sid/channels/:cid/overwrites/roles",
post(super::overwrites::set_role::handler).get(super::overwrites::list_role::handler),
)
.route(
"/spaces/:sid/channels/:cid/overwrites/roles/:rid",
delete(super::overwrites::remove_role::handler),
)
.route(
"/spaces/:sid/channels/:cid/overwrites/users",
post(super::overwrites::set_user::handler).get(super::overwrites::list_user::handler),
)
.route(
"/spaces/:sid/channels/:cid/overwrites/users/:uid",
delete(super::overwrites::remove_user::handler),
)
.layer(from_fn_with_state(
svc.clone(),
inject_jwt_ctx::<SpaceService>,
));
Router::new()
.merge(public)
.merge(protected)
.layer(from_fn_with_state(svc.clone(), ratelimit::<SpaceService>))
.with_state(svc)
}