From f353a73658563115def46f25da0e4fe54817f19fb5ba2511ba5be50301626366 Mon Sep 17 00:00:00 2001 From: raven <7156279+RavenX8@users.noreply.github.com> Date: Mon, 17 Mar 2025 21:51:09 -0400 Subject: [PATCH 1/2] - update: characters cache key lifetime --- database-service/src/characters.rs | 4 ++-- world-service/src/main.rs | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/database-service/src/characters.rs b/database-service/src/characters.rs index 02934b9..10e7397 100644 --- a/database-service/src/characters.rs +++ b/database-service/src/characters.rs @@ -61,7 +61,7 @@ impl CharacterRepository { self.cache .lock() .await - .set(&cache_key, &character, 300) + .set(&cache_key, &character, 0) .await .map_err(|_| sqlx::Error::RowNotFound)?; Ok(character) @@ -164,7 +164,7 @@ impl CharacterRepository { self.cache .lock() .await - .set(&cache_key, &characters, 300) + .set(&cache_key, &characters, 0) .await .map_err(|_| sqlx::Error::RowNotFound)?; Ok(characters) diff --git a/world-service/src/main.rs b/world-service/src/main.rs index abb26e5..14369c6 100644 --- a/world-service/src/main.rs +++ b/world-service/src/main.rs @@ -29,12 +29,12 @@ async fn main() -> Result<(), Box> { let service_name = env::var("SERVICE_NAME").unwrap_or_else(|_| "world-service".to_string()); let service_address = env::var("WORLD_SERVICE_ADDR").unwrap_or_else(|_| "127.0.0.1".to_string()); - let service_port = port.clone(); + let service_port = port.clone().parse().unwrap_or(50054); let health_check_url = format!("http://{}:{}/health", service_address, health_port); let db_nodes = get_service_address(&consul_url, "database-service").await?; - let temp_db_nodes = get_service_endpoints_by_dns(format!("{}:{}", consul_address, consul_dns_port).as_str(), "grpc", "database-service").await?; - debug!("{:?}", temp_db_nodes); + let temp_db_nodes = get_service_endpoints_by_dns(&format!("{}:{}", consul_address, consul_dns_port), "grpc", "database-service").await?; + debug!("Temp DB Nodes: {:?}", temp_db_nodes); // Register service with Consul let service_id = consul_registration::get_or_generate_service_id(env!("CARGO_PKG_NAME")); @@ -42,12 +42,14 @@ async fn main() -> Result<(), Box> { let tags = vec![version, "grpc".to_string()]; let mut meta = HashMap::new(); meta.insert("name".to_string(), "Athena".to_string()); + + consul_registration::start_health_check(addr.as_str()).await?; consul_registration::register_service( &consul_url, service_id.as_str(), service_name.as_str(), service_address.as_str(), - service_port.parse().unwrap_or(50054), + service_port, tags, meta, Some("http"), @@ -56,13 +58,13 @@ async fn main() -> Result<(), Box> { .await?; // Start health-check endpoint - consul_registration::start_health_check(addr.as_str()).await?; - let db_address = db_nodes.get(0).unwrap(); + let db_address = temp_db_nodes.get(0).unwrap(); let db_url = format!( - "http://{}:{}", - db_address.ServiceAddress, db_address.ServicePort + "http://{}", + db_address ); + debug!("DB URL: {:?}", db_url); utils::signal_handler::wait_for_signal().await; consul_registration::deregister_service(&consul_url, service_id.as_str()) From 6a8ea2521a03de6b75243cad5f8c4d4a28ccb3aad8fc82a06a7e3bb5c23964a9 Mon Sep 17 00:00:00 2001 From: RavenX8 <7156279+RavenX8@users.noreply.github.com> Date: Wed, 12 Mar 2025 22:16:57 -0400 Subject: [PATCH 2/2] - add: logout route to api service --- api-service/src/axum_gateway.rs | 40 +++++++++++++++++++++++++++++---- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/api-service/src/axum_gateway.rs b/api-service/src/axum_gateway.rs index 2d74c48..9452483 100644 --- a/api-service/src/axum_gateway.rs +++ b/api-service/src/axum_gateway.rs @@ -8,6 +8,7 @@ use std::sync::Arc; use tonic::transport::Channel; use tower_http::cors::{Any, CorsLayer}; +use crate::axum_gateway::auth::LogoutRequest; use auth::auth_service_client::AuthServiceClient; use auth::{LoginRequest, RegisterRequest}; use log::{error, info}; @@ -32,6 +33,16 @@ struct RestLoginResponse { session_id: String, } +#[derive(Serialize, Deserialize)] +struct RestLogoutRequest { + session_id: String, +} + +#[derive(Serialize, Deserialize)] +struct RestLogoutResponse { + message: String, +} + #[derive(Serialize, Deserialize)] struct RestRegisterRequest { username: String, @@ -52,8 +63,6 @@ async fn login_handler( ) -> Result, axum::http::StatusCode> { let ip_address = addr.ip().to_string(); - info!("Client IP Address: {}", ip_address); - let request = tonic::Request::new(LoginRequest { username: payload.username.clone(), password: payload.password.clone(), @@ -75,6 +84,28 @@ async fn login_handler( } } +async fn logout_handler( + ConnectInfo(addr): ConnectInfo, + State(grpc_client): State>>>, + Json(payload): Json, +) -> Result { + let ip_address = addr.ip().to_string(); + + let request = tonic::Request::new(LogoutRequest { + session_id: payload.session_id + }); + + let mut client = grpc_client.lock().await; // Lock the mutex to get mutable access + match client.logout(request).await { + Ok(_response) => { + Ok(axum::http::StatusCode::OK) + } + Err(_e) => { + Err(axum::http::StatusCode::INTERNAL_SERVER_ERROR) + } + } +} + async fn register_handler( ConnectInfo(addr): ConnectInfo, State(grpc_client): State>>>, @@ -110,6 +141,7 @@ pub async fn serve_rest_api( let app = Router::new() .route("/api/login", post(login_handler)) + .route("/api/logout", post(logout_handler)) .route("/api/register", post(register_handler)) .with_state(grpc_client) .layer(cors); @@ -123,8 +155,8 @@ pub async fn serve_rest_api( listener, app.into_make_service_with_connect_info::(), ) - .await - .unwrap(); + .await + .unwrap(); Ok(()) }