document.addEventListener("DOMContentLoaded", () => {
const apiUrl = "http://localhost:8080"; // Replace with your actual backend URL
// Fetch and populate table data
function loadTables() {
fetch(`${apiUrl}/tables`)
.then((response) => response.json())
.then((tables) => {
const tableBody = document.querySelector("#tables tbody");
tableBody.innerHTML = ""; // Clear existing rows
tables.forEach((table) => {
const row = document.createElement("tr");
row.innerHTML = `
${table.id} |
${table.name} |
${table.max_people} |
${table.room} |
|
`;
tableBody.appendChild(row);
});
})
.catch((error) => console.error("Error loading tables:", error));
}
// Handle form submission to create or update a table
document.querySelector("#table-form").addEventListener("submit", (e) => {
e.preventDefault();
const id = parseInt(document.querySelector("#table-id").value, 10) || undefined;
const name = parseInt(document.querySelector("#table-name").value, 10); // Adjusted for name as integer
const maxPeople = parseInt(document.querySelector("#table-max-people").value, 10);
const room = document.querySelector("#table-room").value;
const method = id ? "PUT" : "POST";
const endpoint = id ? `/table` : `/table`;
fetch(`${apiUrl}${endpoint}`, {
method,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id, name, max_people: maxPeople, room }),
})
.then((response) => {
if (!response.ok) {
return response.text().then((text) => {
if (text.trim() === "") {
throw new Error("Empty response from server");
}
try {
const errorJson = JSON.parse(text);
throw new Error(errorJson.message || "Failed to save table");
} catch {
throw new Error("Unexpected server response: " + text);
}
});
}
return response.text().then((text) => {
if (text.trim() === "") {
return {}; // Handle empty body for successful responses
}
return JSON.parse(text);
});
})
.then(() => {
document.querySelector("#table-form").reset();
loadTables();
alert(`Table ${id ? 'updated' : 'created'} successfully.`);
})
.catch((error) => {
console.error("Error saving table:", error);
alert(`Failed to save table: ${error.message}`);
});
});
// Handle table row actions (edit/delete)
document.querySelector("#tables").addEventListener("click", (e) => {
const button = e.target;
const id = button.dataset.id;
if (button.classList.contains("edit")) {
fetch(`${apiUrl}/table/${id}`)
.then((response) => response.json())
.then((table) => {
document.querySelector("#table-id").value = table.id;
document.querySelector("#table-name").value = table.name;
document.querySelector("#table-max-people").value = table.max_people;
document.querySelector("#table-room").value = table.room;
})
.catch((error) => console.error("Error fetching table:", error));
} else if (button.classList.contains("delete")) {
fetch(`${apiUrl}/table/${id}`, { method: "DELETE" })
.then(() => loadTables())
.catch((error) => console.error("Error deleting table:", error));
}
});
// Handle find table by ID
document.querySelector("#find-table-form").addEventListener("submit", (e) => {
e.preventDefault();
const id = parseInt(document.querySelector("#find-table-id").value, 10);
fetch(`${apiUrl}/table/${id}`)
.then((response) => {
if (!response.ok) {
throw new Error(`Table with ID ${id} not found`);
}
return response.json();
})
.then((table) => {
alert(`Table ID: ${table.id}\nName (Number): ${table.name}\nMax People: ${table.max_people}\nRoom: ${table.room}`);
})
.catch((error) => {
alert(`Error: ${error.message}`);
console.error("Error finding table:", error);
});
});
// Initial load
loadTables();
// Fetch and populate booking data
function loadBookings() {
fetch(`${apiUrl}/bookings`)
.then((response) => response.json())
.then((bookings) => {
const bookingBody = document.querySelector("#bookings tbody");
bookingBody.innerHTML = ""; // Clear existing rows
bookings.forEach((booking) => {
const row = document.createElement("tr");
row.innerHTML = `
${booking.id} |
${booking.id_tables} |
${booking.reservation} |
${booking.time_reserve} |
${booking.who_booked} |
|
`;
bookingBody.appendChild(row);
});
})
.catch((error) => console.error("Error loading bookings:", error));
}
// Handle form submission to create or update a booking
document.querySelector("#booking-form").addEventListener("submit", (e) => {
e.preventDefault();
const id = parseInt(document.querySelector("#booking-id").value, 10) || undefined;
const tableId = parseInt(document.querySelector("#booking-table-id").value, 10);
const reservationDatetime = String(document.querySelector("#reservation-datetime").value);
const timeReserve = document.querySelector("#time-reserve").value;
const whoBooked = document.querySelector("#who-booked").value;
const method = id ? "PUT" : "POST";
const endpoint = id ? `/booking` : `/booking`;
fetch(`${apiUrl}${endpoint}`, {
method,
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id, id_tables: tableId, reservation: reservationDatetime, time_reserve: timeReserve, who_booked: whoBooked }),
})
.then((response) => {
if (!response.ok) {
return response.text().then((text) => {
if (text.trim() === "") {
throw new Error("Empty response from server");
}
try {
const errorJson = JSON.parse(text);
throw new Error(errorJson.message || "Failed to save table");
} catch {
throw new Error("Unexpected server response: " + text);
}
});
}
return response.text().then((text) => {
if (text.trim() === "") {
return {}; // Handle empty body for successful responses
}
return JSON.parse(text);
});
})
.then(() => {
document.querySelector("#booking-form").reset();
loadBookings();
alert(`Booking ${id ? 'updated' : 'created'} successfully.`);
})
.catch((error) => {
console.error("Error saving booking:", error);
alert(`Failed to save booking: ${error.message}`);
});
});
// Handle booking row actions (edit/delete)
document.querySelector("#bookings").addEventListener("click", (e) => {
const button = e.target;
const id = button.dataset.id;
if (button.classList.contains("edit")) {
fetch(`${apiUrl}/booking/${id}`)
.then((response) => response.json())
.then((booking) => {
document.querySelector("#booking-id").value = booking.id;
document.querySelector("#booking-table-id").value = booking.id_tables;
document.querySelector("#reservation-datetime").value = booking.reservation;
document.querySelector("#time-reserve").value = booking.time_reserve;
document.querySelector("#who-booked").value = booking.who_booked;
})
.catch((error) => console.error("Error fetching booking:", error));
} else if (button.classList.contains("delete")) {
fetch(`${apiUrl}/booking/${id}`, { method: "DELETE" })
.then(() => loadBookings())
.catch((error) => console.error("Error deleting booking:", error));
}
});
// Handle find booking by ID
document.querySelector("#find-booking-form").addEventListener("submit", (e) => {
e.preventDefault();
const id = document.querySelector("#find-booking-id").value;
fetch(`${apiUrl}/booking/${id}`)
.then((response) => {
if (!response.ok) throw new Error("Booking not found");
return response.json();
})
.then((booking) => {
alert(`Booking ID: ${booking.id}\nTable ID: ${booking.id_tables}\nReservation: ${booking.reservation}\nTime Reserve: ${booking.time_reserve}\nWho Booked: ${booking.who_booked}`);
})
.catch((error) => {
alert(`Error: ${error.message}`);
console.error("Error finding booking:", error);
});
});
// Initial load
loadBookings();
});