using System.Threading.Tasks; using FinlyticCore.Dtos.Bot; using FinlyticCore.Dtos.Trading; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.SignalR; namespace FinlyticBackend.Hubs; public interface ITradeStreamClient { Task ReceiveTradeProposal(TradeProposalDto proposal); Task ReceiveTradeUpdate(ActiveTradeDto trade); Task ReceiveBotPositionUpdate(BotTradeOrderDto botOrder); Task ReceivePortfolioSummary(AccountSummaryDto summary); } [Authorize] public class TradeStreamHub : Hub { public async Task JoinAssetGroup(string isin) { if (!string.IsNullOrWhiteSpace(isin)) { await Groups.AddToGroupAsync(Context.ConnectionId, isin.Trim().ToUpperInvariant()); } } public async Task LeaveAssetGroup(string isin) { if (!string.IsNullOrWhiteSpace(isin)) { await Groups.RemoveFromGroupAsync(Context.ConnectionId, isin.Trim().ToUpperInvariant()); } } }