package main import ( "arbeitszeitmessung/models" "database/sql" "encoding/json" "errors" "fmt" "log" "net/http" "os" _ "github.com/lib/pq" ) var DB *sql.DB func main() { var err error DB, err = OpenDatabase() if err != nil { log.Fatal(err) } defer DB.Close() http.HandleFunc("/time", timeHandler) fmt.Println("Server is running at http://localhost:8080") log.Fatal(http.ListenAndServe(":8080", nil)) } func timeHandler(w http.ResponseWriter, r *http.Request) { switch r.Method { case "PUT": createBooking(w, r) case "GET": getBookings(w, r) default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } } func createBooking(w http.ResponseWriter, r *http.Request) { booking := (*models.Booking).FromUrlParams(nil, r.URL.Query()) if booking.Verify() { err := booking.Insert(DB) if errors.Is(models.SameBookingError{}, err) { http.Error(w, "Booking already exists", http.StatusConflict) return } if err != nil { log.Println("Error inserting booking: ", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } w.WriteHeader(http.StatusAccepted) json.NewEncoder(w).Encode(booking) } w.WriteHeader(http.StatusBadRequest) } func getBookings(w http.ResponseWriter, r *http.Request) { card_id := r.URL.Query().Get("cardID") bookings, err := GetBookingsByCardID(DB, card_id) if err != nil { log.Println("Error getting bookings: ", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(bookings) } // func getBooking(w http.ResponseWriter, r *http.Request) func getEnv(key, fallback string) string { if value, ok := os.LookupEnv(key); ok { return value } return fallback }