xpeditis2.0/apps/frontend/src/lib/api/ports.ts
2025-12-03 21:39:50 +01:00

70 lines
1.6 KiB
TypeScript

// API Base URL
const API_BASE_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:4000';
export interface PortCoordinates {
latitude: number;
longitude: number;
}
export interface Port {
id: string;
code: string;
name: string;
city: string;
country: string;
countryName: string;
coordinates: PortCoordinates;
timezone?: string;
isActive: boolean;
displayName: string;
}
export interface PortSearchParams {
query: string;
limit?: number;
countryFilter?: string;
}
export interface PortSearchResponse {
ports: Port[];
totalMatches: number;
}
/**
* Search ports by query (autocomplete)
*/
export async function searchPorts(params: PortSearchParams): Promise<PortSearchResponse> {
// Use the same key as the rest of the app: 'access_token' with underscore
const token = typeof window !== 'undefined' ? localStorage.getItem('access_token') : null;
if (!token) {
throw new Error('No access token found');
}
const queryParams = new URLSearchParams({
query: params.query,
});
if (params.limit) {
queryParams.append('limit', params.limit.toString());
}
if (params.countryFilter) {
queryParams.append('countryFilter', params.countryFilter);
}
const response = await fetch(`${API_BASE_URL}/api/v1/ports/search?${queryParams.toString()}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${token}`,
},
});
if (!response.ok) {
const error = await response.json();
throw new Error(error.message || 'Failed to search ports');
}
return response.json();
}