From 003f47339f9a5db1d67074d90d2916c4a2df781f Mon Sep 17 00:00:00 2001 From: Nikolaos Karaolidis Date: Mon, 28 Aug 2023 16:23:31 +0300 Subject: [PATCH] Improve thread handling Signed-off-by: Nikolaos Karaolidis --- backend/src/database/assets.rs | 3 +-- backend/src/main.rs | 30 ++++++++++++------------------ backend/src/routes/mod.rs | 29 +++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 20 deletions(-) diff --git a/backend/src/database/assets.rs b/backend/src/database/assets.rs index a0fef3e..f2cbb3e 100644 --- a/backend/src/database/assets.rs +++ b/backend/src/database/assets.rs @@ -1,7 +1,6 @@ -use std::error::Error; - use crate::types::{Asset, Class, Exchange}; use sqlx::{query_as, PgPool}; +use std::error::Error; pub async fn get_assets( database_pool: &PgPool, diff --git a/backend/src/main.rs b/backend/src/main.rs index e21e022..f0a3b5b 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -3,15 +3,11 @@ mod pool; mod routes; mod types; -use axum::{ - routing::{delete, get, post}, - Extension, Router, Server, -}; use dotenv::dotenv; -use log::info; use pool::{create_alpaca_pool_from_env, create_database_pool_from_env}; -use routes::assets; -use std::{error::Error, net::SocketAddr}; +use routes::initialize_api; +use std::error::Error; +use tokio::spawn; #[tokio::main] async fn main() -> Result<(), Box> { @@ -22,18 +18,16 @@ async fn main() -> Result<(), Box> { let database_pool = create_database_pool_from_env(num_clients).await?; let alpaca_pool = create_alpaca_pool_from_env(num_clients).await?; - let app = Router::new() - .route("/assets", get(assets::get_assets)) - .route("/assets/:symbol", get(assets::get_asset)) - .route("/assets", post(assets::add_asset)) - .route("/assets/:symbol", post(assets::update_asset)) - .route("/assets/:symbol", delete(assets::delete_asset)) - .layer(Extension(database_pool)) - .layer(Extension(alpaca_pool)); + let mut threads = Vec::new(); - let addr = SocketAddr::from(([0, 0, 0, 0], 7878)); - info!("Listening on {}...", addr); - Server::bind(&addr).serve(app.into_make_service()).await?; + threads.push(spawn(initialize_api( + database_pool.clone(), + alpaca_pool.clone(), + ))); + + for thread in threads { + let _ = thread.await?; + } Ok(()) } diff --git a/backend/src/routes/mod.rs b/backend/src/routes/mod.rs index 5d8c80b..a2a372d 100644 --- a/backend/src/routes/mod.rs +++ b/backend/src/routes/mod.rs @@ -1 +1,30 @@ +use crate::pool::AlpacaPool; +use axum::{ + routing::{delete, get, post}, + Extension, Router, Server, +}; +use log::info; +use sqlx::PgPool; +use std::net::SocketAddr; + pub mod assets; + +pub async fn initialize_api( + database_pool: PgPool, + alpaca_pool: AlpacaPool, +) -> Result<(), Box> { + let app = Router::new() + .route("/assets", get(assets::get_assets)) + .route("/assets/:symbol", get(assets::get_asset)) + .route("/assets", post(assets::add_asset)) + .route("/assets/:symbol", post(assets::update_asset)) + .route("/assets/:symbol", delete(assets::delete_asset)) + .layer(Extension(database_pool)) + .layer(Extension(alpaca_pool)); + + let addr = SocketAddr::from(([0, 0, 0, 0], 7878)); + info!("Listening on {}...", addr); + Server::bind(&addr).serve(app.into_make_service()).await?; + + Ok(()) +}