state instead of extensions

This commit is contained in:
Per Stark
2024-12-09 11:30:39 +01:00
parent 50994c7df9
commit 620530bce1
8 changed files with 195 additions and 62 deletions

View File

@@ -1,20 +1,23 @@
use axum::{
extract::DefaultBodyLimit,
routing::{delete, get, post, put},
Extension, Router,
Router,
};
use std::sync::Arc;
use tera::Tera;
use tower_http::services::ServeDir;
use tracing_subscriber::{fmt, prelude::*, EnvFilter};
use zettle_db::{
rabbitmq::{publisher::RabbitMQProducer, RabbitMQConfig},
server::routes::{
file::{delete_file_handler, get_file_handler, update_file_handler, upload_handler},
index::index_handler,
ingress::ingress_handler,
query::query_handler,
queue_length::queue_length_handler,
rabbitmq::{consumer::RabbitMQConsumer, publisher::RabbitMQProducer, RabbitMQConfig},
server::{
routes::{
file::{delete_file_handler, get_file_handler, update_file_handler, upload_handler},
index::index_handler,
ingress::ingress_handler,
query::query_handler,
queue_length::queue_length_handler,
},
AppState,
},
storage::db::SurrealDbClient,
};
@@ -28,8 +31,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.try_init()
.ok();
let tera = Tera::new("src/server/templates/**/*.html").unwrap();
// Set up RabbitMQ
let config = RabbitMQConfig {
amqp_addr: "amqp://localhost".to_string(),
@@ -38,18 +39,18 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
routing_key: "my_key".to_string(),
};
// Set up producer
let producer = Arc::new(RabbitMQProducer::new(&config).await?);
// Set up database client
let db_client = Arc::new(SurrealDbClient::new().await?);
let app_state = AppState {
rabbitmq_producer: Arc::new(RabbitMQProducer::new(&config).await?),
rabbitmq_consumer: Arc::new(RabbitMQConsumer::new(&config).await?),
surreal_db_client: Arc::new(SurrealDbClient::new().await?),
tera: Arc::new(Tera::new("src/server/templates/**/*.html").unwrap()),
};
// Create Axum router
let app = Router::new()
// Ingress routes
.route("/ingress", post(ingress_handler))
.route("/message_count", get(queue_length_handler))
.layer(Extension(producer))
// File routes
.route("/file", post(upload_handler))
.layer(DefaultBodyLimit::max(1024 * 1024 * 1024))
@@ -58,10 +59,9 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
.route("/file/:uuid", delete(delete_file_handler))
// Query routes
.route("/query", post(query_handler))
.layer(Extension(db_client))
// Html routes
.route("/", get(index_handler))
.layer(Extension(tera))
.with_state(app_state)
.nest_service("/assets", ServeDir::new("src/server/assets"));
tracing::info!("Listening on 0.0.0.0:3000");