| import type { AnalysisHistoryItem, AnalysisResult, CompanyProfile, Tender } from "./types"; |
|
|
| const API_BASE = process.env.NEXT_PUBLIC_API_BASE ?? "http://localhost:8000"; |
|
|
| const jsonHeaders = { |
| "Content-Type": "application/json", |
| }; |
|
|
| export async function healthCheck() { |
| const res = await fetch(`${API_BASE}/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_code?: 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_code) query.append("buyer_code", params.buyer_code); |
| 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 |
| ): Promise<AnalysisResult> { |
| const res = await fetch(`${API_BASE}/api/analyze`, { |
| method: "POST", |
| headers: jsonHeaders, |
| body: JSON.stringify({ |
| tender, |
| company_profile: companyProfile, |
| document_text: documentText |
| }), |
| }); |
| 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(); |
| } |
|
|