import { requestJson } from "@/shared/api/request-json" import type { SelectionResults, SelectionResultsQuery, SelectionRunAccepted, SelectionRunRequest, SelectionStrategy, } from "./selection.types" export function getSelectionResults( strategy: SelectionStrategy, targetTradeDate?: string, query: SelectionResultsQuery = { page: 1, pageSize: 10 }, signal?: AbortSignal, ) { const params = buildSelectionQueryParams(query) params.set("strategy", strategy) if (targetTradeDate) params.set("target_trade_date", targetTradeDate) return requestJson( `/api/v1/selection/results?${params.toString()}`, { signal }, ) } export function getSelectionRun( runId: string, query: SelectionResultsQuery = { page: 1, pageSize: 10 }, signal?: AbortSignal, ) { const params = buildSelectionQueryParams(query) return requestJson( `/api/v1/selection/runs/${runId}?${params.toString()}`, { signal, }, ) } function buildSelectionQueryParams(query: SelectionResultsQuery) { const params = new URLSearchParams({ page: String(query.page), page_size: String(query.pageSize), }) if (query.search) params.set("search", query.search) if (query.category) params.set("category", query.category) if (query.sort) params.set("sort", query.sort) return params } export function triggerSelectionRun( request: SelectionRunRequest, signal?: AbortSignal, ) { return requestJson("/api/v1/selection/runs", { body: JSON.stringify(request), headers: { "Content-Type": "application/json" }, method: "POST", signal, }) }