98 lines
3 KiB
TypeScript
98 lines
3 KiB
TypeScript
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<any> {
|
|
return this.http.get(`${this.baseUrls[service]}/health`);
|
|
}
|
|
}
|