diff --git a/NEW/src/JdeScoping.DataSync/Services/DataUpdateRepository.cs b/NEW/src/JdeScoping.DataSync/Services/DataUpdateRepository.cs
index 3d21263..f0aa012 100644
--- a/NEW/src/JdeScoping.DataSync/Services/DataUpdateRepository.cs
+++ b/NEW/src/JdeScoping.DataSync/Services/DataUpdateRepository.cs
@@ -256,4 +256,54 @@ FROM LastSuccessful";
return lastSync.Value < overdueThreshold;
}
+
+ ///
+ public async Task> GetRecentUpdatesAsync(
+ string tableName,
+ UpdateTypes? updateType = null,
+ int count = 30,
+ CancellationToken cancellationToken = default)
+ {
+ var sql = updateType.HasValue
+ ? @"SELECT TOP (@count) du.Id, du.SourceSystem, du.SourceData, du.TableName,
+ du.StartDt, du.EndDt, du.UpdateType, du.WasSuccessful, du.NumberRecords
+ FROM dbo.DataUpdate du
+ WHERE du.TableName = @tableName AND du.UpdateType = @updateType
+ ORDER BY du.StartDt DESC"
+ : @"SELECT TOP (@count) du.Id, du.SourceSystem, du.SourceData, du.TableName,
+ du.StartDt, du.EndDt, du.UpdateType, du.WasSuccessful, du.NumberRecords
+ FROM dbo.DataUpdate du
+ WHERE du.TableName = @tableName
+ ORDER BY du.StartDt DESC";
+
+ await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(cancellationToken);
+ var results = await connection.QueryAsync(
+ sql,
+ new { tableName, updateType = updateType.HasValue ? (int)updateType.Value : 0, count },
+ commandTimeout: 30);
+
+ return results.ToList();
+ }
+
+ ///
+ public async Task> GetLastRunsAsync(
+ string tableName,
+ CancellationToken cancellationToken = default)
+ {
+ const string sql = @"
+WITH LastRuns AS (
+ SELECT du.*,
+ ROW_NUMBER() OVER (PARTITION BY du.UpdateType ORDER BY du.StartDt DESC) AS RN
+ FROM dbo.DataUpdate du
+ WHERE du.TableName = @tableName
+)
+SELECT Id, SourceSystem, SourceData, TableName, StartDt, EndDt, UpdateType, WasSuccessful, NumberRecords
+FROM LastRuns
+WHERE RN = 1";
+
+ await using var connection = await _connectionFactory.CreateLotFinderConnectionAsync(cancellationToken);
+ var results = await connection.QueryAsync(sql, new { tableName }, commandTimeout: 30);
+
+ return results.ToDictionary(du => du.UpdateType, du => du);
+ }
}