import { logger } from '@stock-bot/logger'; import { Order, OrderResult } from '@stock-bot/types'; import { BrokerInterface } from '../broker/interface.ts'; export class OrderManager { private broker: BrokerInterface; private pendingOrders: Map = new Map(); constructor(broker: BrokerInterface) { this.broker = broker; } async executeOrder(order: Order): Promise { try { logger.info( `Executing order: ${order.symbol} ${order.side} ${order.quantity} @ ${order.price}` ); // Add to pending orders const orderId = `order_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; this.pendingOrders.set(orderId, order); // Execute with broker const result = await this.broker.executeOrder(order); // Remove from pending this.pendingOrders.delete(orderId); logger.info(`Order executed successfully: ${result.orderId}`); return result; } catch (error) { logger.error('Order execution failed', error); throw error; } } async cancelOrder(orderId: string): Promise { try { const success = await this.broker.cancelOrder(orderId); if (success) { this.pendingOrders.delete(orderId); logger.info(`Order cancelled: ${orderId}`); } return success; } catch (error) { logger.error('Order cancellation failed', error); throw error; } } async getOrderStatus(orderId: string) { return await this.broker.getOrderStatus(orderId); } getPendingOrders(): Order[] { return Array.from(this.pendingOrders.values()); } }