import type { TickerRecord, TickerMetadata } from "../types/ticker"; import type { TickerStore } from "./ticker-store"; import { hydrateTickerMetadata } from "../tickers/metadata"; function parseTickerMetadata(json: string): TickerMetadata { return hydrateTickerMetadata(JSON.parse(json) as Record); } export class TickerRepository { constructor(private readonly tickers: TickerStore) {} async loadAllTickers(): Promise { return this.tickers.getAll().flatMap((row) => { try { return [{ metadata: parseTickerMetadata(row.metadata) }]; } catch { return []; } }); } async loadTicker(symbol: string): Promise { const json = this.tickers.get(symbol); if (!json) return null; try { return { metadata: parseTickerMetadata(json) }; } catch { return null; } } async saveTicker(ticker: TickerRecord): Promise { this.tickers.save(ticker.metadata.ticker, ticker.metadata); } async createTicker(metadata: TickerMetadata): Promise { const ticker: TickerRecord = { metadata }; await this.saveTicker(ticker); return ticker; } async deleteTicker(symbol: string): Promise { this.tickers.delete(symbol); } }