From ca3b394ec250288a9bbc60776750b8a1d61eaeb0 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Mon, 13 Jul 2026 01:09:57 +0900 Subject: [PATCH] refactor(dotnet): remove aggregate collection repository contract --- .../Services/JsonSeedIngestionService.cs | 4 +- .../KisDataCollectionOrchestratorTests.cs | 5 +- .../Interfaces/ICollectionRepository.cs | 66 ------------------- .../Repositories/CollectionRepository.cs | 2 +- .../Pages/Admin/Collection/Detail.cshtml.cs | 5 +- .../Pages/Admin/Collection/Errors.cshtml.cs | 5 +- .../Admin/Collection/Snapshots.cshtml.cs | 5 +- .../Pages/Admin/Monitoring/Index.cshtml.cs | 5 +- src/dotnet/QuantEngine.Web/Program.cs | 3 +- 9 files changed, 18 insertions(+), 82 deletions(-) delete mode 100644 src/dotnet/QuantEngine.Core/Interfaces/ICollectionRepository.cs diff --git a/src/dotnet/QuantEngine.Application/Services/JsonSeedIngestionService.cs b/src/dotnet/QuantEngine.Application/Services/JsonSeedIngestionService.cs index bdd2a352..dd52d259 100644 --- a/src/dotnet/QuantEngine.Application/Services/JsonSeedIngestionService.cs +++ b/src/dotnet/QuantEngine.Application/Services/JsonSeedIngestionService.cs @@ -12,12 +12,12 @@ namespace QuantEngine.Application.Services; public sealed class JsonSeedIngestionService { private readonly GatherTradingDataParser _parser; - private readonly ICollectionRepository _repository; + private readonly ICollectionWriteRepository _repository; private readonly ILogger _logger; public JsonSeedIngestionService( GatherTradingDataParser parser, - ICollectionRepository repository, + ICollectionWriteRepository repository, ILogger logger) { _parser = parser; diff --git a/src/dotnet/QuantEngine.Core.Tests/KisDataCollectionOrchestratorTests.cs b/src/dotnet/QuantEngine.Core.Tests/KisDataCollectionOrchestratorTests.cs index 622a175c..de6de8cb 100644 --- a/src/dotnet/QuantEngine.Core.Tests/KisDataCollectionOrchestratorTests.cs +++ b/src/dotnet/QuantEngine.Core.Tests/KisDataCollectionOrchestratorTests.cs @@ -24,9 +24,8 @@ public class KisDataCollectionOrchestratorTests public KisDataCollectionOrchestratorTests() { _kisApiClientMock = new Mock(); - var repositoryMock = new Mock(); - _writeRepositoryMock = repositoryMock.As(); - _readRepositoryMock = repositoryMock.As(); + _writeRepositoryMock = new Mock(); + _readRepositoryMock = new Mock(); _loggerMock = new Mock>(); _auditTrailMock = new Mock(); _priorityResolver = new SourcePriorityResolver(); diff --git a/src/dotnet/QuantEngine.Core/Interfaces/ICollectionRepository.cs b/src/dotnet/QuantEngine.Core/Interfaces/ICollectionRepository.cs deleted file mode 100644 index d7652d48..00000000 --- a/src/dotnet/QuantEngine.Core/Interfaces/ICollectionRepository.cs +++ /dev/null @@ -1,66 +0,0 @@ -namespace QuantEngine.Core.Interfaces; - -/// -/// Data collection repository (Dapper + PostgreSQL). -/// Higher-level abstraction over IDataCollectionStore for Web API consumers. -/// -public interface ICollectionRepository -{ - /// - /// Save new collection run. - /// - Task SaveRunAsync(CollectionRunRecord run); - - /// - /// Update run with completion status. - /// - Task UpdateRunStatusAsync(string runId, string status, string? finishedAt = null, int? totalSnapshots = null, int? totalErrors = null); - - /// - /// Save collection snapshot. - /// - Task SaveSnapshotAsync(CollectionSnapshotRecord snapshot); - - /// - /// Save collection error. - /// - Task SaveErrorAsync(CollectionErrorRecord error); - - /// - /// Fetch recent collection runs for UI dashboard. - /// - /// Number of runs to return (default: 20) - Task> GetRecentRunsAsync(int limit = 20); - - /// - /// Fetch snapshots for a specific run. - /// - Task> GetRunSnapshotsAsync(string runId); - - /// - /// Fetch errors for a specific run. - /// - /// Run ID - /// Max errors to return (default: 50) - Task> GetRunErrorsAsync(string runId, int limit = 50); - - /// - /// Get collection pipeline dashboard state for Web UI. - /// - Task GetDashboardStateAsync(); - - /// - /// Fetch latest snapshots for a ticker across all datasets. - /// - Task> GetLatestSnapshotsForTickerAsync(string ticker, int limit = 10); - - /// - /// Save daily price history bar (OHLCV). Idempotent via ON CONFLICT DO NOTHING. - /// - Task SavePriceHistoryDailyAsync(PriceHistoryDailyRecord record); - - /// - /// Get price history summary per ticker (row count, first/last dates). - /// - Task> GetPriceHistorySummaryAsync(); -} diff --git a/src/dotnet/QuantEngine.Infrastructure/Repositories/CollectionRepository.cs b/src/dotnet/QuantEngine.Infrastructure/Repositories/CollectionRepository.cs index 84746b42..c1c8237d 100644 --- a/src/dotnet/QuantEngine.Infrastructure/Repositories/CollectionRepository.cs +++ b/src/dotnet/QuantEngine.Infrastructure/Repositories/CollectionRepository.cs @@ -8,7 +8,7 @@ using QuantEngine.Infrastructure.Data; namespace QuantEngine.Infrastructure.Repositories { - public class CollectionRepository : ICollectionRepository, ICollectionReadRepository, ICollectionWriteRepository + public class CollectionRepository : ICollectionReadRepository, ICollectionWriteRepository { private readonly IDbConnectionFactory _connectionFactory; diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Detail.cshtml.cs b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Detail.cshtml.cs index e508d168..ded1c321 100644 --- a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Detail.cshtml.cs +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Detail.cshtml.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.RazorPages; using QuantEngine.Core.Interfaces; +using QuantEngine.Application.Interfaces; using QuantEngine.Web.Services; namespace QuantEngine.Web.Pages.Admin.Collection; @@ -9,12 +10,12 @@ namespace QuantEngine.Web.Pages.Admin.Collection; [Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)] public class DetailModel : PageModel { - private readonly ICollectionRepository _collectionRepository; + private readonly ICollectionReadRepository _collectionRepository; private readonly ILogger _logger; public CollectionRunRecord? Run { get; set; } - public DetailModel(ICollectionRepository collectionRepository, ILogger logger) + public DetailModel(ICollectionReadRepository collectionRepository, ILogger logger) { _collectionRepository = collectionRepository; _logger = logger; diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Errors.cshtml.cs b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Errors.cshtml.cs index 9481cc75..3e219603 100644 --- a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Errors.cshtml.cs +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Errors.cshtml.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.RazorPages; using QuantEngine.Core.Interfaces; +using QuantEngine.Application.Interfaces; using QuantEngine.Web.Services; namespace QuantEngine.Web.Pages.Admin.Collection; @@ -8,13 +9,13 @@ namespace QuantEngine.Web.Pages.Admin.Collection; [Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)] public class ErrorsModel : PageModel { - private readonly ICollectionRepository _collectionRepository; + private readonly ICollectionReadRepository _collectionRepository; private readonly ILogger _logger; public string? RunId { get; set; } public List? Errors { get; set; } - public ErrorsModel(ICollectionRepository collectionRepository, ILogger logger) + public ErrorsModel(ICollectionReadRepository collectionRepository, ILogger logger) { _collectionRepository = collectionRepository; _logger = logger; diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Snapshots.cshtml.cs b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Snapshots.cshtml.cs index 76bdf5be..601a0711 100644 --- a/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Snapshots.cshtml.cs +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Collection/Snapshots.cshtml.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.RazorPages; using QuantEngine.Core.Interfaces; +using QuantEngine.Application.Interfaces; using QuantEngine.Web.Services; namespace QuantEngine.Web.Pages.Admin.Collection; @@ -8,13 +9,13 @@ namespace QuantEngine.Web.Pages.Admin.Collection; [Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)] public class SnapshotsModel : PageModel { - private readonly ICollectionRepository _collectionRepository; + private readonly ICollectionReadRepository _collectionRepository; private readonly ILogger _logger; public string? RunId { get; set; } public List? Snapshots { get; set; } - public SnapshotsModel(ICollectionRepository collectionRepository, ILogger logger) + public SnapshotsModel(ICollectionReadRepository collectionRepository, ILogger logger) { _collectionRepository = collectionRepository; _logger = logger; diff --git a/src/dotnet/QuantEngine.Web/Pages/Admin/Monitoring/Index.cshtml.cs b/src/dotnet/QuantEngine.Web/Pages/Admin/Monitoring/Index.cshtml.cs index 90ac41d4..b74bb583 100644 --- a/src/dotnet/QuantEngine.Web/Pages/Admin/Monitoring/Index.cshtml.cs +++ b/src/dotnet/QuantEngine.Web/Pages/Admin/Monitoring/Index.cshtml.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc.RazorPages; using QuantEngine.Core.Interfaces; +using QuantEngine.Application.Interfaces; using QuantEngine.Web.Services; namespace QuantEngine.Web.Pages.Admin.Monitoring; @@ -8,7 +9,7 @@ namespace QuantEngine.Web.Pages.Admin.Monitoring; [Authorize(AuthenticationSchemes = AdminAuthDefaults.Scheme)] public class IndexModel : PageModel { - private readonly ICollectionRepository _collectionRepository; + private readonly ICollectionReadRepository _collectionRepository; private readonly ILogger _logger; public List? OngoingRuns { get; set; } @@ -19,7 +20,7 @@ public class IndexModel : PageModel public List? RecentErrors { get; set; } public bool IsDatabaseConnected { get; set; } - public IndexModel(ICollectionRepository collectionRepository, ILogger logger) + public IndexModel(ICollectionReadRepository collectionRepository, ILogger logger) { _collectionRepository = collectionRepository; _logger = logger; diff --git a/src/dotnet/QuantEngine.Web/Program.cs b/src/dotnet/QuantEngine.Web/Program.cs index 3ab7b6a1..02130ba2 100644 --- a/src/dotnet/QuantEngine.Web/Program.cs +++ b/src/dotnet/QuantEngine.Web/Program.cs @@ -108,7 +108,6 @@ try builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); - builder.Services.AddScoped(sp => sp.GetRequiredService()); builder.Services.AddScoped(sp => sp.GetRequiredService()); builder.Services.AddScoped(sp => sp.GetRequiredService()); builder.Services.AddSingleton(); @@ -151,7 +150,7 @@ try { var migrator = scope.ServiceProvider.GetRequiredService(); var workspaceRepo = scope.ServiceProvider.GetRequiredService(); - var collectionRepo = scope.ServiceProvider.GetRequiredService(); + var collectionRepo = scope.ServiceProvider.GetRequiredService(); var collectionSchemaInitializer = scope.ServiceProvider.GetRequiredService(); var tokenCache = scope.ServiceProvider.GetRequiredService();