2023-03-07 22:45:37 -08:00
|
|
|
use actix_web::{
|
|
|
|
get,
|
|
|
|
middleware::Logger,
|
|
|
|
web::{self, Data},
|
|
|
|
App, HttpResponse, HttpServer, Responder,
|
|
|
|
};
|
|
|
|
use dotenv;
|
2023-03-12 22:03:37 -07:00
|
|
|
use openbook_candles::{utils::{Config, WebContext}, candle_creation::trade_fetching::scrape::fetch_market_infos, database::initialize::connect_to_database, structs::markets::load_markets};
|
|
|
|
use sqlx::{Pool, Postgres};
|
|
|
|
|
|
|
|
mod candles;
|
|
|
|
mod server_error;
|
2023-03-05 23:11:15 -08:00
|
|
|
|
|
|
|
#[get("/")]
|
|
|
|
async fn hello() -> impl Responder {
|
|
|
|
HttpResponse::Ok().body("Hello world!")
|
|
|
|
}
|
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
#[get("/trade-count")]
|
|
|
|
async fn get_total_trades(pool_data: web::Data<Pool<Postgres>>) -> impl Responder {
|
|
|
|
let pool = pool_data.get_ref();
|
|
|
|
let total_query = sqlx::query!("Select COUNT(*) as total from fills")
|
|
|
|
.fetch_one(pool)
|
|
|
|
.await
|
|
|
|
.unwrap();
|
|
|
|
let total_trades: i64 = total_query.total.unwrap_or_else(|| 0);
|
|
|
|
HttpResponse::Ok().json(total_trades)
|
2023-03-05 23:11:15 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
async fn manual_hello() -> impl Responder {
|
|
|
|
HttpResponse::Ok().body("Hey there!")
|
|
|
|
}
|
|
|
|
|
|
|
|
#[actix_web::main]
|
2023-03-12 22:03:37 -07:00
|
|
|
async fn main() -> std::io::Result<()> {
|
2023-03-07 22:45:37 -08:00
|
|
|
dotenv::dotenv().ok();
|
|
|
|
env_logger::init();
|
|
|
|
|
2023-03-12 22:03:37 -07:00
|
|
|
let rpc_url: String = dotenv::var("RPC_URL").unwrap();
|
|
|
|
let database_url: String = dotenv::var("DATABASE_URL").unwrap();
|
|
|
|
let max_pg_pool_connections: u32 = dotenv::var("MAX_PG_POOL_CONNS_SERVER").unwrap().parse::<u32>().unwrap();
|
2023-03-07 22:45:37 -08:00
|
|
|
|
2023-03-12 22:03:37 -07:00
|
|
|
let config = Config {
|
|
|
|
rpc_url: rpc_url.clone(),
|
|
|
|
database_url: database_url.clone(),
|
|
|
|
max_pg_pool_connections,
|
|
|
|
};
|
2023-03-05 23:11:15 -08:00
|
|
|
|
2023-03-12 22:03:37 -07:00
|
|
|
let markets = load_markets("/Users/dboures/dev/openbook-candles/markets.json");
|
|
|
|
let market_infos = fetch_market_infos(&config, markets).await.unwrap();
|
|
|
|
let pool = connect_to_database(&config).await.unwrap();
|
|
|
|
|
|
|
|
let context = Data::new(WebContext {
|
|
|
|
pool,
|
|
|
|
markets: market_infos,
|
|
|
|
});
|
2023-03-05 23:11:15 -08:00
|
|
|
|
2023-03-07 22:45:37 -08:00
|
|
|
HttpServer::new(move || {
|
2023-03-05 23:11:15 -08:00
|
|
|
App::new()
|
|
|
|
.wrap(Logger::default())
|
2023-03-12 22:03:37 -07:00
|
|
|
.app_data(Data::new(context.clone()))
|
|
|
|
.service(candles::service())
|
2023-03-05 23:11:15 -08:00
|
|
|
.route("/hey", web::get().to(manual_hello))
|
|
|
|
})
|
|
|
|
.bind(("127.0.0.1", 8080))?
|
|
|
|
.run()
|
|
|
|
.await
|
2023-03-05 22:52:42 -08:00
|
|
|
}
|