File size: 3,972 Bytes
26a90fc b8e6434 1c92e64 b8e6434 e79f2ff b8e6434 e79f2ff b8e6434 e79f2ff b8e6434 e89542d b8e6434 e89542d b8e6434 1c92e64 7259e84 5f2460b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | import type { AnalysisHistoryItem, AnalysisResult, CompanyProfile, Tender, PurchaseOrder } from "./types";
const API_BASE = process.env.NEXT_PUBLIC_API_BASE ?? "";
const jsonHeaders = {
"Content-Type": "application/json",
};
export async function healthCheck() {
const res = await fetch(`${API_BASE}/api/health`);
if (!res.ok) {
throw new Error("Health check failed");
}
return res.json();
}
export async function fetchDbStatus() {
const res = await fetch(`${API_BASE}/api/health/db-status`);
if (!res.ok) return null;
return res.json();
}
export async function searchTenders(params: {
keyword?: string;
buyer?: string;
provider_code?: string;
date?: string;
skip?: number;
limit?: number;
}): Promise<Tender[]> {
const query = new URLSearchParams();
if (params.keyword) query.append("keyword", params.keyword);
if (params.buyer) query.append("buyer", params.buyer);
if (params.provider_code) query.append("provider_code", params.provider_code);
if (params.date) query.append("date", params.date);
if (params.skip !== undefined) query.append("skip", params.skip.toString());
if (params.limit !== undefined) query.append("limit", params.limit.toString());
const res = await fetch(`${API_BASE}/api/tenders?${query.toString()}`);
if (!res.ok) {
throw new Error("Error searching tenders");
}
return res.json();
}
export async function analyzeTender(
tender: Tender,
companyProfile: CompanyProfile,
documentText?: string,
models?: Record<string, string>
): Promise<AnalysisResult> {
const res = await fetch(`${API_BASE}/api/analyze`, {
method: "POST",
headers: jsonHeaders,
body: JSON.stringify({
tender,
company_profile: companyProfile,
document_text: documentText,
models: models
}),
});
if (!res.ok) {
throw new Error("Error analyzing tender");
}
return res.json();
}
export async function uploadDocument(file: File): Promise<{ text: string; filename: string }> {
const formData = new FormData();
formData.append("file", file);
const res = await fetch(`${API_BASE}/api/upload-document`, {
method: "POST",
body: formData,
});
if (!res.ok) {
throw new Error("Error uploading document");
}
return res.json();
}
export async function saveCompanyProfile(profile: CompanyProfile): Promise<CompanyProfile> {
const res = await fetch(`${API_BASE}/api/company-profile`, {
method: "POST",
headers: jsonHeaders,
body: JSON.stringify(profile),
});
if (!res.ok) {
throw new Error("Error saving company profile");
}
return res.json();
}
export async function fetchCompanyProfile(): Promise<CompanyProfile> {
const res = await fetch(`${API_BASE}/api/company-profile`);
if (!res.ok) {
throw new Error("No company profile available");
}
return res.json();
}
export async function fetchAnalysisHistory(): Promise<AnalysisHistoryItem[]> {
const res = await fetch(`${API_BASE}/api/analysis-history`);
if (!res.ok) {
throw new Error("Error fetching analysis history");
}
return res.json();
}
export async function syncDatabase() {
const res = await fetch(`${API_BASE}/api/tenders/sync`, { method: "POST" });
if (!res.ok) {
throw new Error("Error syncing database");
}
return res.json();
}
export async function scrapeTenders(keyword: string): Promise<Tender[]> {
const res = await fetch(`${API_BASE}/api/tenders/scrape?keyword=${encodeURIComponent(keyword)}`);
if (!res.ok) {
throw new Error("Error scraping tenders");
}
return res.json();
}
export async function fetchPurchaseOrders(date?: string, status: string = "todos"): Promise<PurchaseOrder[]> {
const query = new URLSearchParams();
if (date) query.append("date", date);
query.append("status", status);
const res = await fetch(`${API_BASE}/api/purchase-orders?${query.toString()}`);
if (!res.ok) {
throw new Error("Error fetching purchase orders");
}
return res.json();
}
|