diff --git a/main.go b/main.go index 1c19c2f..050276d 100644 --- a/main.go +++ b/main.go @@ -144,6 +144,16 @@ func main() { r.HandleFunc("/api/banner", GetBannerHandler).Methods("GET", "OPTIONS") r.HandleFunc("/submit", handleSubmit).Methods("POST", "OPTIONS") // Public submit endpoint for evidence-aut.html + // Add redirect for /rezervace-aut to /rezervace-aut.html + r.HandleFunc("/rezervace-aut", func(w http.ResponseWriter, r *http.Request) { + http.ServeFile(w, r, "rezervace-aut.html") + }).Methods("GET") + + // Make reservation endpoints public by moving them outside of the protected API routes + r.HandleFunc("/api/reservations", handleGetReservations).Methods("GET") + r.HandleFunc("/api/reservations", handleCreateReservation).Methods("POST") + r.HandleFunc("/api/check-availability", handleCheckAvailability).Methods("GET") + // Protected API routes with auth middleware api := r.PathPrefix("/api").Subrouter() api.Use(authMiddleware) @@ -159,11 +169,6 @@ func main() { api.HandleFunc("/apps/{id}", UpdateAppHandler).Methods("PUT") api.HandleFunc("/apps/{id}", DeleteAppHandler).Methods("DELETE") - // Reservation system routes - api.HandleFunc("/reservations", handleGetReservations).Methods("GET") - api.HandleFunc("/reservations", handleCreateReservation).Methods("POST") - api.HandleFunc("/check-availability", handleCheckAvailability).Methods("GET") - // Admin routes - defined before the catch-all static file server r.HandleFunc("/admin", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "admin.html") @@ -315,6 +320,12 @@ func handleCreateReservation(w http.ResponseWriter, r *http.Request) { return } + // Only validate required fields (purpose is now optional) + if reservation.DriverName == "" || reservation.Vehicle == "" { + http.Error(w, "Driver name and vehicle are required", http.StatusBadRequest) + return + } + reservation.ID = fmt.Sprintf("res_%d", time.Now().UnixNano()) reservations, err := loadReservations() diff --git a/rezervace-aut.html b/rezervace-aut.html index 116672b..0242931 100644 --- a/rezervace-aut.html +++ b/rezervace-aut.html @@ -309,10 +309,15 @@ -
- - +
+ +
+
+ +
+ +
@@ -485,6 +490,71 @@ }, 5000); } }); + + function showMessage(text, type) { + const message = document.getElementById('message'); + const messageText = document.getElementById('messageText'); + const messageIcon = document.getElementById('messageIcon'); + + if (!message || !messageText || !messageIcon) { + console.error('Message elements not found'); + return; + } + + message.classList.remove('hidden', 'bg-green-50', 'bg-red-50', 'bg-blue-50', 'text-green-800', 'text-red-800', 'text-blue-800'); + messageText.textContent = text; + + switch(type) { + case 'success': + message.classList.add('bg-green-50', 'text-green-800'); + messageIcon.className = 'fas fa-check-circle text-green-600 mr-2'; + break; + case 'error': + message.classList.add('bg-red-50', 'text-red-800'); + messageIcon.className = 'fas fa-exclamation-circle text-red-600 mr-2'; + break; + case 'info': + message.classList.add('bg-blue-50', 'text-blue-800'); + messageIcon.className = 'fas fa-info-circle text-blue-600 mr-2'; + break; + } + + message.classList.remove('hidden'); + } + + // Update form submission to handle API errors better + form.addEventListener('submit', async (e) => { + e.preventDefault(); + + try { + showMessage('Odesílání rezervace...', 'info'); + + const response = await fetch('/api/reservations', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + driverName: document.getElementById('driverName').value, + vehicle: document.getElementById('vehicle').value, + startDateTime: new Date(dateStart.value + 'T' + timeStart.value).toISOString(), + endDateTime: new Date(dateEnd.value + 'T' + timeEnd.value).toISOString(), + purpose: document.getElementById('purpose').value || undefined // Make purpose optional + }) + }); + + if (!response.ok) { + throw new Error(response.statusText || 'Došlo k chybě při vytváření rezervace'); + } + + showMessage('Rezervace byla úspěšně vytvořena', 'success'); + form.reset(); + dateStart.value = todayStr; + dateEnd.value = todayStr; + + } catch (error) { + console.error('Error:', error); + showMessage(error.message || 'Nepodařilo se vytvořit rezervaci', 'error'); + } + }); \ No newline at end of file