mirror of
https://github.com/RoboSats/taptrade-core.git
synced 2025-08-11 12:30:01 +00:00
add coordinator endpoint for maker psbt polling
This commit is contained in:
@ -67,3 +67,9 @@ pub struct OfferPsbtRequest {
|
|||||||
pub offer: PublicOffer,
|
pub offer: PublicOffer,
|
||||||
pub trade_data: BondSubmissionRequest,
|
pub trade_data: BondSubmissionRequest,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct OfferTakenRequest {
|
||||||
|
pub robohash_hex: String,
|
||||||
|
pub order_id_hex: String,
|
||||||
|
}
|
||||||
|
@ -120,14 +120,29 @@ async fn submit_taker_bond(
|
|||||||
.into_response())
|
.into_response())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn request_offer_status_maker(
|
||||||
|
Extension(database): Extension<CoordinatorDB>,
|
||||||
|
Json(payload): Json<OfferTakenRequest>,
|
||||||
|
) -> Result<Response, AppError> {
|
||||||
|
let offer = database
|
||||||
|
.fetch_taken_offer_maker(&payload.order_id_hex, &payload.robohash_hex)
|
||||||
|
.await?;
|
||||||
|
match offer {
|
||||||
|
Some(offer) => Ok(Json(OfferTakenResponse {
|
||||||
|
trade_psbt_hex_to_sign: offer,
|
||||||
|
})
|
||||||
|
.into_response()),
|
||||||
|
None => Ok(StatusCode::NO_CONTENT.into_response()),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn api_server(database: CoordinatorDB, wallet: CoordinatorWallet) -> Result<()> {
|
pub async fn api_server(database: CoordinatorDB, wallet: CoordinatorWallet) -> Result<()> {
|
||||||
let app = Router::new()
|
let app = Router::new()
|
||||||
.route("/create-offer", post(receive_order))
|
.route("/create-offer", post(receive_order))
|
||||||
.route("/submit-maker-bond", post(submit_maker_bond))
|
.route("/submit-maker-bond", post(submit_maker_bond))
|
||||||
.route("/fetch-available-offers", post(fetch_available_offers))
|
.route("/fetch-available-offers", post(fetch_available_offers))
|
||||||
.route("/submit-taker-bond", post(submit_taker_bond))
|
.route("/submit-taker-bond", post(submit_taker_bond))
|
||||||
// submit-taker-bond
|
.route("/request-offer-status", post(request_offer_status_maker))
|
||||||
// request-offer-status
|
|
||||||
.layer(Extension(database))
|
.layer(Extension(database))
|
||||||
.layer(Extension(wallet));
|
.layer(Extension(wallet));
|
||||||
// add other routes here
|
// add other routes here
|
||||||
|
@ -346,6 +346,33 @@ impl CoordinatorDB {
|
|||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn fetch_taken_offer_maker(
|
||||||
|
&self,
|
||||||
|
offer_id_hex: &String,
|
||||||
|
robohash_hex_maker: &String,
|
||||||
|
) -> Result<Option<String>> {
|
||||||
|
let offer = sqlx::query(
|
||||||
|
"SELECT escrow_psbt_hex_maker, robohash_maker FROM taken_offers WHERE offer_id = ?",
|
||||||
|
)
|
||||||
|
.bind(offer_id_hex)
|
||||||
|
.fetch_optional(&*self.db_pool)
|
||||||
|
.await?;
|
||||||
|
let offer = match offer {
|
||||||
|
Some(offer) => offer,
|
||||||
|
None => return Ok(None),
|
||||||
|
};
|
||||||
|
match offer.try_get::<Vec<u8>, _>("robohash_maker") {
|
||||||
|
Ok(robohash) => {
|
||||||
|
if hex::encode(robohash) == *robohash_hex_maker {
|
||||||
|
Ok(offer.try_get("escrow_psbt_hex_maker")?)
|
||||||
|
} else {
|
||||||
|
Ok(None)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(_) => Ok(None),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
|
Reference in New Issue
Block a user