using CollabDAL.DTO.CollabSession; using CollabDAL.Query.CollabSession; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace CollabDAL.CustomCode.CollabSession; public class CollabSessionDAL(IQueryExecutor _qe) : ICollabSessionDAL { public async Task GetSessionByIdAsync( Guid sessionId, LoginDTO login, CancellationToken ct) { return await _qe.QuerySingleAsync( login, CollabSessionQB.GET_SESSION_BY_ID, new { SessionId = sessionId, login.DatabaseName }).ConfigureAwait(false); } public async Task GetSessionByCodeAsync( string code, LoginDTO login, CancellationToken ct) { return await _qe.QuerySingleAsync( login, CollabSessionQB.GET_SESSION_BY_CODE, new { SessionCode = code, login.DatabaseName }).ConfigureAwait(false); } public async Task> GetActiveSessionsAsync( LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, CollabSessionQB.GET_ACTIVE_SESSIONS, new { login.DatabaseName }).ConfigureAwait(false); return result.ToList(); } public async Task> GetScheduledSessionsAsync( LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, CollabSessionQB.GET_SCHEDULED_SESSIONS, new { login.DatabaseName }).ConfigureAwait(false); return result.ToList(); } public async Task> GetAllAbandonedCandidatesAsync( int timeoutMinutes, LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, CollabSessionQB.GET_ALL_ABANDONED_CANDIDATES, new { TimeoutMinutes = timeoutMinutes }).ConfigureAwait(false); return result.ToList(); } public async Task CreateSessionAsync( CreateSessionSaveDTO dto, string sessionCode, LoginDTO login, CancellationToken ct) { return await _qe.ExecuteScalarAsync( login, CollabSessionQB.CREATE_SESSION, new { SessionCode = sessionCode, dto.Title, dto.SessionType, dto.Mode, dto.ContextModuleCode, dto.ContextRecordId, dto.ContextRecordLabel, dto.ContextRouteUrl, dto.ScheduledAt, dto.ScheduledDurationMinutes, MaxParticipants = dto.MaxParticipants ?? 10, CreatedBy = login.UserCode, login.DatabaseName, }).ConfigureAwait(false); } public async Task UpdateSessionStatusAsync( UpdateSessionStatusSaveDTO dto, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollabSessionQB.UPDATE_SESSION_STATUS, new { dto.SessionId, dto.NewStatus, login.DatabaseName }).ConfigureAwait(false); } public async Task UpdateSessionContextAsync( Guid sessionId, string? routeUrl, string? recordId, string? recordLabel, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollabSessionQB.UPDATE_SESSION_CONTEXT, new { SessionId = sessionId, ContextRouteUrl = routeUrl, ContextRecordId = recordId, ContextRecordLabel = recordLabel, login.DatabaseName, }).ConfigureAwait(false); } public async Task UpdateLastActivityAsync( Guid sessionId, LoginDTO login, CancellationToken ct) { await _qe.ExecuteAsync( login, CollabSessionQB.UPDATE_LAST_ACTIVITY, new { SessionId = sessionId, login.DatabaseName }).ConfigureAwait(false); } }