62 lines
2.0 KiB
Rust
62 lines
2.0 KiB
Rust
use axum::{
|
|
routing::{delete, get, post},
|
|
Extension, Router, Server,
|
|
};
|
|
use common::pool::{
|
|
create_alpaca_pool_from_env, create_database_pool_from_env, create_rabbitmq_pool_from_env,
|
|
};
|
|
use deadpool::managed::{Hook, HookError, HookErrorCause};
|
|
use dotenv::dotenv;
|
|
use lapin::ExchangeKind;
|
|
use log::info;
|
|
use std::{error::Error, net::SocketAddr};
|
|
|
|
mod routes;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn Error + Send + Sync>> {
|
|
dotenv().ok();
|
|
log4rs::init_file("log4rs.yaml", Default::default()).unwrap();
|
|
|
|
let num_clients = 10;
|
|
let database_pool = create_database_pool_from_env(num_clients).await?;
|
|
let alpaca_pool = create_alpaca_pool_from_env(num_clients).await?;
|
|
let rabbitmq_pool = create_rabbitmq_pool_from_env(
|
|
num_clients,
|
|
Hook::async_fn(|connection: &mut lapin::Connection, _| {
|
|
Box::pin(async move {
|
|
connection
|
|
.create_channel()
|
|
.await
|
|
.map_err(|e| HookError::Abort(HookErrorCause::Backend(e)))?
|
|
.exchange_declare(
|
|
"assets",
|
|
ExchangeKind::Topic,
|
|
Default::default(),
|
|
Default::default(),
|
|
)
|
|
.await
|
|
.map_err(|e| HookError::Abort(HookErrorCause::Backend(e)))?;
|
|
Ok(())
|
|
})
|
|
}),
|
|
)
|
|
.await?;
|
|
|
|
let app = Router::new()
|
|
.route("/assets", get(routes::get_assets))
|
|
.route("/assets/:symbol", get(routes::get_asset))
|
|
.route("/assets", post(routes::add_asset))
|
|
.route("/assets/:symbol", post(routes::update_asset))
|
|
.route("/assets/:symbol", delete(routes::delete_asset))
|
|
.layer(Extension(database_pool))
|
|
.layer(Extension(alpaca_pool))
|
|
.layer(Extension(rabbitmq_pool));
|
|
|
|
let addr = SocketAddr::from(([0, 0, 0, 0], 7878));
|
|
info!("Listening on {}...", addr);
|
|
Server::bind(&addr).serve(app.into_make_service()).await?;
|
|
|
|
Ok(())
|
|
}
|