Skip to content

Commit

Permalink
feat: add possibility to delete orders
Browse files Browse the repository at this point in the history
  • Loading branch information
bonomat committed Mar 10, 2024
1 parent 26690ae commit d552ea2
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
-- We need to do something, or the migration fails
select 1;
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
ALTER TYPE "OrderState_Type" ADD VALUE IF NOT EXISTS 'Deleted';
4 changes: 4 additions & 0 deletions coordinator/src/orderbook/db/custom_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ pub(crate) enum OrderState {
Failed,
/// The order expired.
Expired,
/// The order was manually deleted by the trader
Deleted,
}

impl QueryId for OrderStateType {
Expand All @@ -121,6 +123,7 @@ impl ToSql<OrderStateType, Pg> for OrderState {
OrderState::Taken => out.write_all(b"Taken")?,
OrderState::Failed => out.write_all(b"Failed")?,
OrderState::Expired => out.write_all(b"Expired")?,
OrderState::Deleted => out.write_all(b"Deleted")?,
}
Ok(IsNull::No)
}
Expand All @@ -134,6 +137,7 @@ impl FromSql<OrderStateType, Pg> for OrderState {
b"Taken" => Ok(OrderState::Taken),
b"Failed" => Ok(OrderState::Failed),
b"Expired" => Ok(OrderState::Expired),
b"Deleted" => Ok(OrderState::Deleted),
_ => Err("Unrecognized enum variant".into()),
}
}
Expand Down
7 changes: 7 additions & 0 deletions coordinator/src/orderbook/db/orders.rs
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ impl From<OrderState> for OrderBookOrderState {
OrderState::Taken => OrderBookOrderState::Taken,
OrderState::Failed => OrderBookOrderState::Failed,
OrderState::Expired => OrderBookOrderState::Expired,
OrderState::Deleted => OrderBookOrderState::Deleted,
}
}
}
Expand All @@ -78,6 +79,7 @@ impl From<OrderBookOrderState> for OrderState {
OrderBookOrderState::Taken => OrderState::Taken,
OrderBookOrderState::Failed => OrderState::Failed,
OrderBookOrderState::Expired => OrderState::Expired,
OrderBookOrderState::Deleted => OrderState::Deleted,
}
}
}
Expand Down Expand Up @@ -266,6 +268,11 @@ pub fn set_is_taken(
}
}

/// Updates the order state to `Deleted`
pub fn delete(conn: &mut PgConnection, id: Uuid) -> QueryResult<OrderbookOrder> {
set_order_state(conn, id, commons::OrderState::Deleted)
}

/// Returns the number of affected rows: 1.
pub fn set_order_state(
conn: &mut PgConnection,
Expand Down
14 changes: 14 additions & 0 deletions coordinator/src/orderbook/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,20 @@ pub async fn put_order(
Ok(Json(order))
}

#[instrument(skip_all, err(Debug))]
pub async fn delete_order(
Path(order_id): Path<Uuid>,
State(state): State<Arc<AppState>>,
) -> Result<Json<Order>, AppError> {
let mut conn = get_db_connection(&state)?;
let order = orderbook::db::orders::delete(&mut conn, order_id)
.map_err(|e| AppError::InternalServerError(format!("Failed to delete order: {e:#}")))?;
let sender = state.tx_price_feed.clone();
update_pricefeed(Message::Update(order.clone()), sender);

Ok(Json(order))
}

pub async fn websocket_handler(
ws: WebSocketUpgrade,
State(state): State<Arc<AppState>>,
Expand Down
3 changes: 2 additions & 1 deletion coordinator/src/routes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ use crate::message::NewUserMessage;
use crate::message::OrderbookMessage;
use crate::node::Node;
use crate::notifications::Notification;
use crate::orderbook::routes::delete_order;
use crate::orderbook::routes::get_order;
use crate::orderbook::routes::get_orders;
use crate::orderbook::routes::post_order;
Expand Down Expand Up @@ -162,7 +163,7 @@ pub fn router(
.route("/api/orderbook/orders", get(get_orders).post(post_order))
.route(
"/api/orderbook/orders/:order_id",
get(get_order).put(put_order),
get(get_order).put(put_order).delete(delete_order),
)
.route("/api/orderbook/websocket", get(websocket_handler))
.route("/api/trade", post(post_trade))
Expand Down
1 change: 1 addition & 0 deletions crates/commons/src/order.rs
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ pub enum OrderState {
Taken,
Failed,
Expired,
Deleted,
}

#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
Expand Down

0 comments on commit d552ea2

Please sign in to comment.