mirror of
https://github.com/RoboSats/taptrade-core.git
synced 2025-07-19 17:23:26 +00:00
fetch_available_offers endpoint
This commit is contained in:
@ -10,7 +10,8 @@ in
|
|||||||
pkg-config
|
pkg-config
|
||||||
zlib
|
zlib
|
||||||
openssl
|
openssl
|
||||||
cargo
|
cargo
|
||||||
|
clippy
|
||||||
rustc
|
rustc
|
||||||
rustfmt
|
rustfmt
|
||||||
gcc
|
gcc
|
||||||
|
@ -40,3 +40,15 @@ pub struct OffersRequest {
|
|||||||
pub amount_min_sat: u64,
|
pub amount_min_sat: u64,
|
||||||
pub amount_max_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<Vec<PublicOffer>>, // don't include offers var in return json if no offers are available
|
||||||
|
}
|
||||||
|
@ -70,12 +70,19 @@ async fn submit_maker_bond(
|
|||||||
|
|
||||||
async fn fetch_available_offers(
|
async fn fetch_available_offers(
|
||||||
Extension(database): Extension<CoordinatorDB>,
|
Extension(database): Extension<CoordinatorDB>,
|
||||||
Extension(wallet): Extension<CoordinatorWallet>,
|
Extension(_): Extension<CoordinatorWallet>,
|
||||||
Json(payload): Json<OffersRequest>,
|
Json(payload): Json<OffersRequest>,
|
||||||
) -> Result<Json<Vec<PublicOffer>>, AppError> {
|
) -> Result<Json<OrderActivatedResponse>, AppError> {
|
||||||
|
// let suitable_offers: Option<Vec<PublicOffer>> =
|
||||||
|
database.fetch_suitable_offers(&payload).await?;
|
||||||
|
|
||||||
// let offers = database.fetch_available_offers(&payload).await?;
|
Ok(Json(OrderActivatedResponse {
|
||||||
// Ok(Json(offers))
|
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<()> {
|
pub async fn api_server(database: CoordinatorDB, wallet: CoordinatorWallet) -> Result<()> {
|
||||||
|
@ -174,4 +174,30 @@ impl CoordinatorDB {
|
|||||||
|
|
||||||
Ok(remaining_offer_information.offer_duration_ts)
|
Ok(remaining_offer_information.offer_duration_ts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn fetch_suitable_offers(
|
||||||
|
&self,
|
||||||
|
requested_offer: &OffersRequest,
|
||||||
|
) -> Result<Option<Vec<PublicOffer>>> {
|
||||||
|
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<PublicOffer> = 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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
mod communication;
|
mod communication;
|
||||||
mod coordinator;
|
// mod coordinator;
|
||||||
mod database;
|
mod database;
|
||||||
mod wallet;
|
mod wallet;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user