c41e5063b7
Removed entire kbx-foundation-v36 directory as it's been replaced by the new KBX Foundation v4 patterns implemented in this session: - Registry-driven screen definitions - Density-aware UI adapter components - Feature module templates (ShadowRun, Models) Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
25 lines
1.1 KiB
C#
25 lines
1.1 KiB
C#
using Dapper;
|
|
using Npgsql;
|
|
|
|
namespace Kbx.Shared.Runtime;
|
|
|
|
public sealed class KbxOperationRunRepository(NpgsqlDataSource dataSource)
|
|
{
|
|
public async Task<IReadOnlyList<KbxOperationRunDto>> 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<KbxOperationRunDto>(new CommandDefinition(sql, new { tenantId, userId, limit = Math.Clamp(limit, 1, 50) }, cancellationToken: ct));
|
|
return rows.AsList();
|
|
}
|
|
}
|