use crate::auth::AuthManager;
use crate::endpoints::base::BaseEndpoint;
use crate::error::WebullResult;
use crate::models::order::{Order, OrderQueryParams, OrderRequest, OrderResponse};
use reqwest::Client;
use std::sync::Arc;
pub struct OrderEndpoints {
base: BaseEndpoint,
}
impl OrderEndpoints {
pub fn new(client: Client, base_url: String, auth_manager: Arc<AuthManager>) -> Self {
Self {
base: BaseEndpoint::new(client, base_url, auth_manager),
}
}
pub async fn place_order(&self, order: &OrderRequest) -> WebullResult<OrderResponse> {
self.base.post("/api/trade/order", order).await
}
pub async fn cancel_order(&self, order_id: &str) -> WebullResult<()> {
let path = format!("/api/trade/cancel/{}", order_id);
self.base.delete(&path).await
}
pub async fn get_order(&self, order_id: &str) -> WebullResult<Order> {
let path = format!("/api/trade/order/{}", order_id);
self.base.get(&path).await
}
pub async fn get_orders(&self, params: &OrderQueryParams) -> WebullResult<Vec<Order>> {
self.base.post("/api/trade/orders", params).await
}
pub async fn get_active_orders(&self) -> WebullResult<Vec<Order>> {
self.base.get("/api/trade/active").await
}
pub async fn get_filled_orders(&self) -> WebullResult<Vec<Order>> {
self.base.get("/api/trade/filled").await
}
pub async fn modify_order(&self, order_id: &str, order: &OrderRequest) -> WebullResult<OrderResponse> {
let path = format!("/api/trade/modify/{}", order_id);
self.base.put(&path, order).await
}
}