agep-cargo/src/api.js
2025-10-11 03:21:04 +02:00

55 lines
1.8 KiB
JavaScript

// Simple frontend API helper with graceful fallbacks when the backend is unavailable (useful during frontend-only development)
const DEFAULT_BIKES = [1000,2000,3000,4000,5000]
export async function getBikes() {
try {
const res = await fetch('/api/bikes')
if (!res.ok) throw new Error('Failed to fetch bikes')
return res.json()
} catch (err) {
// Fallback to defaults when backend is not reachable
console.warn('getBikes: using fallback bikes because backend is unavailable', err)
return { bikes: DEFAULT_BIKES }
}
}
export async function createBooking(payload) {
try {
const res = await fetch('/api/bookings', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
})
const data = await res.json()
if (!res.ok) throw new Error(data?.error || 'Failed to create booking')
return data
} catch (err) {
// Fallback: simulate a successful booking locally for frontend development
console.warn('createBooking: backend unavailable, creating a local mock booking', err)
const mock = {
booking: {
id: Math.floor(Math.random() * 100000) + 100,
bike_type: payload.bike_type,
start_date: payload.start_date,
end_date: payload.end_date,
name: payload.name,
email: payload.email,
created_at: new Date().toISOString(),
}
}
return mock
}
}
export async function listBookings() {
try {
const res = await fetch('/api/bookings')
if (!res.ok) throw new Error('Failed to list bookings')
return res.json()
} catch (err) {
// Fallback: return an empty list or a small mock so Admin page can render
console.warn('listBookings: using fallback empty list because backend is unavailable', err)
return { bookings: [] }
}
}