From 6a2e4e81b127c20db723208a7eb99293640e9933 Mon Sep 17 00:00:00 2001 From: cryptooda Date: Thu, 14 Aug 2025 18:08:31 +0700 Subject: [PATCH] Update status to match UI --- src/Managing.Api/Controllers/BotController.cs | 8 ++-- .../Controllers/DataController.cs | 4 +- .../Grains/BotRegistryEntry.cs | 2 +- .../Bots/Grains/AgentGrain.cs | 2 +- .../Bots/Grains/LiveBotRegistryGrain.cs | 8 ++-- .../Bots/Grains/LiveTradingBotGrain.cs | 22 ++++----- .../ManageBot/BotService.cs | 16 +++---- .../GetAgentStatusesCommandHandler.cs | 4 +- .../ManageBot/StartBotCommandHandler.cs | 2 +- .../StopAllUserBotsCommandHandler.cs | 2 +- .../Workers/BalanceTrackingWorker.cs | 2 +- src/Managing.Common/Enums.cs | 6 +-- .../PostgreSql/AgentSummaryRepository.cs | 2 +- .../src/generated/ManagingApi.ts | 47 ++++++++++++++++--- .../src/generated/ManagingApiTypes.ts | 12 ++--- src/Managing.WebApp/src/hooks/useBots.tsx | 2 +- .../src/pages/botsPage/botList.tsx | 24 ++++++++-- .../src/pages/botsPage/bots.tsx | 8 ++-- 18 files changed, 111 insertions(+), 62 deletions(-) diff --git a/src/Managing.Api/Controllers/BotController.cs b/src/Managing.Api/Controllers/BotController.cs index e0d95d6..e1072c2 100644 --- a/src/Managing.Api/Controllers/BotController.cs +++ b/src/Managing.Api/Controllers/BotController.cs @@ -297,7 +297,7 @@ public class BotController : BaseController [HttpGet] public async Task> GetActiveBots() { - return await GetBotsByStatusAsync(BotStatus.Up); + return await GetBotsByStatusAsync(BotStatus.Running); } /// @@ -328,7 +328,7 @@ public class BotController : BaseController return new List(); } - var result = await _mediator.Send(new GetBotsByUserAndStatusCommand(user.Id, BotStatus.None)); + var result = await _mediator.Send(new GetBotsByUserAndStatusCommand(user.Id, BotStatus.Saved)); return MapBotsToTradingBotResponse(result); } catch (Exception ex) @@ -467,7 +467,7 @@ public class BotController : BaseController /// private async Task NotifyBotSubscriberAsync() { - var botsList = await GetBotsByStatusAsync(BotStatus.Up); + var botsList = await GetBotsByStatusAsync(BotStatus.Running); await _hubContext.Clients.All.SendAsync("BotsSubscription", botsList); } @@ -495,7 +495,7 @@ public class BotController : BaseController return NotFound($"Bot with identifier {request.Identifier} not found or is not a trading bot"); } - if (bot.Status != BotStatus.Up) + if (bot.Status != BotStatus.Running) { return BadRequest($"Bot with identifier {request.Identifier} is not running"); } diff --git a/src/Managing.Api/Controllers/DataController.cs b/src/Managing.Api/Controllers/DataController.cs index aef5e2e..2e295eb 100644 --- a/src/Managing.Api/Controllers/DataController.cs +++ b/src/Managing.Api/Controllers/DataController.cs @@ -292,7 +292,7 @@ public class DataController : ControllerBase } // Get active bots - var activeBots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Up)); + var activeBots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Running)); var currentCount = activeBots.Count(); // Get previous count from cache @@ -345,7 +345,7 @@ public class DataController : ControllerBase } // Get active bots - var activeBots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Up)); + var activeBots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Running)); // Calculate PnL for each bot once and store in a list of tuples var botsWithPnL = activeBots diff --git a/src/Managing.Application.Abstractions/Grains/BotRegistryEntry.cs b/src/Managing.Application.Abstractions/Grains/BotRegistryEntry.cs index 9622b5e..8f80873 100644 --- a/src/Managing.Application.Abstractions/Grains/BotRegistryEntry.cs +++ b/src/Managing.Application.Abstractions/Grains/BotRegistryEntry.cs @@ -44,7 +44,7 @@ public class BotRegistryEntry { } - public BotRegistryEntry(Guid identifier, int userId, BotStatus status = BotStatus.None) + public BotRegistryEntry(Guid identifier, int userId, BotStatus status = BotStatus.Saved) { Identifier = identifier; UserId = userId; diff --git a/src/Managing.Application/Bots/Grains/AgentGrain.cs b/src/Managing.Application/Bots/Grains/AgentGrain.cs index b0539cd..30f9847 100644 --- a/src/Managing.Application/Bots/Grains/AgentGrain.cs +++ b/src/Managing.Application/Bots/Grains/AgentGrain.cs @@ -131,7 +131,7 @@ public class AgentGrain : Grain, IAgentGrain, IRemindable Losses = totalLosses, TotalROI = totalROI, Runtime = runtime, - ActiveStrategiesCount = bots.Count(b => b.Status == BotStatus.Up), + ActiveStrategiesCount = bots.Count(b => b.Status == BotStatus.Running), TotalVolume = totalVolume, }; diff --git a/src/Managing.Application/Bots/Grains/LiveBotRegistryGrain.cs b/src/Managing.Application/Bots/Grains/LiveBotRegistryGrain.cs index 4acdb5a..ccc3b16 100644 --- a/src/Managing.Application/Bots/Grains/LiveBotRegistryGrain.cs +++ b/src/Managing.Application/Bots/Grains/LiveBotRegistryGrain.cs @@ -82,7 +82,7 @@ public class LiveBotRegistryGrain : Grain, ILiveBotRegistryGrain // O(1) FIX: Decrement the counters based on the removed entry's status _state.State.TotalBotsCount--; - if (entryToRemove.Status == BotStatus.Up) + if (entryToRemove.Status == BotStatus.Running) { _state.State.ActiveBotsCount--; } @@ -140,11 +140,11 @@ public class LiveBotRegistryGrain : Grain, ILiveBotRegistryGrain } // O(1) FIX: Conditionally adjust the counter - if (newStatus == BotStatus.Up && previousStatus != BotStatus.Up) + if (newStatus == BotStatus.Running && previousStatus != BotStatus.Running) { _state.State.ActiveBotsCount++; } - else if (newStatus != BotStatus.Up && previousStatus == BotStatus.Up) + else if (newStatus != BotStatus.Running && previousStatus == BotStatus.Running) { _state.State.ActiveBotsCount--; } @@ -171,7 +171,7 @@ public class LiveBotRegistryGrain : Grain, ILiveBotRegistryGrain if (!_state.State.Bots.TryGetValue(identifier, out var entry)) { _logger.LogWarning("Bot {Identifier} is not registered in the registry, returning None", identifier); - return Task.FromResult(BotStatus.None); + return Task.FromResult(BotStatus.Saved); } return Task.FromResult(entry.Status); diff --git a/src/Managing.Application/Bots/Grains/LiveTradingBotGrain.cs b/src/Managing.Application/Bots/Grains/LiveTradingBotGrain.cs index cd34ecb..f569aa9 100644 --- a/src/Managing.Application/Bots/Grains/LiveTradingBotGrain.cs +++ b/src/Managing.Application/Bots/Grains/LiveTradingBotGrain.cs @@ -79,7 +79,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable var agentGrain = GrainFactory.GetGrain(user.Id); await agentGrain.RegisterBotAsync(_state.State.Identifier); - await SaveBotAsync(BotStatus.None); + await SaveBotAsync(BotStatus.Saved); _logger.LogInformation("LiveTradingBotGrain {GrainId} created successfully", this.GetPrimaryKey()); } @@ -94,7 +94,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable _logger.LogInformation("LiveTradingBotGrain {GrainId} activated. Registry status: {Status}", botId, botStatus); - if (botStatus == BotStatus.Up && _tradingBot == null) + if (botStatus == BotStatus.Running && _tradingBot == null) { // Now, we can proceed with resuming the bot. await ResumeBotInternalAsync(); @@ -124,8 +124,8 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable await RegisterReminder(); // Update both database and registry status - await SaveBotAsync(BotStatus.Up); - await UpdateBotRegistryStatus(BotStatus.Up); + await SaveBotAsync(BotStatus.Running); + await UpdateBotRegistryStatus(BotStatus.Running); _logger.LogInformation("LiveTradingBotGrain {GrainId} resumed successfully", this.GetPrimaryKey()); } @@ -133,7 +133,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable { _logger.LogError(ex, "Failed to resume bot {GrainId}", this.GetPrimaryKey()); _tradingBot = null; // Clean up on failure - await UpdateBotRegistryStatus(BotStatus.Down); + await UpdateBotRegistryStatus(BotStatus.Stopped); throw; } } @@ -145,7 +145,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable var status = await botRegistry.GetBotStatus(botId); // Check if already running - if (status == BotStatus.Up && _tradingBot != null) + if (status == BotStatus.Running && _tradingBot != null) { await RegisterReminder(); _logger.LogInformation("LiveTradingBotGrain {GrainId} is already running", this.GetPrimaryKey()); @@ -162,7 +162,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable { _logger.LogError(ex, "Failed to start LiveTradingBotGrain {GrainId}", this.GetPrimaryKey()); // Ensure registry status is correct on failure - await UpdateBotRegistryStatus(BotStatus.Down); + await UpdateBotRegistryStatus(BotStatus.Stopped); throw; } } @@ -197,7 +197,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable // The check is now against the registry status var botRegistry = GrainFactory.GetGrain(0); var botStatus = await botRegistry.GetBotStatus(this.GetPrimaryKey()); - if (botStatus == BotStatus.Down) + if (botStatus == BotStatus.Stopped) { _logger.LogInformation("Bot {GrainId} is already stopped", this.GetPrimaryKey()); return; @@ -211,10 +211,10 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable // Sync state from the volatile TradingBotBase before destroying it SyncStateFromBase(); await _state.WriteStateAsync(); - await SaveBotAsync(BotStatus.Down); + await SaveBotAsync(BotStatus.Stopped); _tradingBot = null; - await UpdateBotRegistryStatus(BotStatus.Down); + await UpdateBotRegistryStatus(BotStatus.Stopped); _logger.LogInformation("LiveTradingBotGrain {GrainId} stopped successfully", this.GetPrimaryKey()); } catch (Exception ex) @@ -297,7 +297,7 @@ public class LiveTradingBotGrain : Grain, ILiveTradingBotGrain, IRemindable await _state.WriteStateAsync(); // Save bot statistics to database - await SaveBotAsync(BotStatus.Up); + await SaveBotAsync(BotStatus.Running); } catch (ObjectDisposedException) { diff --git a/src/Managing.Application/ManageBot/BotService.cs b/src/Managing.Application/ManageBot/BotService.cs index 81a537c..0a02e09 100644 --- a/src/Managing.Application/ManageBot/BotService.cs +++ b/src/Managing.Application/ManageBot/BotService.cs @@ -52,12 +52,12 @@ namespace Managing.Application.ManageBot { var grain = _grainFactory.GetGrain(identifier); await grain.StopAsync(); - return BotStatus.Down; + return BotStatus.Stopped; } catch (Exception e) { _tradingBotLogger.LogError(e, "Error stopping bot {Identifier}", identifier); - return BotStatus.Down; + return BotStatus.Stopped; } } @@ -97,13 +97,13 @@ namespace Managing.Application.ManageBot var previousStatus = await registryGrain.GetBotStatus(identifier); // If bot is already up, return the status directly - if (previousStatus == BotStatus.Up) + if (previousStatus == BotStatus.Running) { - return BotStatus.Up; + return BotStatus.Running; } var botGrain = _grainFactory.GetGrain(identifier); - if (previousStatus == BotStatus.None) + if (previousStatus == BotStatus.Saved) { // First time startup await botGrain.StartAsync(); @@ -134,12 +134,12 @@ namespace Managing.Application.ManageBot await _messengerService.SendTradeMessage(restartMessage, false, account.User); } - return BotStatus.Up; + return BotStatus.Running; } catch (Exception e) { _tradingBotLogger.LogError(e, "Error restarting bot {Identifier}", identifier); - return BotStatus.Down; + return BotStatus.Stopped; } } @@ -190,7 +190,7 @@ namespace Managing.Application.ManageBot public async Task> GetActiveBotsNamesAsync() { - var bots = await _botRepository.GetBotsByStatusAsync(BotStatus.Up); + var bots = await _botRepository.GetBotsByStatusAsync(BotStatus.Running); return bots.Select(b => b.Name); } diff --git a/src/Managing.Application/ManageBot/GetAgentStatusesCommandHandler.cs b/src/Managing.Application/ManageBot/GetAgentStatusesCommandHandler.cs index 1f5277a..165293d 100644 --- a/src/Managing.Application/ManageBot/GetAgentStatusesCommandHandler.cs +++ b/src/Managing.Application/ManageBot/GetAgentStatusesCommandHandler.cs @@ -24,7 +24,7 @@ namespace Managing.Application.ManageBot CancellationToken cancellationToken) { var result = new List(); - var allActiveBots = await _botService.GetBotsByStatusAsync(BotStatus.Up); + var allActiveBots = await _botService.GetBotsByStatusAsync(BotStatus.Running); // Group bots by user and determine status var agentGroups = allActiveBots @@ -38,7 +38,7 @@ namespace Managing.Application.ManageBot var bots = agentGroup.ToList(); // Determine agent status: Online if at least one strategy is running, Offline otherwise - var agentStatus = bots.Any(bot => bot.Status == BotStatus.Up) + var agentStatus = bots.Any(bot => bot.Status == BotStatus.Running) ? AgentStatus.Online : AgentStatus.Offline; diff --git a/src/Managing.Application/ManageBot/StartBotCommandHandler.cs b/src/Managing.Application/ManageBot/StartBotCommandHandler.cs index 12e660d..8d9c061 100644 --- a/src/Managing.Application/ManageBot/StartBotCommandHandler.cs +++ b/src/Managing.Application/ManageBot/StartBotCommandHandler.cs @@ -71,7 +71,7 @@ namespace Managing.Application.ManageBot throw new Exception($"Failed to start bot: {ex.Message}, {ex.StackTrace}"); } - return request.CreateOnly ? BotStatus.None : BotStatus.Up; + return request.CreateOnly ? BotStatus.Saved : BotStatus.Running; } } } \ No newline at end of file diff --git a/src/Managing.Application/ManageBot/StopAllUserBotsCommandHandler.cs b/src/Managing.Application/ManageBot/StopAllUserBotsCommandHandler.cs index 4abc478..1c0c00d 100644 --- a/src/Managing.Application/ManageBot/StopAllUserBotsCommandHandler.cs +++ b/src/Managing.Application/ManageBot/StopAllUserBotsCommandHandler.cs @@ -25,7 +25,7 @@ namespace Managing.Application.ManageBot var userBots = await _botService.GetBotsByUser(request.User.Id); // Filter only active bots (status Up) - var activeBots = userBots.Where(bot => bot.Status == BotStatus.Up).ToList(); + var activeBots = userBots.Where(bot => bot.Status == BotStatus.Running).ToList(); if (!activeBots.Any()) { diff --git a/src/Managing.Application/Workers/BalanceTrackingWorker.cs b/src/Managing.Application/Workers/BalanceTrackingWorker.cs index 8110a65..a9e3901 100644 --- a/src/Managing.Application/Workers/BalanceTrackingWorker.cs +++ b/src/Managing.Application/Workers/BalanceTrackingWorker.cs @@ -46,7 +46,7 @@ public class BalanceTrackingWorker : BaseWorker _logger.LogInformation("Starting balance tracking..."); // Get all active bots - var bots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Up)); + var bots = await _mediator.Send(new GetBotsByStatusCommand(BotStatus.Running)); var botCount = bots.Count(); if (botCount == 0) diff --git a/src/Managing.Common/Enums.cs b/src/Managing.Common/Enums.cs index 249ec09..88d8ade 100644 --- a/src/Managing.Common/Enums.cs +++ b/src/Managing.Common/Enums.cs @@ -76,9 +76,9 @@ public static class Enums public enum BotStatus { - None, - Down, - Up, + Saved, + Stopped, + Running, } public enum SignalStatus diff --git a/src/Managing.Infrastructure.Database/PostgreSql/AgentSummaryRepository.cs b/src/Managing.Infrastructure.Database/PostgreSql/AgentSummaryRepository.cs index 9fd5600..02ef88e 100644 --- a/src/Managing.Infrastructure.Database/PostgreSql/AgentSummaryRepository.cs +++ b/src/Managing.Infrastructure.Database/PostgreSql/AgentSummaryRepository.cs @@ -234,7 +234,7 @@ public class AgentSummaryRepository : IAgentSummaryRepository { var agentSummaries = await _context.AgentSummaries .Include(a => a.User) - .Where(a => _context.Bots.Any(b => b.UserId == a.UserId && b.Status == BotStatus.Up)) + .Where(a => _context.Bots.Any(b => b.UserId == a.UserId && b.Status == BotStatus.Running)) .ToListAsync(); return agentSummaries.Select(MapToDomain); diff --git a/src/Managing.WebApp/src/generated/ManagingApi.ts b/src/Managing.WebApp/src/generated/ManagingApi.ts index 06034b7..1227bc4 100644 --- a/src/Managing.WebApp/src/generated/ManagingApi.ts +++ b/src/Managing.WebApp/src/generated/ManagingApi.ts @@ -1239,6 +1239,41 @@ export class BotClient extends AuthorizedApiBase { return Promise.resolve(null as any); } + bot_StopAll(): Promise { + let url_ = this.baseUrl + "/Bot/StopAll"; + 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.processBot_StopAll(_response); + }); + } + + protected processBot_StopAll(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 boolean; + 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); + } + bot_Delete(identifier: string | undefined): Promise { let url_ = this.baseUrl + "/Bot/Delete?"; if (identifier === null) @@ -4308,9 +4343,9 @@ export interface SaveBotRequest extends StartBotRequest { } export enum BotStatus { - None = "None", - Down = "Down", - Up = "Up", + Saved = "Saved", + Stopped = "Stopped", + Running = "Running", } export interface TradingBotResponse { @@ -4523,7 +4558,7 @@ export interface StrategyPerformance { export interface UserStrategyDetailsViewModel { name?: string | null; - state?: string | null; + state?: BotStatus; pnL?: number; roiPercentage?: number; roiLast24H?: number; @@ -4533,8 +4568,8 @@ export interface UserStrategyDetailsViewModel { volumeLast24H?: number; wins?: number; losses?: number; - positions?: { [key: string]: Position; } | null; - identifier?: string | null; + positions?: Position[] | null; + identifier?: string; walletBalances?: { [key: string]: number; } | null; } diff --git a/src/Managing.WebApp/src/generated/ManagingApiTypes.ts b/src/Managing.WebApp/src/generated/ManagingApiTypes.ts index d583dbc..6c68d00 100644 --- a/src/Managing.WebApp/src/generated/ManagingApiTypes.ts +++ b/src/Managing.WebApp/src/generated/ManagingApiTypes.ts @@ -731,9 +731,9 @@ export interface SaveBotRequest extends StartBotRequest { } export enum BotStatus { - None = "None", - Down = "Down", - Up = "Up", + Saved = "Saved", + Stopped = "Stopped", + Running = "Running", } export interface TradingBotResponse { @@ -946,7 +946,7 @@ export interface StrategyPerformance { export interface UserStrategyDetailsViewModel { name?: string | null; - state?: string | null; + state?: BotStatus; pnL?: number; roiPercentage?: number; roiLast24H?: number; @@ -956,8 +956,8 @@ export interface UserStrategyDetailsViewModel { volumeLast24H?: number; wins?: number; losses?: number; - positions?: { [key: string]: Position; } | null; - identifier?: string | null; + positions?: Position[] | null; + identifier?: string; walletBalances?: { [key: string]: number; } | null; } diff --git a/src/Managing.WebApp/src/hooks/useBots.tsx b/src/Managing.WebApp/src/hooks/useBots.tsx index e1f350c..73aa34c 100644 --- a/src/Managing.WebApp/src/hooks/useBots.tsx +++ b/src/Managing.WebApp/src/hooks/useBots.tsx @@ -9,7 +9,7 @@ type UseBotsProps = { callback?: (data: TradingBotResponse[]) => void | undefined } -const useBots = ({status = BotStatus.None, callback}: UseBotsProps) => { +const useBots = ({status = BotStatus.Saved, callback}: UseBotsProps) => { const {apiUrl} = useApiUrlStore() const botClient = new BotClient({}, apiUrl) diff --git a/src/Managing.WebApp/src/pages/botsPage/botList.tsx b/src/Managing.WebApp/src/pages/botsPage/botList.tsx index 4be7118..cfc8a83 100644 --- a/src/Managing.WebApp/src/pages/botsPage/botList.tsx +++ b/src/Managing.WebApp/src/pages/botsPage/botList.tsx @@ -8,6 +8,7 @@ import TradesModal from '../../components/mollecules/TradesModal/TradesModal' import {TradeChart, UnifiedTradingModal} from '../../components/organism' import { BotClient, + BotStatus, MoneyManagement, Position, TradingBotConfig, @@ -28,9 +29,23 @@ function baseBadgeClass(isOutlined = false) { return classes } -function cardClasses(botStatus: string) { - const classes = - 'card bg-base-300 shadow-md ' + (botStatus == 'Up' ? 'shadow-success' : '') +function cardClasses(botStatus: BotStatus) { + let classes = 'card bg-base-300 shadow-md ' + + switch (botStatus) { + case BotStatus.Running: + classes += 'shadow-success' + break + case BotStatus.Saved: + classes += 'shadow-info' + break + case BotStatus.Stopped: + classes += 'shadow-warning' + break + default: + // No additional shadow for other statuses + break + } return classes } @@ -154,7 +169,6 @@ const BotList: React.FC = ({ list }) => { const isUp = status == 'Up' const t = new Toast(isUp ? 'Stoping bot' : 'Restarting bot') - console.log('toggleBotStatus', status, identifier) if (status == 'Up') { client .bot_Stop(identifier) @@ -224,7 +238,7 @@ const BotList: React.FC = ({ list }) => { key={index.toString()} className="sm:w-1 md:w-1/2 xl:w-1/2 w-full p-2" > -
+
{bot.candles && bot.candles.length > 0 ? ( { queryFn: () => { switch (activeTab) { case 0: // All Active Bots - return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Up, undefined, undefined, undefined, 'CreatedAt', 'Desc') + return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Running, undefined, undefined, undefined, 'CreatedAt', 'Desc') case 1: // My Active Bots - return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Up, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') + return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Running, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') case 2: // My Down Bots - return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Down, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') + return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Stopped, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') case 3: // Saved Bots - return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.None, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') + return botClient.bot_GetBotsPaginated(pageNumber, pageSize, BotStatus.Saved, undefined, undefined, currentUser?.agentName, 'CreatedAt', 'Desc') default: return botClient.bot_GetBotsPaginated(pageNumber, pageSize, undefined, undefined, undefined, undefined, 'CreatedAt', 'Desc') }