From 71eeb499d217045ed02afa0561e8db173c619c11 Mon Sep 17 00:00:00 2001 From: f321x Date: Fri, 28 Jun 2024 13:14:56 +0200 Subject: [PATCH] fetch_available_offers endpoint --- shell.nix | 3 ++- .../coordinator/src/communication/api.rs | 12 +++++++++ .../coordinator/src/communication/mod.rs | 15 ++++++++--- .../coordinator/src/database/mod.rs | 26 +++++++++++++++++++ taptrade-cli-demo/coordinator/src/main.rs | 2 +- 5 files changed, 52 insertions(+), 6 deletions(-) diff --git a/shell.nix b/shell.nix index 2676669..2a040c1 100644 --- a/shell.nix +++ b/shell.nix @@ -10,7 +10,8 @@ in pkg-config zlib openssl - cargo + cargo + clippy rustc rustfmt gcc diff --git a/taptrade-cli-demo/coordinator/src/communication/api.rs b/taptrade-cli-demo/coordinator/src/communication/api.rs index 57c51f9..52988df 100644 --- a/taptrade-cli-demo/coordinator/src/communication/api.rs +++ b/taptrade-cli-demo/coordinator/src/communication/api.rs @@ -40,3 +40,15 @@ pub struct OffersRequest { pub amount_min_sat: u64, pub amount_max_sat: u64, } + +// Offer information of each offer returned by the previous response +#[derive(Deserialize, Serialize, Debug)] +pub struct PublicOffer { + pub amount_sat: u64, + pub offer_id_hex: String, +} + +#[derive(Deserialize, Serialize, Debug)] +pub struct PublicOffers { + pub offers: Option>, // don't include offers var in return json if no offers are available +} diff --git a/taptrade-cli-demo/coordinator/src/communication/mod.rs b/taptrade-cli-demo/coordinator/src/communication/mod.rs index b5d6f9c..0258a26 100755 --- a/taptrade-cli-demo/coordinator/src/communication/mod.rs +++ b/taptrade-cli-demo/coordinator/src/communication/mod.rs @@ -70,12 +70,19 @@ async fn submit_maker_bond( async fn fetch_available_offers( Extension(database): Extension, - Extension(wallet): Extension, + Extension(_): Extension, Json(payload): Json, -) -> Result>, AppError> { +) -> Result, AppError> { + // let suitable_offers: Option> = + database.fetch_suitable_offers(&payload).await?; - // let offers = database.fetch_available_offers(&payload).await?; - // Ok(Json(offers)) + Ok(Json(OrderActivatedResponse { + offer_id_hex: "test".to_string(), + bond_locked_until_timestamp: 21312313, + })) + // Ok(Json(PublicOffers { + // offers: suitable_offers, + // })) } pub async fn api_server(database: CoordinatorDB, wallet: CoordinatorWallet) -> Result<()> { diff --git a/taptrade-cli-demo/coordinator/src/database/mod.rs b/taptrade-cli-demo/coordinator/src/database/mod.rs index 492ef56..e7cfc31 100644 --- a/taptrade-cli-demo/coordinator/src/database/mod.rs +++ b/taptrade-cli-demo/coordinator/src/database/mod.rs @@ -174,4 +174,30 @@ impl CoordinatorDB { Ok(remaining_offer_information.offer_duration_ts) } + + pub async fn fetch_suitable_offers( + &self, + requested_offer: &OffersRequest, + ) -> Result>> { + let fetched_offers = sqlx::query_as::<_, (String, i64)> ( + "SELECT offer_id, amount_sat FROM maker_requests WHERE is_buy_order = ? AND amount_sat BETWEEN ? AND ?", + ) + .bind(requested_offer.buy_offers) + .bind(requested_offer.amount_min_sat as i64) + .bind(requested_offer.amount_max_sat as i64) + .fetch_all(&*self.db_pool) + .await?; + + let available_offers: Vec = fetched_offers + .into_iter() + .map(|(offer_id_hex, amount_sat)| PublicOffer { + offer_id_hex, + amount_sat: amount_sat as u64, + }) + .collect(); + if available_offers.is_empty() { + return Ok(None); + } + Ok(Some(available_offers)) + } } diff --git a/taptrade-cli-demo/coordinator/src/main.rs b/taptrade-cli-demo/coordinator/src/main.rs index b6f5e17..c44bad4 100755 --- a/taptrade-cli-demo/coordinator/src/main.rs +++ b/taptrade-cli-demo/coordinator/src/main.rs @@ -1,5 +1,5 @@ mod communication; -mod coordinator; +// mod coordinator; mod database; mod wallet;