53 lines
1.7 KiB
TypeScript
53 lines
1.7 KiB
TypeScript
const API_BASE = "/api";
|
|
|
|
export async function searchStock(query: string) {
|
|
const res = await fetch(`${API_BASE}/search`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ query }),
|
|
});
|
|
if (!res.ok) throw new Error("Search failed");
|
|
return res.json() as Promise<{ market: string; symbol: string; company_name: string }[]>;
|
|
}
|
|
|
|
export async function startAnalysis(market: string, symbol: string, company_name: string) {
|
|
const res = await fetch(`${API_BASE}/analyze`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ market, symbol, company_name }),
|
|
});
|
|
if (!res.ok) {
|
|
const error = await res.json();
|
|
throw new Error(error.detail || "Analysis failed");
|
|
}
|
|
return res.json();
|
|
}
|
|
|
|
export async function getReports() {
|
|
const res = await fetch(`${API_BASE}/reports`);
|
|
if (!res.ok) throw new Error("Failed to fetch reports");
|
|
return res.json();
|
|
}
|
|
|
|
export async function getReport(id: number) {
|
|
const res = await fetch(`${API_BASE}/reports/${id}`);
|
|
if (!res.ok) throw new Error("Failed to fetch report");
|
|
return res.json();
|
|
}
|
|
|
|
export async function getConfig() {
|
|
const res = await fetch(`${API_BASE}/config`);
|
|
if (!res.ok) throw new Error("Failed to fetch config");
|
|
return res.json();
|
|
}
|
|
|
|
export async function updateConfig(key: string, value: string) {
|
|
const res = await fetch(`${API_BASE}/config`, {
|
|
method: "POST",
|
|
headers: { "Content-Type": "application/json" },
|
|
body: JSON.stringify({ key, value }),
|
|
});
|
|
if (!res.ok) throw new Error("Failed to update config");
|
|
return res.json();
|
|
}
|