From 5427c8a97181a775ad2a4be92118fd2e28034370 Mon Sep 17 00:00:00 2001 From: cryptooda Date: Tue, 22 Jul 2025 00:14:50 +0700 Subject: [PATCH] Update backtest bundle --- .../BacktestRepository.cs | 1 + .../pages/backtestPage/BundleRequestModal.tsx | 56 +++++++++++++------ 2 files changed, 41 insertions(+), 16 deletions(-) diff --git a/src/Managing.Infrastructure.Database/BacktestRepository.cs b/src/Managing.Infrastructure.Database/BacktestRepository.cs index 10c4fd8..cec4cd6 100644 --- a/src/Managing.Infrastructure.Database/BacktestRepository.cs +++ b/src/Managing.Infrastructure.Database/BacktestRepository.cs @@ -332,6 +332,7 @@ public class BacktestRepository : IBacktestRepository .Include(b => b.ErrorMessage) .Include(b => b.ProgressInfo) .Include(b => b.Name) + .Include(b => b.CompletedBacktests) .Include(b => b.User); var filter = Builders.Filter.Eq(b => b.User.Name, user.Name); diff --git a/src/Managing.WebApp/src/pages/backtestPage/BundleRequestModal.tsx b/src/Managing.WebApp/src/pages/backtestPage/BundleRequestModal.tsx index 1598fb7..1f1b79c 100644 --- a/src/Managing.WebApp/src/pages/backtestPage/BundleRequestModal.tsx +++ b/src/Managing.WebApp/src/pages/backtestPage/BundleRequestModal.tsx @@ -1,5 +1,5 @@ import React, {useEffect, useRef, useState} from 'react'; -import {BundleBacktestRequest, LightBacktestResponse} from '../../generated/ManagingApiTypes'; +import {BundleBacktestRequest, LightBacktestResponse, Ticker, Timeframe} from '../../generated/ManagingApiTypes'; import {BacktestClient} from '../../generated/ManagingApi'; import useApiUrlStore from '../../app/store/apiStore'; import Toast from '../../components/mollecules/Toast/Toast'; @@ -31,21 +31,32 @@ const BundleRequestModal: React.FC = ({ open, onClose, const client = new BacktestClient({} as any, apiUrl); const res = await client.backtest_GetBacktestsByRequestId(bundle.requestId); if (!res) return []; - return res.map((b: any) => ({ - id: b.id, - config: b.config, - finalPnl: b.finalPnl, - winRate: b.winRate, - growthPercentage: b.growthPercentage, - hodlPercentage: b.hodlPercentage, - startDate: b.startDate, - endDate: b.endDate, - maxDrawdown: b.maxDrawdown ?? null, - fees: b.fees, - sharpeRatio: b.sharpeRatio ?? null, - score: b.score ?? 0, - scoreMessage: b.scoreMessage ?? '', - })); + return res.map((b: any) => { + // Map enums for ticker and timeframe + if (b.config) { + if (typeof b.config.ticker === 'number') { + b.config.ticker = Ticker[b.config.ticker as keyof typeof Ticker]; + } + if (typeof b.config.timeframe === 'number') { + b.config.timeframe = Timeframe[b.config.timeframe as keyof typeof Timeframe]; + } + } + return { + id: b.id, + config: b.config, + finalPnl: b.finalPnl, + winRate: b.winRate, + growthPercentage: b.growthPercentage, + hodlPercentage: b.hodlPercentage, + startDate: b.startDate, + endDate: b.endDate, + maxDrawdown: b.maxDrawdown ?? null, + fees: b.fees, + sharpeRatio: b.sharpeRatio ?? null, + score: b.score ?? 0, + scoreMessage: b.scoreMessage ?? '', + }; + }); }, enabled: !!open && !!bundle, refetchOnWindowFocus: false, @@ -78,6 +89,19 @@ const BundleRequestModal: React.FC = ({ open, onClose, fetchOptions = await authBase.transformOptions(fetchOptions); await fetch(`${apiUrl}/backtest/Bundle/Subscribe?requestId=${bundle.requestId}`, fetchOptions); connection.on('BundleBacktestUpdate', (result: LightBacktestResponse) => { + // Map enums if needed + if (result.config) { + if (typeof result.config.ticker === 'number') { + result.config.ticker = Ticker[result.config.ticker as keyof typeof Ticker]; + } else if (typeof result.config.ticker === 'string' && Ticker[result.config.ticker as keyof typeof Ticker]) { + result.config.ticker = Ticker[result.config.ticker as keyof typeof Ticker]; + } + if (typeof result.config.timeframe === 'number') { + result.config.timeframe = Timeframe[result.config.timeframe as keyof typeof Timeframe]; + } else if (typeof result.config.timeframe === 'string' && Timeframe[result.config.timeframe as keyof typeof Timeframe]) { + result.config.timeframe = Timeframe[result.config.timeframe as keyof typeof Timeframe]; + } + } setBacktests((prev) => { if (prev.some((b) => b.id === result.id)) return prev; return [...prev, result];