Files
goldenChart/frontend/src/utils/strategyNameResolver.ts
T
Macbook 44c46eee1b 배포
2026-06-11 18:00:54 +09:00

40 lines
1.2 KiB
TypeScript

/**
* 전략 ID → 이름 해석 (목록에 없거나 삭제된 전략 포함)
*/
import { loadStrategyForNotification, type StrategyDto } from './backendApi';
import { isStrategyMissingOnServer } from './strategyMissingCache';
/** 전략 목록 + 누락 ID별 단건 조회로 이름 맵 보강 */
export async function enrichStrategyNameMap(
base: Record<number, string>,
ids: Iterable<number | null | undefined>,
): Promise<Record<number, string>> {
const out = { ...base };
const missing = [...new Set(
[...ids]
.map(id => (id != null && id > 0 ? Math.trunc(id) : null))
.filter((id): id is number => id != null && !out[id] && !isStrategyMissingOnServer(id)),
)];
if (!missing.length) return out;
await Promise.all(missing.map(async id => {
try {
const s = await loadStrategyForNotification(id);
if (s?.name?.trim()) out[id] = s.name.trim();
} catch {
/* ignore */
}
}));
return out;
}
export function strategyNamesFromList(list: StrategyDto[]): Record<number, string> {
const out: Record<number, string> = {};
for (const s of list) {
if (s.id != null && s.id > 0 && s.name?.trim()) {
out[s.id] = s.name.trim();
}
}
return out;
}