ADD: first api route get bookings
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"arbeitszeitmessung/models"
|
||||
"database/sql"
|
||||
"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)
|
||||
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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
"log"
|
||||
"net/url"
|
||||
"strconv"
|
||||
"time"
|
||||
)
|
||||
|
||||
type SameBookingError struct{}
|
||||
@@ -17,6 +18,8 @@ type Booking struct {
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user