ig_client/application/services/interfaces/
order.rs1use crate::application::models::account::WorkingOrders;
2use crate::application::models::order::{
3 ClosePositionRequest, ClosePositionResponse, CreateOrderRequest, CreateOrderResponse,
4 OrderConfirmation, UpdatePositionRequest, UpdatePositionResponse,
5};
6use crate::application::models::working_order::{
7 CreateWorkingOrderRequest, CreateWorkingOrderResponse,
8};
9use crate::error::AppError;
10use crate::session::interface::IgSession;
11use async_trait::async_trait;
12
13#[async_trait]
14pub trait OrderService: Send + Sync {
20 async fn create_order(
22 &self,
23 session: &IgSession,
24 order: &CreateOrderRequest,
25 ) -> Result<CreateOrderResponse, AppError>;
26
27 async fn get_order_confirmation(
29 &self,
30 session: &IgSession,
31 deal_reference: &str,
32 ) -> Result<OrderConfirmation, AppError>;
33
34 async fn update_position(
36 &self,
37 session: &IgSession,
38 deal_id: &str,
39 update: &UpdatePositionRequest,
40 ) -> Result<UpdatePositionResponse, AppError>;
41
42 async fn close_position(
44 &self,
45 session: &IgSession,
46 close_request: &ClosePositionRequest,
47 ) -> Result<ClosePositionResponse, AppError>;
48
49 async fn get_working_orders(&self, session: &IgSession) -> Result<WorkingOrders, AppError>;
51
52 async fn create_working_order(
54 &self,
55 session: &IgSession,
56 order: &CreateWorkingOrderRequest,
57 ) -> Result<CreateWorkingOrderResponse, AppError>;
58}