using FrameworkDAL.DTO.DiagnosticsSession; using FrameworkDAL.Query.DiagnosticsSession; using GB5Shared.DTO.Framework.Login; using GB5Shared.QueryExecutor; namespace FrameworkDAL.CustomCode.DiagnosticsSession; public class DiagnosticsSessionDAL : IDiagnosticsSessionDAL { private readonly IQueryExecutor _qe; public DiagnosticsSessionDAL(IQueryExecutor qe) => _qe = qe; public async Task> GetActiveSessionsAsync( LoginDTO login, CancellationToken ct) { var result = await _qe.QueryAsync( login, DiagnosticsSessionQB.GET_ACTIVE_SESSIONS, new { TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); return result?.ToList() ?? []; } public async Task GetSessionAsync( int sessionId, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, DiagnosticsSessionQB.GET_SESSION, new { DiagnosticSessionId = sessionId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveSessionAsync( DiagnosticsSessionDTO dto, LoginDTO login, CancellationToken ct) { var sql = login.DatabaseType == 1 ? DiagnosticsSessionQB.SAVE_SESSION : DiagnosticsSessionQB.SAVE_SESSION_POSTGRESQL; return await _qe.ExecuteScalarAsync( login, sql, new { dto.SessionScope, dto.ScopeId, dto.DiagnosticLevel, dto.CaptureQueryBodies, dto.CaptureResponseBodies, dto.IncreaseSampling, dto.ExpiresAt, CreatedById = login.UserId, TenantId = login.ClientId, }, cancellationToken: ct).ConfigureAwait(false); } public async Task CloseSessionAsync(int sessionId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, DiagnosticsSessionQB.CLOSE_SESSION, new { DiagnosticSessionId = sessionId, ClosedById = login.UserId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); public async Task GetTokenAsync( string token, LoginDTO login, CancellationToken ct) => await _qe.QuerySingleAsync( login, DiagnosticsSessionQB.GET_TOKEN, new { Token = token }, cancellationToken: ct).ConfigureAwait(false); public async Task SaveTokenAsync( SupportTokenDTO dto, LoginDTO login, CancellationToken ct) => await _qe.ExecuteScalarAsync( login, DiagnosticsSessionQB.SAVE_TOKEN, new { dto.Token, dto.DiagnosticSessionId, dto.IssuedTo, dto.Capabilities, dto.ExpiresAt, CreatedById = login.UserId, TenantId = login.ClientId, }, cancellationToken: ct).ConfigureAwait(false); public async Task MarkTokenUsedAsync( string token, string clientIp, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, DiagnosticsSessionQB.MARK_TOKEN_USED, new { Token = token, UsedByIp = clientIp }, cancellationToken: ct).ConfigureAwait(false); public async Task RevokeTokenAsync(int tokenId, LoginDTO login, CancellationToken ct) => await _qe.ExecuteAsync( login, DiagnosticsSessionQB.REVOKE_TOKEN, new { SupportTokenId = tokenId, TenantId = login.ClientId }, cancellationToken: ct).ConfigureAwait(false); }