diff --git a/src/Managing.Api/Controllers/DataController.cs b/src/Managing.Api/Controllers/DataController.cs index 7856b0bd..a8911dfa 100644 --- a/src/Managing.Api/Controllers/DataController.cs +++ b/src/Managing.Api/Controllers/DataController.cs @@ -383,49 +383,6 @@ public class DataController : ControllerBase return Ok(topStrategiesByRoi); } - /// - /// Retrieves the top 3 performing agents based on PnL. - /// - /// A containing the top performing agents by PnL. - [HttpGet("GetTopAgentsByPnL")] - public async Task> GetTopAgentsByPnL() - { - try - { - // Get all agent summaries - var allAgentSummaries = await _mediator.Send(new GetAllAgentSummariesCommand()); - - // Filter agents with valid PnL data and order by NetPnL - var agentsWithPnL = allAgentSummaries - .Where(agent => agent.NetPnL != 0) // Only include agents with actual NetPnL - .OrderByDescending(agent => agent.NetPnL) - .Take(3) - .ToList(); - - // Map to view model - var topAgentsByPnL = new TopAgentsByPnLViewModel - { - TopAgentsByPnL = agentsWithPnL - .Select(agent => new AgentPerformance - { - AgentName = agent.AgentName, - PnL = agent.TotalPnL, - NetPnL = agent.NetPnL, - TotalROI = agent.TotalROI, - TotalVolume = agent.TotalVolume, - ActiveStrategiesCount = agent.ActiveStrategiesCount, - TotalBalance = agent.TotalBalance - }) - .ToList() - }; - - return Ok(topAgentsByPnL); - } - catch (Exception ex) - { - return StatusCode(500, $"Error retrieving top agents by PnL: {ex.Message}"); - } - } /// /// Retrieves list of the active strategies for a user with detailed information diff --git a/src/Managing.WebApp/src/generated/ManagingApi.ts b/src/Managing.WebApp/src/generated/ManagingApi.ts index 266d1d49..1656bc7f 100644 --- a/src/Managing.WebApp/src/generated/ManagingApi.ts +++ b/src/Managing.WebApp/src/generated/ManagingApi.ts @@ -1974,41 +1974,6 @@ export class DataClient extends AuthorizedApiBase { return Promise.resolve(null as any); } - data_GetTopAgentsByPnL(): Promise { - let url_ = this.baseUrl + "/Data/GetTopAgentsByPnL"; - url_ = url_.replace(/[?&]$/, ""); - - let options_: RequestInit = { - method: "GET", - headers: { - "Accept": "application/json" - } - }; - - return this.transformOptions(options_).then(transformedOptions_ => { - return this.http.fetch(url_, transformedOptions_); - }).then((_response: Response) => { - return this.processData_GetTopAgentsByPnL(_response); - }); - } - - protected processData_GetTopAgentsByPnL(response: Response): Promise { - const status = response.status; - let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; - if (status === 200) { - return response.text().then((_responseText) => { - let result200: any = null; - result200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver) as TopAgentsByPnLViewModel; - return result200; - }); - } else if (status !== 200 && status !== 204) { - return response.text().then((_responseText) => { - return throwException("An unexpected server error occurred.", status, _responseText, _headers); - }); - } - return Promise.resolve(null as any); - } - data_GetUserStrategies(agentName: string | null | undefined): Promise { let url_ = this.baseUrl + "/Data/GetUserStrategies?"; if (agentName !== undefined && agentName !== null) @@ -4520,20 +4485,6 @@ export interface StrategyRoiPerformance { volume?: number; } -export interface TopAgentsByPnLViewModel { - topAgentsByPnL?: AgentPerformance[] | null; -} - -export interface AgentPerformance { - agentName?: string | null; - pnL?: number; - netPnL?: number; - totalROI?: number; - totalVolume?: number; - activeStrategiesCount?: number; - totalBalance?: number; -} - export interface UserStrategyDetailsViewModel { name?: string | null; state?: BotStatus; diff --git a/src/Managing.WebApp/src/generated/ManagingApiTypes.ts b/src/Managing.WebApp/src/generated/ManagingApiTypes.ts index 07fe00a8..f5faf507 100644 --- a/src/Managing.WebApp/src/generated/ManagingApiTypes.ts +++ b/src/Managing.WebApp/src/generated/ManagingApiTypes.ts @@ -968,20 +968,6 @@ export interface StrategyRoiPerformance { volume?: number; } -export interface TopAgentsByPnLViewModel { - topAgentsByPnL?: AgentPerformance[] | null; -} - -export interface AgentPerformance { - agentName?: string | null; - pnL?: number; - netPnL?: number; - totalROI?: number; - totalVolume?: number; - activeStrategiesCount?: number; - totalBalance?: number; -} - export interface UserStrategyDetailsViewModel { name?: string | null; state?: BotStatus; diff --git a/src/Managing.WebApp/src/pages/dashboardPage/platformSummary.tsx b/src/Managing.WebApp/src/pages/dashboardPage/platformSummary.tsx index 4088d5c4..eebef7c3 100644 --- a/src/Managing.WebApp/src/pages/dashboardPage/platformSummary.tsx +++ b/src/Managing.WebApp/src/pages/dashboardPage/platformSummary.tsx @@ -268,7 +268,7 @@ function PlatformSummary({index}: { index: number }) {

Top 3 Agents by PnL

- {topAgentsByPnL?.topAgentsByPnL?.slice(0, 3).map((agent, index) => ( + {topAgentsByPnL?.slice(0, 3).map((agent, index) => (
diff --git a/src/Managing.WebApp/src/services/platformService.ts b/src/Managing.WebApp/src/services/platformService.ts index 77e754f7..2bfcb62f 100644 --- a/src/Managing.WebApp/src/services/platformService.ts +++ b/src/Managing.WebApp/src/services/platformService.ts @@ -1,33 +1,34 @@ import { + type AgentSummaryViewModel, DataClient, type PlatformSummaryViewModel, + SortableFields, type TopStrategiesByRoiViewModel, - type TopStrategiesViewModel, - type TopAgentsByPnLViewModel + type TopStrategiesViewModel } from '../generated/ManagingApi' export interface PlatformData { platform: PlatformSummaryViewModel topStrategies: TopStrategiesViewModel topStrategiesByRoi: TopStrategiesByRoiViewModel - topAgentsByPnL: TopAgentsByPnLViewModel + topAgentsByPnL: AgentSummaryViewModel[] } export const fetchPlatformData = async (apiUrl: string): Promise => { const client = new DataClient({}, apiUrl) // Fetch all platform data in parallel - const [platform, topStrategies, topStrategiesByRoi, topAgentsByPnL] = await Promise.all([ + const [platform, topStrategies, topStrategiesByRoi, agentIndexResponse] = await Promise.all([ client.data_GetPlatformSummary(), client.data_GetTopStrategies(), client.data_GetTopStrategiesByRoi(), - client.data_GetTopAgentsByPnL() + client.data_GetAgentIndexPaginated(1, 3, SortableFields.NetPnL, 'desc', null) // Get top 3 agents by NetPnL ]) return { platform, topStrategies, topStrategiesByRoi, - topAgentsByPnL + topAgentsByPnL: agentIndexResponse.agentSummaries || [] } }