Initial commit: FunConnect project with server, relay, client and admin panel

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-02-24 20:56:36 +08:00
parent eb6e901440
commit b6891483ae
167 changed files with 16147 additions and 106 deletions

75
server/src/api/mod.rs Normal file
View File

@@ -0,0 +1,75 @@
pub mod admin;
pub mod auth;
pub mod download;
pub mod friends;
pub mod health;
pub mod relay_nodes;
pub mod rooms;
pub mod users;
use axum::{
routing::{delete, get, post, put},
Router,
};
use std::sync::Arc;
use crate::AppState;
use crate::signaling::handler::ws_handler;
pub fn router(_state: Arc<AppState>) -> Router<Arc<AppState>> {
Router::new()
// Auth
.route("/auth/register", post(auth::register))
.route("/auth/login", post(auth::login))
.route("/auth/refresh", post(auth::refresh))
.route("/auth/logout", post(auth::logout))
.route("/auth/me", get(users::get_me))
// Friends
.route("/friends", get(friends::list_friends))
.route("/friends/requests", get(friends::list_requests))
.route("/friends/request", post(friends::send_request))
.route("/friends/:id/accept", put(friends::accept_request))
.route("/friends/:id", delete(friends::remove_friend))
// Rooms
.route("/rooms", get(rooms::list_rooms).post(rooms::create_room))
.route("/rooms/:id", get(rooms::get_room).put(rooms::update_room).delete(rooms::close_room))
.route("/rooms/:id/members", get(rooms::get_room_members))
.route("/rooms/:id/members/:user_id", delete(rooms::kick_member))
.route("/rooms/:id/host-info", get(rooms::get_host_info).post(rooms::update_host_info))
.route("/rooms/:id/join", post(rooms::join_room))
.route("/rooms/:id/leave", post(rooms::leave_room))
.route("/rooms/:id/invite/:user_id", post(rooms::invite_to_room))
// Users
.route("/users/search", get(users::search_users))
// Relay nodes
.route("/relay/nodes", get(relay_nodes::list_nodes).post(relay_nodes::add_node))
.route("/relay/nodes/:id", delete(relay_nodes::remove_node))
.route("/relay/nodes/:id/ping", post(relay_nodes::report_ping))
// Admin
.route("/admin/login", post(admin::admin_login))
.route("/admin/stats", get(admin::get_stats))
.route("/admin/users", get(admin::list_users))
.route("/admin/users/:id/ban", post(admin::ban_user))
.route("/admin/users/:id/unban", post(admin::unban_user))
.route("/admin/rooms", get(admin::list_admin_rooms))
.route("/admin/rooms/:id", delete(admin::delete_room))
.route("/admin/config", get(admin::get_config).put(admin::update_config))
.route("/admin/logs", get(admin::get_logs))
.route("/admin/builds", get(download::list_builds))
.route("/admin/builds/trigger", post(download::trigger_build))
// Download
.route("/client-config", get(download::get_client_config))
.route("/download/:filename", get(download::download_file))
// WebSocket signaling
.route("/ws", get(ws_handler))
// Health checks
.route("/health", get(health::health_check))
.route("/health/detailed", get(health::detailed_health_check))
.route("/health/ready", get(health::ready_check))
.route("/health/live", get(health::live_check))
}
pub fn download_router() -> Router<Arc<AppState>> {
Router::new()
.route("/", get(download::download_page))
}