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,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
}

View File

@@ -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

View File

@@ -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 {