refactor(dotnet): split collection read and write contracts
Validators (Pushes and Pull Requests) / validate-ui-and-storage (push) Successful in 17s
Validators (Pushes and Pull Requests) / validate-core (push) Has been cancelled

This commit is contained in:
2026-07-13 01:00:36 +09:00
parent e99c15e6a5
commit e0d278e6eb
6 changed files with 72 additions and 39 deletions
@@ -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
}
}
}