88 lines
2.4 KiB
TypeScript
88 lines
2.4 KiB
TypeScript
/**
|
|
* ui_preferences.virtual.targets 가 비었을 때 서버·레거시에서 투자대상 복구
|
|
*/
|
|
import { hasRegisteredUser, loadActiveLiveStrategySettings, loadWatchlist } from './backendApi';
|
|
import {
|
|
loadVirtualSession,
|
|
loadVirtualTargets,
|
|
type VirtualTargetItem,
|
|
} from './virtualTradingStorage';
|
|
import { resolveVirtualTargetNames } from './virtualTargetNames';
|
|
|
|
function readLegacyTargets(): VirtualTargetItem[] {
|
|
try {
|
|
const raw = localStorage.getItem('gc_virtual_targets_v1');
|
|
if (!raw) return [];
|
|
const parsed = JSON.parse(raw) as VirtualTargetItem[];
|
|
return Array.isArray(parsed) ? parsed : [];
|
|
} catch {
|
|
return [];
|
|
}
|
|
}
|
|
|
|
function fromLiveSettings(
|
|
list: Awaited<ReturnType<typeof loadActiveLiveStrategySettings>>,
|
|
globalStrategyId: number | null,
|
|
): VirtualTargetItem[] {
|
|
return list.map(s => {
|
|
const { koreanName, englishName } = resolveVirtualTargetNames(s.market);
|
|
return {
|
|
market: s.market,
|
|
strategyId: s.strategyId ?? globalStrategyId,
|
|
koreanName,
|
|
englishName,
|
|
pinned: !!s.isPinned,
|
|
};
|
|
});
|
|
}
|
|
|
|
function fromWatchlist(
|
|
list: Awaited<ReturnType<typeof loadWatchlist>>,
|
|
globalStrategyId: number | null,
|
|
): VirtualTargetItem[] {
|
|
return list.map(w => {
|
|
const market = w.symbol;
|
|
const { koreanName, englishName } = resolveVirtualTargetNames(
|
|
market,
|
|
w.koreanName,
|
|
w.englishName,
|
|
);
|
|
return {
|
|
market,
|
|
strategyId: globalStrategyId,
|
|
koreanName,
|
|
englishName,
|
|
};
|
|
});
|
|
}
|
|
|
|
/** DB·로컬 비어 있을 때 서버 실시간 설정·관심종목에서 목록 구성 */
|
|
export async function hydrateVirtualTargetsIfEmpty(): Promise<VirtualTargetItem[]> {
|
|
const existing = loadVirtualTargets();
|
|
if (existing.length > 0) return existing;
|
|
|
|
const legacy = readLegacyTargets();
|
|
if (legacy.length > 0) return legacy;
|
|
|
|
const session = loadVirtualSession();
|
|
const globalId = session.globalStrategyId;
|
|
|
|
if (!hasRegisteredUser()) return [];
|
|
|
|
try {
|
|
const active = await loadActiveLiveStrategySettings();
|
|
if (active.length > 0) return fromLiveSettings(active, globalId);
|
|
} catch (e) {
|
|
console.warn('[virtualTargets] active live settings load failed', e);
|
|
}
|
|
|
|
try {
|
|
const watchlist = await loadWatchlist();
|
|
if (watchlist.length > 0) return fromWatchlist(watchlist, globalId);
|
|
} catch (e) {
|
|
console.warn('[virtualTargets] watchlist load failed', e);
|
|
}
|
|
|
|
return [];
|
|
}
|