refactor(dotnet): split collection read and write contracts
This commit is contained in:
@@ -13,7 +13,8 @@ namespace QuantEngine.Application.Services;
|
||||
public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
{
|
||||
private readonly IKisApiClient _kisApiClient;
|
||||
private readonly ICollectionRepository _repository;
|
||||
private readonly ICollectionWriteRepository _writeRepository;
|
||||
private readonly ICollectionReadRepository _readRepository;
|
||||
private readonly PriceDataNormalizer _normalizer;
|
||||
private readonly SourcePriorityResolver _priorityResolver;
|
||||
private readonly ILogger<KisDataCollectionOrchestrator> _logger;
|
||||
@@ -21,14 +22,16 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
|
||||
public KisDataCollectionOrchestrator(
|
||||
IKisApiClient kisApiClient,
|
||||
ICollectionRepository repository,
|
||||
ICollectionWriteRepository repository,
|
||||
ICollectionReadRepository readRepository,
|
||||
PriceDataNormalizer normalizer,
|
||||
SourcePriorityResolver priorityResolver,
|
||||
ILogger<KisDataCollectionOrchestrator> logger,
|
||||
IRuntimeAuditTrailService auditTrail)
|
||||
{
|
||||
_kisApiClient = kisApiClient;
|
||||
_repository = repository;
|
||||
_writeRepository = repository;
|
||||
_readRepository = readRepository;
|
||||
_normalizer = normalizer;
|
||||
_priorityResolver = priorityResolver;
|
||||
_logger = logger;
|
||||
@@ -66,7 +69,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
CollectionSnapshotRecord? cachedSnapshot = null;
|
||||
if (IsMarketClosed())
|
||||
{
|
||||
var latest = await _repository.GetLatestSnapshotsForTickerAsync(ticker, 1);
|
||||
var latest = await _readRepository.GetLatestSnapshotsForTickerAsync(ticker, 1);
|
||||
var todayPrefix = DateTime.UtcNow.AddHours(9).ToString("yyyy-MM-dd");
|
||||
if (latest.Count > 0 && latest[0].CapturedAt.StartsWith(todayPrefix))
|
||||
{
|
||||
@@ -96,7 +99,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
}
|
||||
|
||||
// Save to DB
|
||||
await _repository.SaveSnapshotAsync(new CollectionSnapshotRecord(
|
||||
await _writeRepository.SaveSnapshotAsync(new CollectionSnapshotRecord(
|
||||
RunId: runId,
|
||||
DatasetName: "data_feed",
|
||||
Ticker: ticker,
|
||||
@@ -119,7 +122,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
_logger.LogWarning("Skipped invalid OHLCV bar for {Ticker}: constraints not satisfied", ticker);
|
||||
continue;
|
||||
}
|
||||
await _repository.SavePriceHistoryDailyAsync(priceRecord);
|
||||
await _writeRepository.SavePriceHistoryDailyAsync(priceRecord);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -147,7 +150,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
{ "error_kind", ex.GetType().Name }
|
||||
});
|
||||
|
||||
await _repository.SaveErrorAsync(new CollectionErrorRecord(
|
||||
await _writeRepository.SaveErrorAsync(new CollectionErrorRecord(
|
||||
RunId: runId,
|
||||
SourceName: "kis_collector",
|
||||
ErrorKind: ex.GetType().Name,
|
||||
@@ -166,7 +169,7 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
_auditTrail.Append("collection_audit", runId, new CollectionExecutionAudit(runId, result.Status, DateTimeOffset.Parse(startedAt), DateTimeOffset.Parse(finishedAt), result.SuccessCount, result.ErrorCount, "finished"));
|
||||
|
||||
// Save run record
|
||||
await _repository.SaveRunAsync(new CollectionRunRecord(
|
||||
await _writeRepository.SaveRunAsync(new CollectionRunRecord(
|
||||
RunId: runId,
|
||||
Status: result.Status,
|
||||
StartedAt: startedAt,
|
||||
@@ -364,4 +367,3 @@ public class KisDataCollectionOrchestrator : ICollectionOrchestrator
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user