diff --git a/src/backend/Cargo.toml b/src/backend/Cargo.toml index 0aa2991..e731d39 100644 --- a/src/backend/Cargo.toml +++ b/src/backend/Cargo.toml @@ -1,6 +1,13 @@ [package] -name = "RustyMine-daemon" +name = "rustymine-daemon" version = "0.1.0" edition = "2024" [dependencies] +anyhow = "1.0.100" +axum = "0.8.7" +serde = "1.0.228" +serde_json = "1.0.145" +tokio = { version = "1.48.0", features = ["macros", "rt-multi-thread"] } +tracing = { version = "0.1.43", features = ["max_level_debug"] } +tracing-subscriber = "0.3.22" diff --git a/src/backend/src/lib.rs b/src/backend/src/lib.rs new file mode 100644 index 0000000..fcddb5c --- /dev/null +++ b/src/backend/src/lib.rs @@ -0,0 +1 @@ +pub mod router; diff --git a/src/backend/src/main.rs b/src/backend/src/main.rs index e7a11a9..32a54ac 100644 --- a/src/backend/src/main.rs +++ b/src/backend/src/main.rs @@ -1,3 +1,18 @@ -fn main() { - println!("Hello, world!"); +use anyhow::{Ok, Result}; +use rustymine_daemon::router; +use tracing::Level; + +#[tokio::main] +async fn main() -> Result<()> { + let subscriber = tracing_subscriber::fmt() + .with_max_level(Level::DEBUG) + .finish(); + + tracing::subscriber::set_global_default(subscriber)?; + + let app_result = router::init_router().await?; + + let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); + axum::serve(listener, app_result).await.unwrap(); + Ok(()) } diff --git a/src/backend/src/router/middleware.rs b/src/backend/src/router/middleware.rs new file mode 100644 index 0000000..63b0b88 --- /dev/null +++ b/src/backend/src/router/middleware.rs @@ -0,0 +1,9 @@ +use axum::{extract::Request, middleware::Next, response::IntoResponse}; +use tracing::{debug, error, info, warn}; + +pub async fn auth_middleware(request: Request, next: Next) -> impl IntoResponse { + debug!("auth_middleware entry"); + let response = next.run(request).await; + debug!("auth_middleware exit"); + response +} diff --git a/src/backend/src/router/mod.rs b/src/backend/src/router/mod.rs new file mode 100644 index 0000000..e62a411 --- /dev/null +++ b/src/backend/src/router/mod.rs @@ -0,0 +1,16 @@ +pub mod middleware; +use anyhow::Result; +use axum::{Json, Router, http::StatusCode, middleware::from_fn, routing::get}; +use serde_json::{Value, json}; + +pub async fn init_router() -> Result { + let router = Router::new().route( + "/api/ping", + get(ping).layer(from_fn(middleware::auth_middleware)), + ); + Ok(router) +} + +async fn ping() -> Result, StatusCode> { + Ok(Json(json!({ "response": "pong"}))) +}