2026-08-09 09:34:46 +08:00
|
|
|
import { requestJson } from "@/shared/api/request-json"
|
|
|
|
|
|
|
|
|
|
import type {
|
|
|
|
|
SelectionResults,
|
2026-08-10 11:09:23 +08:00
|
|
|
SelectionResultsQuery,
|
2026-08-09 09:34:46 +08:00
|
|
|
SelectionRunAccepted,
|
|
|
|
|
SelectionRunRequest,
|
|
|
|
|
SelectionStrategy,
|
|
|
|
|
} from "./selection.types"
|
|
|
|
|
|
|
|
|
|
export function getSelectionResults(
|
|
|
|
|
strategy: SelectionStrategy,
|
|
|
|
|
targetTradeDate?: string,
|
2026-08-10 11:09:23 +08:00
|
|
|
query: SelectionResultsQuery = { page: 1, pageSize: 10 },
|
2026-08-09 09:34:46 +08:00
|
|
|
signal?: AbortSignal,
|
|
|
|
|
) {
|
2026-08-10 11:09:23 +08:00
|
|
|
const params = buildSelectionQueryParams(query)
|
|
|
|
|
params.set("strategy", strategy)
|
2026-08-09 09:34:46 +08:00
|
|
|
if (targetTradeDate) params.set("target_trade_date", targetTradeDate)
|
|
|
|
|
return requestJson<SelectionResults>(
|
|
|
|
|
`/api/v1/selection/results?${params.toString()}`,
|
|
|
|
|
{ signal },
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2026-08-10 11:09:23 +08:00
|
|
|
export function getSelectionRun(
|
|
|
|
|
runId: string,
|
|
|
|
|
query: SelectionResultsQuery = { page: 1, pageSize: 10 },
|
|
|
|
|
signal?: AbortSignal,
|
|
|
|
|
) {
|
|
|
|
|
const params = buildSelectionQueryParams(query)
|
|
|
|
|
return requestJson<SelectionResults>(
|
|
|
|
|
`/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),
|
2026-08-09 09:34:46 +08:00
|
|
|
})
|
2026-08-10 11:09:23 +08:00
|
|
|
if (query.search) params.set("search", query.search)
|
|
|
|
|
if (query.category) params.set("category", query.category)
|
2026-08-31 16:14:16 +08:00
|
|
|
if (query.sort) params.set("sort", query.sort)
|
2026-08-10 11:09:23 +08:00
|
|
|
return params
|
2026-08-09 09:34:46 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export function triggerSelectionRun(
|
|
|
|
|
request: SelectionRunRequest,
|
|
|
|
|
signal?: AbortSignal,
|
|
|
|
|
) {
|
|
|
|
|
return requestJson<SelectionRunAccepted>("/api/v1/selection/runs", {
|
|
|
|
|
body: JSON.stringify(request),
|
|
|
|
|
headers: { "Content-Type": "application/json" },
|
|
|
|
|
method: "POST",
|
|
|
|
|
signal,
|
|
|
|
|
})
|
|
|
|
|
}
|