using Dapper; using Npgsql; namespace Kbx.Shared.Runtime; public sealed class KbxOperationRunRepository(NpgsqlDataSource dataSource) { public async Task> GetRecentAsync(Guid tenantId, Guid userId, int limit, CancellationToken ct) { const string sql = """ select id, operation_type as Type, title, source_screen_id as SourceScreenId, status, requested_at as RequestedAt, started_at as StartedAt, completed_at as CompletedAt, processed, total, succeeded, failed, correlation_id as CorrelationId, result_message as ResultMessage from kbx.operation_runs where tenant_id=@tenantId and user_id=@userId order by requested_at desc limit @limit; """; await using var connection = await dataSource.OpenConnectionAsync(ct); var rows = await connection.QueryAsync(new CommandDefinition(sql, new { tenantId, userId, limit = Math.Clamp(limit, 1, 50) }, cancellationToken: ct)); return rows.AsList(); } }