From 113d676e5788ef17e175548da416800b5a0abaef Mon Sep 17 00:00:00 2001 From: tom Date: Thu, 5 Sep 2024 18:10:13 +0200 Subject: [PATCH] ADD: first api route get bookings --- Backend/database.go | 32 ++++++++++++++++++++++++++++++-- Backend/main.go | 17 +++++++++++++++++ Backend/models/booking.go | 9 ++++++--- 3 files changed, 53 insertions(+), 5 deletions(-) diff --git a/Backend/database.go b/Backend/database.go index 13c1e48..0da28fc 100644 --- a/Backend/database.go +++ b/Backend/database.go @@ -1,16 +1,44 @@ package main import ( + "arbeitszeitmessung/models" "database/sql" "fmt" ) -func OpenDatabase() (*sql.DB, error){ +func OpenDatabase() (*sql.DB, error) { dbHost := getEnv("POSTGRES_HOST", "localhost") dbName := getEnv("POSTGRES_DB", "arbeitszeitmessung") dbUser := getEnv("POSTGRES_USER", "arbeit_zeit") dbPassword := getEnv("POSTGRES_PASS", "password") - connStr:= fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable", dbUser, dbPassword, dbHost, dbName) + connStr := fmt.Sprintf("postgres://%s:%s@%s:5432/%s?sslmode=disable", dbUser, dbPassword, dbHost, dbName) return sql.Open("postgres", connStr) } + +func GetBookingsByCardID(db *sql.DB, card_id string) ([]models.Booking, error) { + qStr, err := db.Prepare((`SELECT * FROM zeiten WHERE card_id = $1`)) + if err != nil { + return nil, err + } + var bookings []models.Booking + rows, err := qStr.Query(card_id) + if err == sql.ErrNoRows { + return bookings, err + } + if err != nil { + return nil, err + } + defer rows.Close() + for rows.Next() { + var booking models.Booking + if err := rows.Scan(&booking.Id, &booking.LoggedTime, &booking.CardID, &booking.ReaderID, &booking.BookingType); err != nil { + return bookings, err + } + bookings = append(bookings, booking) + } + if err = rows.Err(); err != nil { + return bookings, err + } + return bookings, nil +} diff --git a/Backend/main.go b/Backend/main.go index 4b24ead..1312497 100644 --- a/Backend/main.go +++ b/Backend/main.go @@ -33,6 +33,8 @@ 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) } @@ -57,6 +59,21 @@ func createBooking(w http.ResponseWriter, r *http.Request) { 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 diff --git a/Backend/models/booking.go b/Backend/models/booking.go index 1c0ed5e..2390fcb 100644 --- a/Backend/models/booking.go +++ b/Backend/models/booking.go @@ -5,6 +5,7 @@ import ( "log" "net/url" "strconv" + "time" ) type SameBookingError struct{} @@ -14,9 +15,11 @@ func (e SameBookingError) Error() string { } type Booking struct { - CardID string `json:"cradID"` - ReaderID string `json:"readerID"` - BookingType int `json:"bookingTyp"` + CardID string `json:"cradID"` + ReaderID string `json:"readerID"` + BookingType int `json:"bookingTyp"` + LoggedTime time.Time `json:"loggedTime"` + Id int `json:"id"` } func (b Booking) New(card_id string, reader_id string, booking_type int) Booking {