| 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(); |
| } |
|
|