feat(datasync): implement GetRecentUpdatesAsync and GetLastRunsAsync
- GetRecentUpdatesAsync: Returns last N DataUpdate records for a table, optionally filtered by UpdateType, ordered by StartDt descending - GetLastRunsAsync: Returns the most recent run (successful or not) for each UpdateType for a given table using a CTE with ROW_NUMBER
This commit is contained in:
@@ -256,4 +256,54 @@ FROM LastSuccessful";
|
||||
|
||||
return lastSync.Value < overdueThreshold;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<List<DataUpdate>> 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<DataUpdate>(
|
||||
sql,
|
||||
new { tableName, updateType = updateType.HasValue ? (int)updateType.Value : 0, count },
|
||||
commandTimeout: 30);
|
||||
|
||||
return results.ToList();
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public async Task<Dictionary<UpdateTypes, DataUpdate>> 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<DataUpdate>(sql, new { tableName }, commandTimeout: 30);
|
||||
|
||||
return results.ToDictionary(du => du.UpdateType, du => du);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user