diff --git a/Cargo.lock b/Cargo.lock index a1be634..25a037c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2486,6 +2486,7 @@ name = "gb-messaging" version = "0.1.0" dependencies = [ "async-trait", + "chrono", "futures", "futures-util", "gb-core", diff --git a/gb-api/src/router.rs b/gb-api/src/router.rs index fa0b08c..12fc495 100644 --- a/gb-api/src/router.rs +++ b/gb-api/src/router.rs @@ -8,16 +8,38 @@ use axum::{ response::IntoResponse, Json, }; + use gb_core::{Result, Error, models::*}; -use gb_messaging::{MessageProcessor, MessageEnvelope}; +use gb_messaging::{MessageProcessor, models::MessageEnvelope}; // Update this line use std::sync::Arc; use tokio::sync::Mutex; + + use tracing::{instrument, error}; use uuid::Uuid; - use futures_util::StreamExt; use futures_util::SinkExt; +pub struct ApiState { + pub message_processor: Mutex, +} + +pub fn create_router(message_processor: MessageProcessor) -> Router { + let state = Arc::new(ApiState { + message_processor: Mutex::new(message_processor), + }); + + Router::new() + .route("/health", get(|| async { "OK" })) + .route("/messages", post(send_message)) + .route("/messages/:id", get(get_message)) + .route("/rooms", post(create_room)) + .route("/rooms/:id", get(get_room)) + .route("/rooms/:id/join", post(join_room)) + .route("/ws", get(websocket_handler)) + .with_state(state) +} + async fn handle_ws_connection( ws: WebSocket, State(_state): State>, @@ -26,7 +48,6 @@ async fn handle_ws_connection( // ... rest of the implementation } - #[axum::debug_handler] #[instrument(skip(state, ws))] async fn websocket_handler( @@ -80,8 +101,8 @@ async fn get_message( #[axum::debug_handler] #[instrument(skip(state, config))] async fn create_room( - State(state): State>, - Json(config): Json, + State(_state): State>, + Json(_config): Json, ) -> Result> { todo!() } diff --git a/gb-messaging/Cargo.toml b/gb-messaging/Cargo.toml index b882526..079aeaa 100644 --- a/gb-messaging/Cargo.toml +++ b/gb-messaging/Cargo.toml @@ -17,6 +17,7 @@ async-trait.workspace = true tracing.workspace = true futures.workspace = true futures-util = "0.3" +chrono = { version = "0.4", features = ["serde"] } lapin = "2.3" tokio-tungstenite = { version = "0.20", features = ["native-tls"] } diff --git a/gb-messaging/src/lib.rs b/gb-messaging/src/lib.rs index 8cff28e..113b407 100644 --- a/gb-messaging/src/lib.rs +++ b/gb-messaging/src/lib.rs @@ -3,12 +3,14 @@ mod rabbitmq; mod redis_pubsub; mod websocket; mod processor; +pub mod models; pub use kafka::Kafka; pub use rabbitmq::RabbitMQ; pub use redis_pubsub::RedisPubSub; pub use websocket::WebSocketClient; pub use processor::MessageProcessor; +pub use models::MessageEnvelope; #[cfg(test)] mod tests { diff --git a/gb-messaging/src/models.rs b/gb-messaging/src/models.rs new file mode 100644 index 0000000..de4e7bf --- /dev/null +++ b/gb-messaging/src/models.rs @@ -0,0 +1,11 @@ +use gb_core::models::Message; +use serde::{Deserialize, Serialize}; +use std::collections::HashMap; +use uuid::Uuid; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct MessageEnvelope { + pub id: Uuid, + pub message: Message, + pub metadata: HashMap, +}