| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- using Application.Abstractions.Crypto;
- using Application.Abstractions.Data;
- using Domain.Entities.Common;
- using Microsoft.EntityFrameworkCore;
- namespace Infrastructure.StockData;
- /// <summary>
- /// <see cref="ICollectorSettingsProvider"/> 구현 — DB Config(DataCollection) 를 1회 로드해 캐시하고
- /// 플래그/키를 해석한다. 키는 EncryptedConfigValue 로 복호화(레거시 평문은 통과). Scoped 등록.
- /// </summary>
- internal sealed class CollectorSettingsProvider(IAppDbContext db, IFieldEncryptor encryptor) : ICollectorSettingsProvider
- {
- private DataCollectionConfig? _loaded;
- private bool _hasConfig;
- private async Task EnsureLoadedAsync(CancellationToken ct)
- {
- if (_loaded is not null)
- {
- return;
- }
- var config = await db.Config.AsNoTracking().OrderByDescending(c => c.ID).FirstOrDefaultAsync(ct);
- _hasConfig = config is not null;
- _loaded = config?.DataCollection ?? new DataCollectionConfig();
- }
- public async Task<bool> IsEnabledAsync(CollectorFlag flag, CancellationToken ct)
- {
- await EnsureLoadedAsync(ct);
- if (!_hasConfig)
- {
- return false;
- }
- var c = _loaded!;
- return flag switch
- {
- CollectorFlag.StockDataMaster => c.StockDataMasterSync,
- CollectorFlag.StockDataDailyPrice => c.StockDataDailyPriceSync,
- CollectorFlag.KrxIndex => c.KrxIndexSync,
- CollectorFlag.KrxBondIndex => c.KrxBondIndexSync,
- CollectorFlag.KrxStock => c.KrxStockSync,
- CollectorFlag.KrxEtp => c.KrxEtpSync,
- CollectorFlag.KrxWarrant => c.KrxWarrantSync,
- CollectorFlag.KrxBond => c.KrxBondSync,
- CollectorFlag.KrxDerivative => c.KrxDerivativeSync,
- CollectorFlag.KrxCommodity => c.KrxCommoditySync,
- CollectorFlag.KrxEsg => c.KrxEsgSync,
- CollectorFlag.OpenDartDisclosure => c.OpenDartDisclosureSync,
- CollectorFlag.KoreaEximMacro => c.KoreaEximMacroSync,
- CollectorFlag.Kosis => c.KosisSync,
- CollectorFlag.WorldIndex => c.WorldIndexEnabled,
- CollectorFlag.MarketQuote => c.MarketQuoteEnabled,
- CollectorFlag.SeibroIssuer => c.SeibroIssuerSync,
- CollectorFlag.SeibroDividend => c.SeibroDividendSync,
- CollectorFlag.SeibroSupply => c.SeibroSupplySync,
- CollectorFlag.SeibroCorpAction => c.SeibroCorpActionSync,
- CollectorFlag.SeibroBond => c.SeibroBondSync,
- CollectorFlag.SeibroDeriv => c.SeibroDerivSync,
- CollectorFlag.SeibroForeign => c.SeibroForeignSync,
- _ => false
- };
- }
- public async Task<string?> GetKeyAsync(CollectorKey key, CancellationToken ct)
- {
- await EnsureLoadedAsync(ct);
- var c = _loaded!;
- var enc = key switch
- {
- CollectorKey.DataGoKr => c.DataGoKrServiceKeyEnc,
- CollectorKey.Krx => c.KrxApiKeyEnc,
- CollectorKey.OpenDart => c.OpenDartApiKeyEnc,
- CollectorKey.KoreaEximExchange => c.KoreaEximExchangeKeyEnc,
- CollectorKey.KoreaEximLoanRate => c.KoreaEximLoanRateKeyEnc,
- CollectorKey.KoreaEximIntlRate => c.KoreaEximIntlRateKeyEnc,
- CollectorKey.Seibro => c.SeibroApiKeyEnc,
- CollectorKey.Kosis => c.KosisApiKeyEnc,
- _ => null
- };
- return string.IsNullOrWhiteSpace(enc) ? null : EncryptedConfigValue.Unprotect(encryptor, enc);
- }
- }
|