ADD: first api route get bookings

This commit is contained in:
2024-09-05 18:10:13 +02:00
parent 19ccdadd32
commit 113d676e57
3 changed files with 53 additions and 5 deletions

View File

@@ -1,6 +1,7 @@
package main package main
import ( import (
"arbeitszeitmessung/models"
"database/sql" "database/sql"
"fmt" "fmt"
) )
@@ -14,3 +15,30 @@ func OpenDatabase() (*sql.DB, error){
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) 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
}

View File

@@ -33,6 +33,8 @@ func timeHandler(w http.ResponseWriter, r *http.Request) {
switch r.Method { switch r.Method {
case "PUT": case "PUT":
createBooking(w, r) createBooking(w, r)
case "GET":
getBookings(w, r)
default: default:
http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) http.Error(w, "Method not allowed", http.StatusMethodNotAllowed)
} }
@@ -57,6 +59,21 @@ func createBooking(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusBadRequest) 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 { func getEnv(key, fallback string) string {
if value, ok := os.LookupEnv(key); ok { if value, ok := os.LookupEnv(key); ok {
return value return value

View File

@@ -5,6 +5,7 @@ import (
"log" "log"
"net/url" "net/url"
"strconv" "strconv"
"time"
) )
type SameBookingError struct{} type SameBookingError struct{}
@@ -17,6 +18,8 @@ type Booking struct {
CardID string `json:"cradID"` CardID string `json:"cradID"`
ReaderID string `json:"readerID"` ReaderID string `json:"readerID"`
BookingType int `json:"bookingTyp"` 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 { func (b Booking) New(card_id string, reader_id string, booking_type int) Booking {