diff --git a/src/context/app_context.rs b/src/context/app_context.rs index a93e0cc..775abb9 100644 --- a/src/context/app_context.rs +++ b/src/context/app_context.rs @@ -9,7 +9,7 @@ pub enum AppContextError { ConnectionError(String), } -#[derive(Clone)] +#[derive(Clone, Debug)] pub struct AppContext { pub db_client: Client, } diff --git a/src/handlers/mint_options.rs b/src/handlers/mint_options.rs new file mode 100644 index 0000000..e75f89e --- /dev/null +++ b/src/handlers/mint_options.rs @@ -0,0 +1,31 @@ +use crate::context::app_context::AppContext; +use crate::models::{MintOptionsBody, MintOptionsResponse}; +use axum::{extract::State, http::StatusCode, Json}; +use std::sync::Arc; + +pub async fn mint_options( + State(app_context): State>, + Json(payload): Json, +) -> (StatusCode, Json) { + // Spawn a new task to handle minting in the background + tokio::spawn(async move { + // Your minting logic goes here + process_mint_options(app_context, payload).await; + }); + + ( + StatusCode::ACCEPTED, + Json(MintOptionsResponse { + message: "Minting process started in the background".to_string(), + }), + ) +} + +async fn process_mint_options(app_context: Arc, payload: MintOptionsBody) { + loop { + println!("{payload:?} {app_context:?}"); + // Implement your actual minting logic here + // This will run in the background + tokio::time::sleep(std::time::Duration::from_secs(1)).await; + } +} diff --git a/src/handlers/mod.rs b/src/handlers/mod.rs index cd95e19..096d3f0 100644 --- a/src/handlers/mod.rs +++ b/src/handlers/mod.rs @@ -1,5 +1,7 @@ pub mod health; +pub mod mint_options; pub mod trades; pub use health::*; +pub use mint_options::*; pub use trades::*; diff --git a/src/main.rs b/src/main.rs index 034cd49..59333b0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,8 +3,10 @@ use std::sync::Arc; use context::AppContext; mod app; mod context; +mod errors; mod handlers; mod models; +mod pdas; mod routes; #[tokio::main] diff --git a/src/models/mint_options.rs b/src/models/mint_options.rs new file mode 100644 index 0000000..901ec8c --- /dev/null +++ b/src/models/mint_options.rs @@ -0,0 +1,14 @@ +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct MintOptionsBody { + pub strike_price: u64, + pub price_decimals: u8, + pub underlying_amount_per_contract: u64, + pub expiration_timestamp: i64, +} + +#[derive(Debug, Serialize)] +pub struct MintOptionsResponse { + pub message: String, +} diff --git a/src/models/mod.rs b/src/models/mod.rs index cd95e19..891e549 100644 --- a/src/models/mod.rs +++ b/src/models/mod.rs @@ -1,5 +1,8 @@ pub mod health; +pub mod mint_options; +pub mod program_types; pub mod trades; pub use health::*; +pub use mint_options::*; pub use trades::*; diff --git a/src/models/program_types/mod.rs b/src/models/program_types/mod.rs new file mode 100644 index 0000000..26200c3 --- /dev/null +++ b/src/models/program_types/mod.rs @@ -0,0 +1,2 @@ +pub mod euro_meta; +pub mod expiration_data; diff --git a/src/routes/bot_actions.rs b/src/routes/bot_actions.rs new file mode 100644 index 0000000..86238d3 --- /dev/null +++ b/src/routes/bot_actions.rs @@ -0,0 +1,10 @@ +use crate::context::app_context::AppContext; +use crate::handlers::mint_options; +use axum::{routing::post, Router}; +use std::sync::Arc; + +pub fn bot_actions_route(app_context: Arc) -> Router { + Router::new() + .route("/mint-options", post(mint_options)) + .with_state(app_context) +} diff --git a/src/routes/mod.rs b/src/routes/mod.rs index 561ef30..43487f7 100644 --- a/src/routes/mod.rs +++ b/src/routes/mod.rs @@ -1,9 +1,11 @@ mod base_router; +mod bot_actions; mod health; mod trades; use axum::Router; use base_router::base_router; +pub use bot_actions::*; pub use health::*; use std::sync::Arc; pub use trades::*; @@ -13,5 +15,6 @@ use crate::context::app_context::AppContext; pub fn build_routes(app_context: Arc) -> Router { base_router(app_context.clone()) .merge(health_route()) - .merge(trades_route(app_context)) + .merge(trades_route(app_context.clone())) + .merge(bot_actions_route(app_context.clone())) }