import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Observable } from 'rxjs'; export interface RiskThresholds { maxPositionSize: number; maxDailyLoss: number; maxPortfolioRisk: number; volatilityLimit: number; } export interface RiskEvaluation { symbol: string; positionValue: number; positionRisk: number; violations: string[]; riskLevel: 'LOW' | 'MEDIUM' | 'HIGH'; } export interface MarketData { symbol: string; price: number; change: number; changePercent: number; volume: number; timestamp: string; } @Injectable({ providedIn: 'root' }) export class ApiService { private readonly baseUrls = { riskGuardian: 'http://localhost:3002', strategyOrchestrator: 'http://localhost:3003', marketDataGateway: 'http://localhost:3001' }; constructor(private http: HttpClient) {} // Risk Guardian API getRiskThresholds(): Observable<{ success: boolean; data: RiskThresholds }> { return this.http.get<{ success: boolean; data: RiskThresholds }>( `${this.baseUrls.riskGuardian}/api/risk/thresholds` ); } updateRiskThresholds(thresholds: RiskThresholds): Observable<{ success: boolean; data: RiskThresholds }> { return this.http.put<{ success: boolean; data: RiskThresholds }>( `${this.baseUrls.riskGuardian}/api/risk/thresholds`, thresholds ); } evaluateRisk(params: { symbol: string; quantity: number; price: number; portfolioValue: number; }): Observable<{ success: boolean; data: RiskEvaluation }> { return this.http.post<{ success: boolean; data: RiskEvaluation }>( `${this.baseUrls.riskGuardian}/api/risk/evaluate`, params ); } getRiskHistory(): Observable<{ success: boolean; data: RiskEvaluation[] }> { return this.http.get<{ success: boolean; data: RiskEvaluation[] }>( `${this.baseUrls.riskGuardian}/api/risk/history` ); } // Strategy Orchestrator API getStrategies(): Observable<{ success: boolean; data: any[] }> { return this.http.get<{ success: boolean; data: any[] }>( `${this.baseUrls.strategyOrchestrator}/api/strategies` ); } createStrategy(strategy: any): Observable<{ success: boolean; data: any }> { return this.http.post<{ success: boolean; data: any }>( `${this.baseUrls.strategyOrchestrator}/api/strategies`, strategy ); } // Market Data Gateway API getMarketData(symbols: string[] = ['AAPL', 'GOOGL', 'MSFT', 'TSLA', 'AMZN']): Observable<{ success: boolean; data: MarketData[] }> { const symbolsParam = symbols.join(','); return this.http.get<{ success: boolean; data: MarketData[] }>( `${this.baseUrls.marketDataGateway}/api/market-data?symbols=${symbolsParam}` ); } // Health checks checkServiceHealth(service: 'riskGuardian' | 'strategyOrchestrator' | 'marketDataGateway'): Observable { return this.http.get(`${this.baseUrls[service]}/health`); } }