From 9cb5689c87978c4e05e87f631ebf92a626d583b0 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Sat, 23 Aug 2025 20:34:47 +0900 Subject: Init project --- .zed/tasks.json | 34 ++++++++++++++++++++++++++++++++++ Cargo.toml | 14 ++++++++++++++ src/main.rs | 26 ++++++++++++++++++++++++++ src/routers/account.rs | 17 +++++++++++++++++ src/routers/mod.rs | 15 +++++++++++++++ 5 files changed, 106 insertions(+) create mode 100644 .zed/tasks.json create mode 100644 Cargo.toml create mode 100644 src/main.rs create mode 100644 src/routers/account.rs create mode 100644 src/routers/mod.rs diff --git a/.zed/tasks.json b/.zed/tasks.json new file mode 100644 index 0000000..4648b2c --- /dev/null +++ b/.zed/tasks.json @@ -0,0 +1,34 @@ +[ + { + "label": "Run release server", + "command": "cargo", + "args": ["run", "-r"], + + "env": { + "SERVER_BIND": "0.0.0.0:8080" + }, + + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "no_focus", + "reveal_target": "dock", + "hide": "never", + "shell": "system" + }, + { + "label": "Run debug server", + "command": "cargo", + "args": ["run"], + + "env": { + "SERVER_BIND": "0.0.0.0:8080" + }, + + "use_new_terminal": false, + "allow_concurrent_runs": false, + "reveal": "no_focus", + "reveal_target": "dock", + "hide": "never", + "shell": "system" + } +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..bd321fd --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "itmo_queue_server" +version = "0.1.0" +edition = "2024" + +[dependencies] +axum = "0.8.4" +serde = { version = "1.0.219", features = ["derive"] } +serde_json = "1.0.143" +tokio = { version = "1.47.1", features = ["macros", "rt-multi-thread"] } +tower = "0.5.2" +tower-http = { version = "0.6.6", features = ["trace"] } +tracing = "0.1.41" +tracing-subscriber = "0.3.19" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..ff04b57 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,26 @@ +mod routers; + +use tokio::net::TcpListener; +use tracing::{Level, info}; + +async fn listener() -> TcpListener { + let addr = std::env::var("SERVER_BIND").expect("SERVER_BIND must be set"); + TcpListener::bind(addr).await.unwrap() +} + +#[tokio::main] +async fn main() { + tracing_subscriber::fmt() + .with_max_level(Level::DEBUG) + .init(); + + let router = routers::router(); + let listener = listener().await; + + info!( + "Start listening server on http://{:?}", + listener.local_addr().unwrap() + ); + + axum::serve(listener, router).await.unwrap(); +} diff --git a/src/routers/account.rs b/src/routers/account.rs new file mode 100644 index 0000000..e8c9753 --- /dev/null +++ b/src/routers/account.rs @@ -0,0 +1,17 @@ +use axum::Router; +use axum::response::IntoResponse; +use axum::routing::{get, post}; + +pub(crate) fn router() -> Router { + Router::new() + .route("/me", get(me)) + .route("/login", post(login)) +} + +async fn me() -> impl IntoResponse { + "Me" +} + +async fn login() -> impl IntoResponse { + "Login" +} diff --git a/src/routers/mod.rs b/src/routers/mod.rs new file mode 100644 index 0000000..ee925f0 --- /dev/null +++ b/src/routers/mod.rs @@ -0,0 +1,15 @@ +mod account; + +use axum::Router; +use tower_http::trace::{DefaultOnRequest, DefaultOnResponse, TraceLayer}; +use tracing::Level; + +pub(crate) fn router() -> Router { + let trace_layer = TraceLayer::new_for_http() + .on_request(DefaultOnRequest::new().level(Level::INFO)) + .on_response(DefaultOnResponse::new().level(Level::INFO)); + + Router::new() + .layer(trace_layer) + .nest("/account", account::router()) +} -- cgit v1.3