using CollabDAL.DTO.CollabParticipant; using CollabDAL.DTO.CollabSession; using GB5Shared.DTO.Framework.Login; namespace CollabBLL.CollabSession; public interface ICollabSessionBLL { Task CreateSessionAsync(CreateSessionSaveDTO dto, LoginDTO login, CancellationToken ct); Task GetSessionAsync(Guid sessionId, LoginDTO login, CancellationToken ct); Task GetActiveSessionsAsync(LoginDTO login, CancellationToken ct); Task GetScheduledSessionsAsync(LoginDTO login, CancellationToken ct); Task UpdateSessionStatusAsync(UpdateSessionStatusSaveDTO dto, LoginDTO login, CancellationToken ct); Task JoinSessionAsync(Guid sessionId, LoginDTO login, CancellationToken ct); Task JoinViaTokenAsync(string token, LoginDTO login, CancellationToken ct); Task GrantControlAsync(GrantControlSaveDTO dto, LoginDTO login, CancellationToken ct); Task RevokeControlAsync(Guid sessionId, LoginDTO login, CancellationToken ct); Task InviteUsersAsync(InviteUsersSaveDTO dto, LoginDTO login, CancellationToken ct); Task CreateLinkInviteAsync(CreateLinkInviteSaveDTO dto, LoginDTO login, CancellationToken ct); Task GetPendingInvitesAsync(LoginDTO login, CancellationToken ct); Task RespondToInviteAsync(Guid inviteId, bool accept, LoginDTO login, CancellationToken ct); // Hub-specific operations (called from SignalR Hub — must go through BLL per architecture rules) Task UpdateLastActivityAsync(Guid sessionId, LoginDTO login, CancellationToken ct); Task RecordHubConnectionAsync(Guid sessionId, string userId, string connectionId, LoginDTO login, CancellationToken ct); Task HandleHubDisconnectAsync(string connectionId, LoginDTO login, CancellationToken ct); Task RecordHeartbeatAsync(Guid sessionId, string userId, LoginDTO login, CancellationToken ct); Task GetControlHolderConnectionAsync(Guid sessionId, LoginDTO login, CancellationToken ct); }