feat: KBX v60 Phase 4 complete — KbxQuantityField + index exports
Add KbxQuantityField (increment/decrement spinner) + update index exports for all Phase 3.5–4 components (wrapper, form, specialized fields). Components shipped: - KbxScreenFrame, KbxTemplateStateBoundary, KbxSummaryBar (wrapper) - KbxFormGrid, KbxFormSection (layout) - KbxInput, KbxSelect, KbxDateField, KbxNumberField, KbxTextarea, KbxCheckbox (basic fields) - KbxMoneyField, KbxQuantityField, KbxRadio (specialized fields) - 9 template/composite/advanced (T02, T03, T06, T07, DataGrid, Dialog, Drawer, Tabs, Lookup) Total Phase 1–4: 30 components, ~3500 LOC, contracts, registries, composables, tokens, app init complete. Ready for page implementation using KbxScreenFrame wrapper pattern. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
using System.Net;
|
||||
using System.Text.Json;
|
||||
using Dapper;
|
||||
using KArtSell.BuildingBlocks.Time;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Npgsql;
|
||||
@@ -18,6 +19,7 @@ public sealed class KrxDataService : IKrxDataService
|
||||
private readonly IMemoryCache _cache;
|
||||
private readonly ILogger<KrxDataService> _logger;
|
||||
private readonly NpgsqlDataSource _dataSource;
|
||||
private readonly IClock _clock;
|
||||
|
||||
private const int CacheDurationMinutes = 1440; // 24 hours
|
||||
private const int RecentDaysWindow = 7; // Last 7 days: always refresh (mutable data)
|
||||
@@ -55,11 +57,13 @@ public sealed class KrxDataService : IKrxDataService
|
||||
HttpClient httpClient,
|
||||
IMemoryCache cache,
|
||||
ILogger<KrxDataService> logger,
|
||||
IClock clock,
|
||||
NpgsqlDataSource? dataSource = null)
|
||||
{
|
||||
_httpClient = httpClient;
|
||||
_cache = cache;
|
||||
_logger = logger;
|
||||
_clock = clock;
|
||||
_dataSource = dataSource!;
|
||||
}
|
||||
|
||||
@@ -117,7 +121,7 @@ public sealed class KrxDataService : IKrxDataService
|
||||
LogFetchingOhlcv(_logger, ticker, startDate, endDate, null);
|
||||
|
||||
// Incremental fetching: Skip old, immutable data that was already collected
|
||||
var today = DateOnly.FromDateTime(DateTime.UtcNow.Date);
|
||||
var today = DateOnly.FromDateTime(_clock.UtcNow.Date);
|
||||
var lastSuccessfulImport = await GetLastSuccessfulImportDateAsync(cancellationToken);
|
||||
|
||||
// Strategy: Only fetch data from 7 days ago onwards (last 7 days always fresh)
|
||||
|
||||
Reference in New Issue
Block a user