package endpoints import ( "arbeitszeitmessung/helper" "arbeitszeitmessung/models" "encoding/json" "log" "net/http" "strconv" ) // Frontend relevant backend functionality -> not used by the arduino devices func TimeHandler(w http.ResponseWriter, r *http.Request) { helper.SetCors(w) switch r.Method { case "GET": getBookings(w, r) case "UPDATE": updateBooking(w, r) case "OPTIONS": // just support options header for non GET Requests from SWAGGER w.WriteHeader(http.StatusOK) default: http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) } } // Returns bookings from DB with similar card uid -> checks for card uid in http query params func getBookings(w http.ResponseWriter, r *http.Request) { card_uid := r.URL.Query().Get("card_uid") if card_uid == "" { http.Error(w, "Missing cardID query parameter", http.StatusBadRequest) return } bookings, err := (*models.Booking).GetBookingsByCardID(nil, card_uid) 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) } // Updates a booking form the given json body func updateBooking(w http.ResponseWriter, r *http.Request) { _booking_id := r.URL.Query().Get("counter_id") if _booking_id == "" { http.Error(w, "Missing bookingID query parameter", http.StatusBadRequest) return } booking_id, err := strconv.Atoi(_booking_id) if err != nil { http.Error(w, "Invalid bookingID query parameter", http.StatusBadRequest) return } _booking, err := (*models.Booking).GetBookingById(nil, booking_id) if err != nil { log.Println("Error getting booking: ", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } var booking models.Booking dec := json.NewDecoder(r.Body) dec.DisallowUnknownFields() err = dec.Decode(&booking) if err != nil { log.Println("Error parsing booking: ", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) return } if booking.CounterId != 0 && booking.CounterId != _booking.CounterId { log.Println("Booking Ids do not match") http.Error(w, "Booking Ids do not match", http.StatusBadRequest) return } _booking.Update(booking) _booking.Save() w.Header().Set("Content-Type", "application/json") json.NewEncoder(w).Encode(_booking) }