b453d5d
use axum::Router;
use axum::routing::{delete, get, patch, post, put};
use crate::handlers::accept_invite::accept_invite;
use crate::handlers::add_member::add_member;
use crate::handlers::assign_group::assign_group;
use crate::handlers::ban_user::ban_user;
use crate::handlers::create_dir_node::create_dir_node;
use crate::handlers::create_group::create_group;
use crate::handlers::create_invite::create_invite;
use crate::handlers::create_join_rule::create_join_rule;
use crate::handlers::create_space::create_space;
use crate::handlers::delete_group::delete_group;
use crate::handlers::delete_join_rule::delete_join_rule;
use crate::handlers::delete_space::delete_space;
use crate::handlers::delete_space_image::delete_space_image;
use crate::handlers::explore_spaces::explore_spaces;
use crate::handlers::explore_spaces::{
approve_join_request, list_join_requests, reject_join_request,
};
use crate::handlers::get_ban::get_ban;
use crate::handlers::get_group::get_group;
use crate::handlers::get_member::get_member;
use crate::handlers::get_space::get_space;
use crate::handlers::get_space_dir_tree::get_space_dir_tree;
use crate::handlers::get_space_image::get_space_image;
use crate::handlers::get_space_image_file::get_space_image_file;
use crate::handlers::join_group_self::join_group_self;
use crate::handlers::join_requests::{create_join_request, withdraw_join_request};
use crate::handlers::leave_group_self::leave_group_self;
use crate::handlers::list_bans::list_bans;
use crate::handlers::list_dir_group_overwrites::list_dir_group_overwrites;
use crate::handlers::list_dir_user_overwrites::list_dir_user_overwrites;
use crate::handlers::list_groups::list_groups;
use crate::handlers::list_invites::list_invites;
use crate::handlers::list_join_rules::list_join_rules;
use crate::handlers::list_members::list_space_members;
use crate::handlers::list_spaces::list_spaces;
use crate::handlers::move_dir_node::move_dir_node;
use crate::handlers::reject_invite::reject_invite;
use crate::handlers::remove_dir_group_overwrite::remove_dir_group_overwrite;
use crate::handlers::remove_dir_user_overwrite::remove_dir_user_overwrite;
use crate::handlers::remove_member::remove_member;
use crate::handlers::repair_dir_parents::repair_dir_parents;
use crate::handlers::revoke_invite::revoke_invite;
use crate::handlers::set_dir_group_overwrite::set_dir_group_overwrite;
use crate::handlers::set_dir_user_overwrite::set_dir_user_overwrite;
use crate::handlers::unassign_group::unassign_group;
use crate::handlers::unban_user::unban_user;
use crate::handlers::update_ban::update_ban;
use crate::handlers::update_dir_node::update_dir_node;
use crate::handlers::update_group::update_group;
use crate::handlers::update_join_rule::update_join_rule;
use crate::handlers::update_member::update_member;
use crate::handlers::update_space::update_space;
use crate::handlers::upload_space_image::upload_space_image;
use crate::services::service::SpaceService;
use crate::share::guard::space_guard;
pub fn router(service: SpaceService) -> Router<SpaceService> {
let public: Router<SpaceService> = Router::new()
.route("/spaces/explore", get(explore_spaces))
.route("/spaces/{space_name}", get(get_space))
.route("/spaces/{space_name}/groups/{group_id}", get(get_group))
.route("/spaces/{space_name}/images/{kind}", get(get_space_image))
.route(
"/spaces/{space_name}/images/{kind}/file",
get(get_space_image_file),
);
let protected = Router::new()
.route("/spaces", post(create_space).get(list_spaces))
.route("/spaces/invites/accept", post(accept_invite))
.route("/spaces/invites/reject", post(reject_invite))
.route(
"/spaces/{space_name}",
patch(update_space).delete(delete_space),
)
.route(
"/spaces/{space_name}/images/{kind}",
put(upload_space_image).delete(delete_space_image).layer(
axum::extract::DefaultBodyLimit::max(
crate::services::images::MAX_SPACE_IMAGE_BYTES + 1024 * 1024,
),
),
)
.route(
"/spaces/{space_name}/dir",
post(create_dir_node).get(get_space_dir_tree),
)
.route(
"/spaces/{space_name}/dir/repair-parents",
post(repair_dir_parents),
)
.route("/spaces/{space_name}/dir/{dir_id}", patch(update_dir_node))
.route(
"/spaces/{space_name}/dir/{dir_id}/position",
patch(move_dir_node),
)
.route(
"/spaces/{space_name}/dir/{dir_id}/overwrites/groups",
get(list_dir_group_overwrites),
)
.route(
"/spaces/{space_name}/dir/{dir_id}/overwrites/groups/{group_id}",
put(set_dir_group_overwrite).delete(remove_dir_group_overwrite),
)
.route(
"/spaces/{space_name}/dir/{dir_id}/overwrites/users",
get(list_dir_user_overwrites),
)
.route(
"/spaces/{space_name}/dir/{dir_id}/overwrites/users/{user_id}",
put(set_dir_user_overwrite).delete(remove_dir_user_overwrite),
)
.route(
"/spaces/{space_name}/members",
post(add_member).get(list_space_members),
)
.route(
"/spaces/{space_name}/members/{user_id}",
get(get_member).patch(update_member).delete(remove_member),
)
.route(
"/spaces/{space_name}/members/@me",
axum::routing::patch(crate::handlers::self_member::update_self_member)
.delete(crate::handlers::self_member::leave_space),
)
.route(
"/spaces/{space_name}/groups",
post(create_group).get(list_groups),
)
.route(
"/spaces/{space_name}/groups/{group_id}",
patch(update_group).delete(delete_group),
)
.route(
"/spaces/{space_name}/members/{user_id}/groups",
post(assign_group),
)
.route(
"/spaces/{space_name}/groups/{group_id}/join",
post(join_group_self).delete(leave_group_self),
)
.route(
"/spaces/{space_name}/join-rules",
post(create_join_rule).get(list_join_rules),
)
.route(
"/spaces/{space_name}/join-rules/{rule_id}",
patch(update_join_rule).delete(delete_join_rule),
)
.route(
"/spaces/{space_name}/members/{user_id}/groups/{group_id}",
delete(unassign_group),
)
.route(
"/spaces/{space_name}/join-requests",
post(create_join_request).get(list_join_requests),
)
.route(
"/spaces/{space_name}/join-requests/{request_id}",
delete(withdraw_join_request),
)
.route(
"/spaces/{space_name}/join-requests/{request_id}/approve",
post(approve_join_request),
)
.route(
"/spaces/{space_name}/join-requests/{request_id}/reject",
post(reject_join_request),
)
.route(
"/spaces/{space_name}/invites",
post(create_invite).get(list_invites),
)
.route(
"/spaces/{space_name}/invites/{invite_id}",
delete(revoke_invite),
)
.route("/spaces/{space_name}/bans", post(ban_user).get(list_bans))
.route(
"/spaces/{space_name}/bans/{user_id}",
get(get_ban).patch(update_ban).delete(unban_user),
)
.route_layer(axum::middleware::from_fn_with_state(
service.clone(),
space_guard,
));
public.merge(protected)
}